首页 > 代码库 > Freertos-事件标志组,消息队列,信号量,二值信号量,互斥信号量
Freertos-事件标志组,消息队列,信号量,二值信号量,互斥信号量
任务间的通信和同步机制
在裸机编程时,使用全局变量的确比较方便,但是在加上 RTOS 后就是另一种情况了。 使用全局变量相比事件标志组主要有如下三个问题:
1、使用事件标志组可以让 RTOS 内核有效地管理任务,而全局变量是无法做到的,任务的超时等机制需
要用户自己去实现。
2、使用了全局变量就要防止多任务的访问冲突,而使用事件标志组则处理好了这个问题,用户无需担心。
3、使用事件标志组可以有效地解决中断服务程序和任务之间的同步问题。
事件标志组:事件标志组是实现多任务同步的有效机制之一。 每创建一个事件标志组,用户可以使用的事件标志是
24 个。
消息队列:重要的通信机制 。个或者多个任务可以通过 RTOS 内核服务从队列中得到消息。通常,先进入消息队列的消息先传
给任务,也就是说,任务先得到的是最先进入到消息队列的消息,即先进先出的原则(FIFO),FreeRTOS
的消息队列支持 FIFO 和 LIFO 两种数据存取方式。
信号量:计数信号量 + 二值信号量
计数信号量:任务间的同步和资源共享机制 。
平时使用信号量主要实现以下两个功能:
1、两个任务之间或者中断函数跟任务之间的同步功能,这个和前面章节讲解的事件标志组是类似的。其实就是共享资源为 1 的时候。
2、多个共享资源的管理,就像机房上机的例子 。(多个资源可以被多个任务访问的情况,是什么情况呢?)
二值信号量:当共享资源为一个时,和多值信号量一样,和事件标志组类似,只是它最多有24的标志(相当于创建24个二值信号量)。
互斥信号量:,通二值信号量类似,但是它有优先级继承(Priority inheritance)的功能,这样就有效地防止出现优先级翻转的问题 。
Freertos-事件标志组,消息队列,信号量,二值信号量,互斥信号量