作为一名嵌入式linux的初学者,一直搞不明白linux应用程序的运行机制,举个例子:
例如我需要设计一个应用程序,实现实时的读取三个串口的数据、实时读取一个网口的数据,以及定时向外发送数据,和定时对数据进行存储。按照以前单片机的思路,肯定是一个while(1)里轮询或中断去解决以上需求就可以了;而在linux应用里,难道也是用while?我知道在linux里应该是不同于单片机的,只是一直对需不需要while循环比较疑惑,因为如果需要实现以上实时数据处理与串口网口的数据,采用while循环,即使是开几路线程,只要是采用了while,势必会让cpu负荷很大。(初学者愚昧之见)。所以我想请教的是,针对我以上的举例需求,嵌入式linux的一个应用程序设计是不是需要用到while循环?如果不是又怎么实现各需求的实时性工作,如果是,则怎么避免linux的cpu高负荷工作。谢谢。

解决方案 »

  1.   

    我不是开发嵌入式的,不过操作系统这方面的原理可以跟你说下,读取数据这方面,并不需要经过cpu,cpu只负责发送控制信号给相应的硬件即可,比如说管道之类,然后读取完毕之后硬件发送信号给cpu触发中断。
      

  2.   

    串口、网口都有中断处理机制,如果驱动程序没问题的话,使用中断或者轮询都可以处理,并不像你想象的那样占用cpu资源
      

  3.   

    我也是菜鸟,抛砖引玉
    FIFO,socket通信,你可以用while不断循环检测。
    或者可以用信号量,这样接收端做终端FUNC就可以了,没有必要一直监控,信号量我理解是,进程1--->内核----->进程2。
      

  4.   

    既然在linux下可以看下是不是能够使用select,epoll这些进行监测
      

  5.   

    这是个好方法。
    其实简单的读取使用阻塞之类的可以实现,while(1)在linux下也常用,这没啥吧。
      

  6.   

    定时向外发送数据,和定时对数据进行存储:使用定时器,定时时间到便会调用你的处理函数。
    实时的读取三个串口的数据、实时读取一个网口的数据:Linux系统下每个硬件就是一个文件,这个时候可以开一个线程加上IO复用(select,epoll)便可以实现,无需使用while循环轮询。