CSerialPort 接收时丢失数据问题
来源:互联网 发布:如何提高情商 知乎 编辑:程序博客网 时间:2024/06/05 05:08
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
哪位大神对 CSerialPort (作者是Remon Spekreijse)这个类比较熟?最近发现使用USB转RS-232连PC时,使用CSerialPort接收时会发生丢数据的情况,丢失率1.3%左右。直接使用RS-232则不会出现丢数据的情况。不过使用串口助手也不会出现这种情况。有没有相同经历的同仁?
个人见解: USB 转 232 一般为了提高USB数据包的载荷率, 会有一个延迟计时器, 以便将一段时间内的数据组成USB数据帧, 可能在这段时间内的数据超过了缓冲区长度, 可以在驱动设置中降低这个设置值,
或者 SetupComm 加大缓冲区长度
解决方法找到了,但是具体原因不是很清楚。
后来进行多次测试之后发现,当满足以下条件时,将会出现数据丢失的情况:
1.连接线使用USB转RS-232
2.PC端接收数据的同时,发送数据。
3.发送数据的速度大于接收数据的速度。发送速度越快,数据丢失率越高。发送速度越慢,数据丢失率越低。
解决方法是:
将 WriteChar(CSerialPort* port) 内部的
PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
改为:
PurgeComm(port->m_hComm, PURGE_TXCLEAR | PURGE_TXABORT);
But,为什么在不修改代码的情况下,直接使用RS-232连接线不会出现数据丢失的情况呢??清空接收缓冲区了,数据接收为什么没有丢失??
参考:http://bbs.csdn.net/topics/390996461
如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033
0 0
- CSerialPort 接收时丢失数据问题
- CSerialPort类接收数据时comstat未初始化
- CSerialPort类接收数据时comstat未初始化
- CSerialPort类接收数据时comstat未初始化
- CSerialPort类接收数据时comstat未初始化
- CSerialPort类接收数据时comstat未初始化
- CSerialPort类接收数据时comstat未初始化
- CSerialport用于多串口烧录MCU时丢失数据的分析与解决办法
- IOCP接收大并发时出现数据丢失
- 解决SerialPort串口编程接收数据丢失
- excel转成DataTable时数据丢失问题
- jqGrid翻页时数据选中丢失问题
- Session数据丢失问题
- Memcache 丢失数据问题
- Redis数据“丢失”问题
- Flume 丢失数据问题
- Redis数据“丢失”问题
- 接收post数据时汉字乱码问题
- Oracle 性能优化的基本方法概述
- Linux解压tar.gz文件时提示gzip:stdin:not错误
- caffemodel转matlab格式
- 一分钟教你如何使用WebView
- 8583报文工具
- CSerialPort 接收时丢失数据问题
- iOS中取数组内最大值最小值,下标,总和,平均值
- sdf
- Qt之操作数据库(SQLite)实例
- 整型转字符串固定长度,高位自动补0
- 【分享】常用音乐软件的选择
- HD--2066 一个人的旅行
- Codeforces Round #365 (Div. 2)
- Ubuntu防火墙设置