关于应用程序运行机制的疑惑

DwyaneCV 2018-04-14 09:27:07
作为一名嵌入式linux的初学者,一直搞不明白linux应用程序的运行机制,举个例子:
例如我需要设计一个应用程序,实现实时的读取三个串口的数据、实时读取一个网口的数据,以及定时向外发送数据,和定时对数据进行存储。

按照以前单片机的思路,肯定是一个while(1)里轮询或中断去解决以上需求就可以了;而在linux应用里,难道也是用while?我知道在linux里应该是不同于单片机的,只是一直对需不需要while循环比较疑惑,因为如果需要实现以上实时数据处理与串口网口的数据,采用while循环,即使是开几路线程,只要是采用了while,势必会让cpu负荷很大。(初学者愚昧之见)。

所以我想请教的是,针对我以上的举例需求,嵌入式linux的一个应用程序设计是不是需要用到while循环?如果不是又怎么实现各需求的实时性工作,如果是,则怎么避免linux的cpu高负荷工作。谢谢。
...全文
1589 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-06-21
  • 打赏
  • 举报
回复
定时向外发送数据,和定时对数据进行存储:使用定时器,定时时间到便会调用你的处理函数。
实时的读取三个串口的数据、实时读取一个网口的数据:Linux系统下每个硬件就是一个文件,这个时候可以开一个线程加上IO复用(select,epoll)便可以实现,无需使用while循环轮询。
jintiann 2018-06-14
  • 打赏
  • 举报
回复
引用 4 楼 dark9527 的回复:
既然在linux下可以看下是不是能够使用select,epoll这些进行监测
这是个好方法。 其实简单的读取使用阻塞之类的可以实现,while(1)在linux下也常用,这没啥吧。
dark9527 2018-05-19
  • 打赏
  • 举报
回复
既然在linux下可以看下是不是能够使用select,epoll这些进行监测
_xixihaha_ 2018-05-18
  • 打赏
  • 举报
回复
我也是菜鸟,抛砖引玉 FIFO,socket通信,你可以用while不断循环检测。 或者可以用信号量,这样接收端做终端FUNC就可以了,没有必要一直监控,信号量我理解是,进程1--->内核----->进程2。
numericaaa 2018-04-16
  • 打赏
  • 举报
回复
我不是开发嵌入式的,不过操作系统这方面的原理可以跟你说下,读取数据这方面,并不需要经过cpu,cpu只负责发送控制信号给相应的硬件即可,比如说管道之类,然后读取完毕之后硬件发送信号给cpu触发中断。
ckc 2018-04-16
  • 打赏
  • 举报
回复
串口、网口都有中断处理机制,如果驱动程序没问题的话,使用中断或者轮询都可以处理,并不像你想象的那样占用cpu资源

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧