如题。我的系统中有很多串口,我需要轮流从各串口中读取和发送数据。
即使是使用readcond()函数,如果串口的缓冲区当时没有数据,那么程序最快也要100ms才能返回。
请问有没有办法快速判断串口的缓冲区内是否有数据,如果没有数据,我就干脆不去读这个串口,转向下一个串口。这样可以节省很多时间。
如果串口受到数据后,能值位一个标志就好了。
最好不要让我去接管串口的中断,那样太麻烦,另外我是新手,恐怕也做不好。
先谢谢了!
如题。我的系统中有很多串口,我需要轮流从各串口中读取和发送数据。
即使是使用readcond()函数,如果串口的缓冲区当时没有数据,那么程序最快也要100ms才能返回。
请问有没有办法快速判断串口的缓冲区内是否有数据,如果没有数据,我就干脆不去读这个串口,转向下一个串口。这样可以节省很多时间。
如果串口受到数据后,能值位一个标志就好了。
最好不要让我去接管串口的中断,那样太麻烦,另外我是新手,恐怕也做不好。
先谢谢了!
另外我对QNX 的任务调度还是不太明白。比如我用readcond()试图从某外设读取数据。如果这时接口上没有数据,那么当前线程进入等待状态,在timeout规定的时间到达后返回。
请问在此线程等待的时候,其他处于ready状态的线程能否进入cpu执行?如果答案是肯定的,那么我的问题好像也就不存在了。因为cpu可以安排其他线程继续收发数据的工作。我只要启动多个线程处理不同的串口,好像就可以达到较高的效率。
请了解情况的兄弟多指教。谢谢。
如果你用单线程的话,那么标准的Unix的做法是用 select()看哪个串口(fd)可读,然后去读那个串口。
如果你用多线程的话,那么readcond()会被阻塞,在readcond()被阻塞期间,别的线程当然可以抢占CPU。另外,readcond()也不一定要有timeout的,可以永远阻塞,直到一个Frame到达为止。这,应该是你最省时省力的做法。
谢谢xtang! 这么快就回复了,比qnx的技术支持还要快啊。
我再去看看select()函数。
我原来的打算是多线程,看来我把任务调度想复杂了。我需要再好好想想。再次感谢!