请教如何快速判断串口的缓冲区内是否有数据存在?

如题。我的系统中有很多串口,我需要轮流从各串口中读取和发送数据。

即使是使用readcond()函数,如果串口的缓冲区当时没有数据,那么程序最快也要100ms才能返回。

请问有没有办法快速判断串口的缓冲区内是否有数据,如果没有数据,我就干脆不去读这个串口,转向下一个串口。这样可以节省很多时间。

如果串口受到数据后,能值位一个标志就好了。

最好不要让我去接管串口的中断,那样太麻烦,另外我是新手,恐怕也做不好。

先谢谢了!

另外我对QNX 的任务调度还是不太明白。比如我用readcond()试图从某外设读取数据。如果这时接口上没有数据,那么当前线程进入等待状态,在timeout规定的时间到达后返回。

请问在此线程等待的时候,其他处于ready状态的线程能否进入cpu执行?如果答案是肯定的,那么我的问题好像也就不存在了。因为cpu可以安排其他线程继续收发数据的工作。我只要启动多个线程处理不同的串口,好像就可以达到较高的效率。

请了解情况的兄弟多指教。谢谢。

如果你用单线程的话,那么标准的Unix的做法是用 select()看哪个串口(fd)可读,然后去读那个串口。

如果你用多线程的话,那么readcond()会被阻塞,在readcond()被阻塞期间,别的线程当然可以抢占CPU。另外,readcond()也不一定要有timeout的,可以永远阻塞,直到一个Frame到达为止。这,应该是你最省时省力的做法。

谢谢xtang! 这么快就回复了,比qnx的技术支持还要快啊。

我再去看看select()函数。

我原来的打算是多线程,看来我把任务调度想复杂了。我需要再好好想想。再次感谢!