作为一名嵌入式linux的初学者,一直搞不明白linux应用程序的运行机制,举个例子:
例如我需要设计一个应用程序,实现实时的读取三个串口的数据、实时读取一个网口的数据,以及定时向外发送数据,和定时对数据进行存储。按照以前单片机的思路,肯定是一个while(1)里轮询或中断去解决以上需求就可以了;而在linux应用里,难道也是用while?我知道在linux里应该是不同于单片机的,只是一直对需不需要while循环比较疑惑,因为如果需要实现以上实时数据处理与串口网口的数据,采用while循环,即使是开几路线程,只要是采用了while,势必会让cpu负荷很大。(初学者愚昧之见)。所以我想请教的是,针对我以上的举例需求,嵌入式linux的一个应用程序设计是不是需要用到while循环?如果不是又怎么实现各需求的实时性工作,如果是,则怎么避免linux的cpu高负荷工作。谢谢。
例如我需要设计一个应用程序,实现实时的读取三个串口的数据、实时读取一个网口的数据,以及定时向外发送数据,和定时对数据进行存储。按照以前单片机的思路,肯定是一个while(1)里轮询或中断去解决以上需求就可以了;而在linux应用里,难道也是用while?我知道在linux里应该是不同于单片机的,只是一直对需不需要while循环比较疑惑,因为如果需要实现以上实时数据处理与串口网口的数据,采用while循环,即使是开几路线程,只要是采用了while,势必会让cpu负荷很大。(初学者愚昧之见)。所以我想请教的是,针对我以上的举例需求,嵌入式linux的一个应用程序设计是不是需要用到while循环?如果不是又怎么实现各需求的实时性工作,如果是,则怎么避免linux的cpu高负荷工作。谢谢。
FIFO,socket通信,你可以用while不断循环检测。
或者可以用信号量,这样接收端做终端FUNC就可以了,没有必要一直监控,信号量我理解是,进程1--->内核----->进程2。
其实简单的读取使用阻塞之类的可以实现,while(1)在linux下也常用,这没啥吧。
实时的读取三个串口的数据、实时读取一个网口的数据:Linux系统下每个硬件就是一个文件,这个时候可以开一个线程加上IO复用(select,epoll)便可以实现,无需使用while循环轮询。