串口读数据出现误码?
做了一个读写串口的程序。
存在如下问题
在串口打开后,建立串口收数据线程,监控串口传来的数据。每当收到数据后再进行处理。
现在的问题是当用到ClearCommError(ceSeries-> m_hComm,&dwReadErrors,&cmState);的时候cmState获得接收到数据的长度。但是在VC下数据长度只要大于8字节就会出现乱码。在EVC下每隔120包左右会出现乱码。单步跟了一下,发现是cmState接收数据长度就接收错了。不知道如何解决。
但如果确定了readfile的长度后就不会出现乱码问题。
DWORD willReadLen;
willReadLen =17;// 如果用这个cmState.cbInQue 就会出现乱马;
ReadFile(ceSeries-> m_hComm, readBuf, willReadLen, &actualReadLen,0);
但如果要接收长度不固定的数据就会出现问题了。谁能帮我解决一下。
[解决办法]
那你就多读几次嘛!
通过comState来确定一下每次要读的长度。
然后读出数据,在拼接!
为什么在vc中超过8个字节就会出现那样的问题呢?
这个还真没有试过呢!
[解决办法]
我都是使用worker thread + overlapped I/O来读串口。一个字节一个字节的读。然后自己在buffer中把这些字节拼起来。从来没有试图去获取过串口接受到了多少个字符。
如果你用的是EVC的话好像有个什么串口消息之类的,可以尝试用一下。