当前位置: 技术问答>linux和unix
串口通讯问题
来源: 互联网 发布时间:2016-04-26
本文导语: 为何我从串口读取数据时连续读了两次,一次是正确完整的,紧接着却又去读了一次,读到字节数为0?程序如下: while(1) { timeout.tv_sec = 0; timeout.tv_usec = 100*1000; /* 100ms */ FD_ZERO (&fds); /*每次循环都...
为何我从串口读取数据时连续读了两次,一次是正确完整的,紧接着却又去读了一次,读到字节数为0?程序如下:
while(1)
{
timeout.tv_sec = 0;
timeout.tv_usec = 100*1000; /* 100ms */
FD_ZERO (&fds); /*每次循环都要清空集合,否则不能检测描述符变化*/
if(fp != -1)
{
FD_SET (fp, &fds); /*添加描述符 */
}
select (fp+1, &fds, NULL, NULL, &timeout);
memset(pbuff,'0',5); /*清零字符操作*/
nread = read(fp, pbuff, RECV_MAX);
printf("nread: %dn",nread);
if(nread >0)
{数据处理;break;}
else
{数据处理}
}
。。。。。。
我只要求它读到正确数据就(break)退出不再读了啊。。可是它却又去读了一次。。。请教各位。。。谢谢。。。
while(1)
{
timeout.tv_sec = 0;
timeout.tv_usec = 100*1000; /* 100ms */
FD_ZERO (&fds); /*每次循环都要清空集合,否则不能检测描述符变化*/
if(fp != -1)
{
FD_SET (fp, &fds); /*添加描述符 */
}
select (fp+1, &fds, NULL, NULL, &timeout);
memset(pbuff,'0',5); /*清零字符操作*/
nread = read(fp, pbuff, RECV_MAX);
printf("nread: %dn",nread);
if(nread >0)
{数据处理;break;}
else
{数据处理}
}
。。。。。。
我只要求它读到正确数据就(break)退出不再读了啊。。可是它却又去读了一次。。。请教各位。。。谢谢。。。
|
printf("nread: %dn",nread);
if(nread >0)
{数据处理;break;}
按照你所说的,第一次读到了,那么nread应该是>0的,自然该break了。
我也感到很奇怪呢。 你可否把log贴出来。
或者自己用gdb跟踪一下?
if(nread >0)
{数据处理;break;}
按照你所说的,第一次读到了,那么nread应该是>0的,自然该break了。
我也感到很奇怪呢。 你可否把log贴出来。
或者自己用gdb跟踪一下?
|
是不是你根本就没读到数据?
一般的select都这样些
if(select (fp+1, &fds, NULL, NULL, &timeout)
一般的select都这样些
if(select (fp+1, &fds, NULL, NULL, &timeout)