QNX 新手,请教一下系统框架设计的问题。

我的系统以一个pc104为中心。在pc104有11个串口,都是全双工的。其中通过com1连接到上位机接受命令,另外10个串口连接下面的执行器或传感器。我要在70 毫秒的系统周期内,将上位机传来的命令处理后,分发给10个串口。同时从10个串口中取得反馈,发送回上位机。

我现在的想法是:主线程完成从上位机接收数据。处理后,用一个单独的线程完成10个串口数据的发送。向上位发送数据也用单独的线程。

可是,如何从10个串口接受数据,还不确定,是每个串口使用一个单独的线程好,还是用一个线程轮流接受?

另外,有没有什么更合理的框架适合我的应用,请有经验的兄弟多多指点,先谢谢了。

10 个串口 一个来回 不可能只有70ms 吧



不过个人觉得还是 一个串口 一个线程 比较好

如果10个线程要同步的话 弄一个 barrier

建议你将一个串口用一个进程,进程内用三个线程:一个收数据/一个发数据/主线程进行与其他进程通讯.优先级和调度方式可以根据需要进行设置.你在编程前最好定好全部的数据结构和进程之间的握手识别码,这样有利于你的开发总的进度.对于串口的测试也要考虑的多一点.

谢谢两位的回复,对我很有启发。我对QNX了解还不够透彻,原来打算每个串口用一个线程接收数据。总共用3个进程,一个从上位接收数据并处理,一个向下位发送,一个从下位接收。不过,好像用1,3 或11个进程,除了进程通信有区别外,总体区别不大。

还有些具体情况,10个串口连接的下位设备,有些是按照一定的周期(70ms)不断地向我发送数据,有些是需要我首先发送请求数据的命令,然后他们将数据准备好,再发送过来。这样的话,是不是在时序安排上更复杂一点?

还有我对全双工的串口(有些232 ,有些422)工作方式还不肯定。按照我的理解,串口有缓冲区,如果有数据进来,串口硬件会自动将数据放入缓冲区内。此时,除了一些中断时间外,串口基本上不占用cpu 时间。当我需要这些数据时,我用read函数将这些数据从缓冲区读到内存并处理,这时要占用一些cpu时间,是这样吗?

你表达不清楚你的意思啊?没看懂你的意思。关于你得要求能列得更详细吗?