请教各位关于串口接收的问题

luckysky 2006-02-22 11:33:12
现在有一个终端,实时的往计算机的串口上发送数据包,我在程序里设了个定时器去读取串口的数据。定时器里的代码如下:
char szReadBuff[SIZE];
int nReadSize =0;
do
{
nSize = ReadCommBuff(buff, SIZE);
if (nSize>0)
{
if ((nReadSize+nSize) > SIZE)
break;

memcpy(szReadBuff+nReadSize, buff, nSize);
nReadSize += nSize;
}
Sleep(50);
}while(nSize>0);
现在我的问题是:这段代码会不会造成死循环??因为我觉得终端是实时的往串口里写数据的,这样就会造成串口里一直有数据存在(不知我的理解是否正确)。还有终端发送的数据都是一个包一个包发送的,会不会出现一个包经过两次才发送到串口上啊??
...全文
127 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
BombZhang 2006-02-23
  • 打赏
  • 举报
回复
char szReadBuff[SIZE];
int nReadSize =0;
do
{
nSize = ReadCommBuff(buff, SIZE);
if (nSize>0)
{
if ((nReadSize+nSize) > SIZE)
{
memcpy(szReadBuff+nReadSize, buff, SIZE-nReadSize);
break;
}

memcpy(szReadBuff+nReadSize, buff, nSize);
nReadSize += nSize;
}
Sleep(50);
}while(nSize>0);

这样缓冲区填满后才退出循环。
上面的程序还有个问题就是如果有一次没读到内容循环也就退出了
luckysky 2006-02-22
  • 打赏
  • 举报
回复
第一次写串口通讯,不太明白。请指点指点啊。
我的想法是如果这次读到的数据长度等于0或者已经读取的长度大于我开个缓冲长度,就退出,然后进行报文的处理。我也不太清楚这样的流程是否正确
Jarrylogin 2006-02-22
  • 打赏
  • 举报
回复
你的写法太别流了,if ((nReadSize+nSize) > SIZE)
break;保证可以跳出循环,条件满足否?

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧