串口读数据出现误码?

huim   2007-3-9 14:08 楼主
做了一个读写串口的程序。
存在如下问题
在串口打开后,建立串口收数据线程,监控串口传来的数据。每当收到数据后再进行处理。
现在的问题是当用到ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);的时候cmState获得接收到数据的长度。但是在VC下数据长度只要大于8字节就会出现乱码。在EVC下每隔120包左右会出现乱码。单步跟了一下,发现出误码的时候是cmState这个判断数据长度的就出错了,比方说实际发17个字节长度但是接收时会只是几个。但前面120包数据都是正常的。不知道如何解决。
但如果确定了readfile的长度后就不会出现乱码问题。
DWORD willReadLen;
willReadLen =17;// cmState.cbInQue (用这个就会出现乱马);
ReadFile(ceSeries->m_hComm, readBuf, willReadLen, &actualReadLen,0);
如果要接收长度不固定的数据就会出现问题了。谁能帮我解决一下。

回复评论 (11)

顶一下,大家帮帮忙呀。
点赞  2007-3-10 20:47
自己再顶
点赞  2007-3-12 09:23
up
点赞  2007-3-12 15:33

5楼 wwp 

啊,终于有人帮我顶一下啦:)
点赞  2007-3-12 22:34
顶※……
点赞  2007-3-13 13:29
可以一个一个的读吧,我是这么做的.我学串口时就这么用的,一直没错过...

while (port->m_hCom != INVALID_HANDLE_VALUE)
        {
                BOOL bReadResult = ReadFile(port->m_hCom, &ucRxChar,
                                                1, &dwLength, NULL);//从串口读取数据
                if (bReadResult && (dwLength > 0))
                {
                        处理;;                        }
                }
        }
        delete[] pRxBufEx;
        return 0;
}
点赞  2007-3-13 14:52
先谢谢你哦锄禾:)
那怎么处理得到的数据呢?假设是10个字节的数据。没有含有数据长度的字节。那么如何判断该读几个组成一组数据呢?如果规定10个字节为一组,如果出现少了一个字节的情况后面不就全乱了?如果通过消息头来判断。那么如果数据中出现跟消息头内容相同的字节怎么办呢?
点赞  2007-3-13 22:31
顶一个……
点赞  2007-3-18 19:19
串口是没有协议的,如果只是数据流就没问题,但如果你要传送特定结构的数据,建议还是定义一个简单的传输协议。
点赞  2007-3-20 09:53
另外,驱动建议不要使用DMA方式,FIFO方式比较稳定。
点赞  2007-3-20 09:54
条件:1、wince开发2年以上。
      2、做过媒体处理的优先考虑。
      3、熟悉网络通讯协议。
      4、个人在兼职期间,时间能够保证。
      5、有良好的团队合作意识。
      6、有良好的上网条件。
注意:付款方式按照项目付款。

联系方式:project911@163.com
点赞  2007-3-22 11:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复