设备和PC串口通讯,为什么pc接受一个数据包,会分两次接收

[复制链接]
3788|4
 楼主| wyde518 发表于 2009-2-5 14:00 | 显示全部楼层 |阅读模式
用串口监控软件监控的,比如一个数据包,共10个字节,可能第一次收到7个,第二次收到3个。<br />换一台电脑就可能没有这种现象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
computer00 发表于 2009-2-5 14:20 | 显示全部楼层

这是驱动程序干的。对于这样的设备,你无法预知一次接收

所以你的程序中需要判断接收了多少数据,而不能实现假设。
dragon_hn 发表于 2009-2-7 05:38 | 显示全部楼层

是应用程序干的吧?

是应用程序干的吧?<br /><br />串口监控软件只是一个过滤驱动程序,只有在上层应用程序读数据的时候串口监控软件才会显示接收到的数据.如果上层软件不读取数据,串口监控软件应该是不会显示PC接收到的数据的.<br /><br />而应用程序串口Read()函数有同步和异步之分.对异步来说,应用程序要求马上返回.因为应用程序第一次读的时候只返回了7个字节,而第二次读的时候则返回了剩余的3个字节.<br /><br />楼主的现象对同一台电脑也可能出现也可能不出现,不固定,应该自己在应用程序中处理.
 楼主| wyde518 发表于 2009-2-11 09:03 | 显示全部楼层

回复3楼

可以确定是应用程序干的,监控程序是不会干的,我曾经试过不同的串口通讯程序会造成不同的接收数据效果。我想知道的是会不会与不同的计算机有关。<br />因为同样的应用程序,不同的计算机表现的接收数据也不一样。
dragon_hn 发表于 2009-2-12 02:52 | 显示全部楼层

应该跟计算机有点轻微的关系

对串口做两次Read()操作,不同主频的CPU间隔不一样,同一台计算机因进程和线程的切换,不同时刻也可能不一样.<br /><br />VC下一般的做法如下:<br /><br />BYTE&nbsp;sBuff[2048];<br />int&nbsp;&nbsp;nPos=0;<br />int&nbsp;&nbsp;nRead;<br /><br />while(nPos&lt10)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;m_ComPort.Read(&sBuff[nPos],2048-nPos,&nRead);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(nRead&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nPos+=nRead;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />然后处理数据.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

230

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部