求助:linux下对串口的访问 点击:1392 | 回复:3



progman

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年1月15日
发表于:2004-01-17 09:46:00
楼主
我使用read读串口时,首先判断返回值是否小于0,不是则处理数据,是则继续循环判断,直到接收个数达到一定数目或接收时间超时退出循环。可是程序开始运行正常,运行一段时间后出现返回值始终小于0的故障,造成程序死循环,这是怎么回事啊? 程序段如下: while(...)//判断是否接受超时,时间由定时信号处理程序处理 { if(select(...)!=0)//非阻塞判断数据是否有效 { if(FD_ISSET(...))//是否是否是指定串口数据 { if(read(fd[2],&ch,1)>0)//问题出在这里 { buf[i++]=ch; } } } if(i==20) break;//个数已达到,退出循环 }



独孤西狂

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 199回
  • 年度积分:0
  • 历史总积分:372
  • 注册:2002年11月09日
发表于:2004-11-19 13:56:00
1楼
您把if(i==20) break;//改成if(i>20) break;看行不行。

ccbq

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 558回
  • 年度积分:0
  • 历史总积分:581
  • 注册:2003年9月26日
发表于:2004-11-24 15:08:00
2楼
您问题找的很准啊!把i++提到if的上面去,先自加再做返回值判断就可以了。

mcujob

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 27回
  • 年度积分:0
  • 历史总积分:42
  • 注册:2008年4月01日
发表于:2008-04-30 15:57:48
3楼

厉害。。。。。。。。


热门招聘
相关主题

官方公众号

智造工程师