RTOS的常见功能介绍(信号量、互斥锁、自旋锁、事件、邮箱、消息队列 、工作队列)
1. RTOS的常见功能
- 信号量
- 互斥锁
- 自旋锁
- 事件
- 邮箱
- 消息队列
- 工作队列
2. 将这些功能划分成两类
可以简单划分一下上面这些功能的使用场合,我们分成两类,第一类是以访问控制为主,第二类是以消息的传递为主。
第一类是信号量、互斥锁、自旋锁、事件。第二类就是消息队列、工作队列、邮箱。
3. 功能介绍
以访问控制为主的RTOS功能的作用一般是进行资源的管理和任务的同步。
资源管理就像你的开发板只有一个小灯,有一个任务想控制小灯灭,但是另一个任务想控制小灯亮,两个任务同时执行,那么小灯到底是亮还是灭呢?这是自相矛盾的。
任务的同步就像一个任务是用来初始化LED,另一个任务是使LED亮起来,那么两个任务同时执行,如果初始化LED的任务没有执行,那另外一个任务就不能使LED亮起来。对于上述两种情况,我们就要用到RTOS的一些功能进行访问控制或者任务同步,这样不同任务间才能“协调办事”。
3.1 信号量:
这是个简单高效的RTOS功能,大致的原理你可以理解为用一个变量进行访问控制,变量为负数,就是该资源不可用/任务未完成,变量为正就是资源可用/其它任务可继续进行。
3.2 互斥信号量:
相当于加入优先级调整的信号量,获取到信号量的任务的优先级可以被提高。
3.3 自旋锁:
主要解决处理器是多内核的情况,可以大概认为是信号量的加强版,但效率没有信号量这么高。
3.4 事件:
这个常用在多任务的同步,信号量一般是单个任务与单个任务同步,事件简单点理解就是多信号量,有一个任务同意我运行还不行,还得等待另一个任务的同意。
以消息传递为主的RTOS功能
以消息传递为主的RTOS功能,最重要的当然是任务间的通讯问题,例如有一个任务控制着LCD显示温度、湿度、大气压等信息,而第二个任务就是采集温度、湿度和大气压的信息,那么第二个任务就要发消息告诉第一个任务自己获得的消息(他们之间其实也有着访问控制功能,不然第一个任务就不知道自己显示什么了,此处我们认为它的功能是以传递消息为主)。
3.5 消息队列:
大致可以理解成将消息组成队列,然后发送,这种方式较简单高效。
3.6 邮箱:
简单理解就是消息队列的简化版,发送的消息一般是定长的,简化的目的就是让效率再高一点。
3.7 工作队列:
这个很特殊,严格来讲,它是发消息给系统,让系统延时或者不延时执行某个函数。
总结一下,如果我们做一个项目,任务间要传递消息,那么该选择哪一个RTOS功能比较好?那也是得看应用场合。通常先考虑邮箱,因为它最高效嘛,但是如果要发送的消息太长,那就选择消息队列。如果要通知系统执行某些任务,那就先考虑工作队列了。
4. 图示表示 两大类的关系和联系