OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6840|回复: 6

初学者如何选择RTOS功能?

[复制链接]

1117

主题

1128

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4666
金钱
4666
注册时间
2019-5-8
在线时间
1224 小时
发表于 2021-7-16 10:17:05 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2021-11-1 10:41 编辑

以下文章摘自微信公众号——开源电子网《初学者如何选择RTOS功能?》
更多技术文章,请扫下方二维码关注

开源电子网,扫码2222222.png


RTOS可以说是现在学习嵌入式必修的一门科目,由于它占用资源小、支持多任务等特点,常被用于工业控制、智能家居中。但当初学者学习完一种RTOS(例如UCOS,Free-RTOS,RT-Thread)后,会发现RTOS支持的功能十分多,有信号量、邮箱、事件、消息队列…,在实际的应用中,也会有这种困惑—那就是我该选取哪种RTOS功能在我的项目中?那么本文就带你梳理一下RTOS常见的功能,以及在实际应用中,该如何选取RTOS的功能。  文章针对初学者而写,文本的语言都采用通俗易懂的方式,如有高手路过,可以继续赶路。



先看一下RTOS的常见功能都有哪些?下面列举了一下RTOS常见功能。

① 信号量
② 互斥锁
③ 自旋锁
④ 消息队列
⑤ 工作队列
⑥ 事件
⑦ 邮箱

  看到上面这么多种功能,初学者可能就会比较蒙的,其实我们可以简单划分一下上面这些功能的使用场合,我们分成两类,第一类是以访问控制为主,第二类是以消息的传递为主。(有些RTOS功能可能具有上述两类的特征,那我们就按照常见的使用场合划分它)那么第一类就是信号量、互斥锁、自旋锁、事件。第二类就是消息队列、工作队列、邮箱。

1.png

  首先来个简单的图示,说明一下这两类的关系和联系(不准确的描述,针对初学者)。

2.jpg

3.jpg

  这样一梳理起来想必你就没那么乱了,那么下面我们再具体分析一下各种类之间的区别和如何选用RTOS功能。


01 以访问控制为主的RTOS功能之间的区别

  以访问控制为主的RTOS功能的作用一般是进行资源的管理和任务的同步。简单来理解一下,资源管理就像你的开发板只有一块LCD屏幕,有一个任务想控制LCD显示全黑,但是另一个任务想控制LCD显示全白,两个任务同时执行,那么LCD到底是显示黑色还是白色啊?这是自相矛盾的。

  而任务的同步就像一个任务是用来初始化LED,另一个任务是使LED亮起来,那么两个任务同时执行,如果初始化LED的任务没有执行,那另外一个任务就不能使LED亮起来。对于上述两种情况,我们就要用到RTOS的一些功能进行访问控制或者任务同步,这样不同任务间才能“协调办事”。
 
1,       先看一下信号量,这是个简单高效的RTOS功能,大致的原理你可以理解为用一个变量进行访问控制,变量为负数,就是该资源不可用/任务未完成,变量为正就是资源可用/其它任务可继续进
            行。
 
2,       互斥信号量,相当于加入优先级调整的信号量,获取到信号量的任务的优先级可以被提高。

3,       自旋锁,主要解决处理器是多内核的情况,可以大概认为是信号量的加强版,但效率没有信号量这么高。
 
4,       事件,这个常用在多任务的同步,信号量一般是单个任务与单个任务同步,事件简单点理解就是多信号量,有一个任务同意我运行还不行,还得等待另一个任务的同意。

4.png

  总结一下,如果我们做一个项目,任务间要同步或者资源要管理,该选择哪一个?那得看你在什么场合使用了。如果使用的是多内核的CPU,首先考虑自旋锁。如果是单核CPU首先考虑互斥信号量(因为它带优先级调整策略)。以STM32做主控芯片为例,首先考虑互斥信号量,但是如果你并不在乎这点优先级的效率,那就考虑信号量(简单高效),如果任务的同步或者资源需求比较复杂,那就考虑一下使用事件这种功能。


02 以消息传递为主的RTOS功能之间的区别

  以消息传递为主的RTOS功能,最重要的当然是任务间的通讯问题,例如有一个任务控制着LCD显示温度、湿度、大气压等信息,而第二个任务就是采集温度、湿度和大气压的信息,那么第二个任务就要发消息告诉第一个任务自己获得的消息(他们之间其实也有着访问控制功能,不然第一个任务就不知道自己显示什么了,此处我们认为它的功能是以传递消息为主)。
 
1,       先看一下消息队列,大致可以理解成将消息组成队列,然后发送,这种方式较简单高效。

2,       邮箱,简单理解就是消息队列的简化版,发送的消息一般是定长的,简化的目的就是让效率再高一点。

3,       工作队列,这个很特殊,严格来讲,它是发消息给系统,让系统延时或者不延时执行某个函数。

5.png
  总结一下,如果我们做一个项目,任务间要传递消息,那么该选择哪一个RTOS功能比较好?那也是得看应用场合。通常先考虑邮箱,因为它最高效嘛,但是如果要发送的消息太长,那就选择消息队列。如果要通知系统执行某些任务,那就先考虑工作队列了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2021-6-29
在线时间
14 小时
发表于 2021-7-19 09:58:51 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1117
金钱
1117
注册时间
2018-5-24
在线时间
117 小时
发表于 2021-7-19 10:08:30 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

29

主题

167

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1011
金钱
1011
注册时间
2021-7-26
在线时间
184 小时
发表于 2021-7-26 14:41:55 | 显示全部楼层
赞,初学者报道

回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-8-7
在线时间
4 小时
发表于 2021-8-15 16:58:10 | 显示全部楼层
谢谢分享老板
回复 支持 反对

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2019-5-17
在线时间
273 小时
发表于 2021-9-16 11:06:29 | 显示全部楼层
良心,
回复 支持 反对

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2021-10-22 09:08:28 | 显示全部楼层
总结的不错   学习了   谢谢分享
Nothing is impossible
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表