|
[Original]
[Print]
[Top]
|
我用select监控串口是否有数据送过来,但是函数一直返回超时,而实际上串口一直有数据送来,且在timeout范围内,打开程序框架为:
while(1)
{
len=select(serialfd,&fread,NULL,NULL,&tv);
if(len>0)
{
read();
//修改串口属性
}
}
其中去掉修改串口属性段代码,一切均正常,加上后读到一次我想要的数据后就超时了,我这里是与单片机通信,涉及到串口第九位,所以要修改串口属性,恳盼大虾指点
|
|
|
----
come on!
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
试试这个。
while (1) {
FD_ZERO(&fread);
FD_SET(&fread, serialfd);
len=select(serialfd + 1,&fread,NULL,NULL,&tv);
if ...
}
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
谢谢!
我就是这样子写的,我是主进程收数据,另开一个线程(pthread)发数据,二者都用到了select,其中主进程定时1秒,发数据定时1毫秒,很奇怪,去掉发数据的定时器,一切正常!加上后,好象发数据线程被阻塞掉一样!
继续感谢大虾支持!
|
|
|
----
come on!
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
select 的返回值是什么, 定时器信号会中段select, 在select返回的时候判断, if ret < 0 continue 试试
|
|
----
好好学习!
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
发数据进程中的select返回为超时,没有错误发生,在这里我使用它定时1ms,select(1,NULL,NULL,NULL,&tv); tv设置1毫秒;收数据进程select(serialfd+1,&freads,NULL,NULL,&timer),timer为1秒,很奇怪的是程序跑一段时间后发现,内核没有调度发数据线程(在入口处,我设置了printf, 但是没有任何打印信息!),很奇怪!请大虾继续指导一下,不胜感谢
|
|
|
[Original]
[Print]
[Top]
|
|