做了一个读写串口的程序。
存在如下问题
在串口打开后,建立串口收数据线程,监控串口传来的数据。每当收到数据后再进行处理。
现在的问题是当用到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);
如果要接收长度不固定的数据就会出现问题了。谁能帮我解决一下。
可以一个一个的读吧,我是这么做的.我学串口时就这么用的,一直没错过...
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;
}
先谢谢你哦锄禾:)
那怎么处理得到的数据呢?假设是10个字节的数据。没有含有数据长度的字节。那么如何判断该读几个组成一组数据呢?如果规定10个字节为一组,如果出现少了一个字节的情况后面不就全乱了?如果通过消息头来判断。那么如果数据中出现跟消息头内容相同的字节怎么办呢?
串口是没有协议的,如果只是数据流就没问题,但如果你要传送特定结构的数据,建议还是定义一个简单的传输协议。
另外,驱动建议不要使用DMA方式,FIFO方式比较稳定。
条件:1、wince开发2年以上。
2、做过媒体处理的优先考虑。
3、熟悉网络通讯协议。
4、个人在兼职期间,时间能够保证。
5、有良好的团队合作意识。
6、有良好的上网条件。
注意:付款方式按照项目付款。
联系方式:project911@163.com