打印

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

[复制链接]
2743|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyde518|  楼主 | 2009-2-5 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
computer00| | 2009-2-5 14:20 | 只看该作者

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

所以你的程序中需要判断接收了多少数据,而不能实现假设。

使用特权

评论回复
板凳
dragon_hn| | 2009-2-7 05:38 | 只看该作者

是应用程序干的吧?

是应用程序干的吧?

串口监控软件只是一个过滤驱动程序,只有在上层应用程序读数据的时候串口监控软件才会显示接收到的数据.如果上层软件不读取数据,串口监控软件应该是不会显示PC接收到的数据的.

而应用程序串口Read()函数有同步和异步之分.对异步来说,应用程序要求马上返回.因为应用程序第一次读的时候只返回了7个字节,而第二次读的时候则返回了剩余的3个字节.

楼主的现象对同一台电脑也可能出现也可能不出现,不固定,应该自己在应用程序中处理.

使用特权

评论回复
地板
wyde518|  楼主 | 2009-2-11 09:03 | 只看该作者

回复3楼

可以确定是应用程序干的,监控程序是不会干的,我曾经试过不同的串口通讯程序会造成不同的接收数据效果。我想知道的是会不会与不同的计算机有关。
因为同样的应用程序,不同的计算机表现的接收数据也不一样。

使用特权

评论回复
5
dragon_hn| | 2009-2-12 02:52 | 只看该作者

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

对串口做两次Read()操作,不同主频的CPU间隔不一样,同一台计算机因进程和线程的切换,不同时刻也可能不一样.

VC下一般的做法如下:

BYTE sBuff[2048];
int  nPos=0;
int  nRead;

while(nPos<10)
{
    m_ComPort.Read(&sBuff[nPos],2048-nPos,&nRead);
    if(nRead>0)
    {
        nPos+=nRead;
    }
}
然后处理数据.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

165

帖子

2

粉丝