BAT32G137国产项目通用第五节:FreeRTOS 互斥量

主题:互斥量的使用比较单一,因为它是信号量的一种,并且它是以锁的形式存在。在初始 化的时候,互斥量处于开锁的状态,而被任务持有的时候则立刻转为闭锁的状态。互斥量

更适合于:

1.可能会引起优先级翻转的情况。 递归互斥量更适用于。

2.任务可能会多次获取互斥量的情况下。这样可以避免同一任务多次递归持有而造
成死锁的问题。
3.多任务环境下往往存在多个任务竞争同一临界资源的应用场景,互斥量可被用于对临
界资源的保护从而实现独占式访问。另外,互斥量可以降低信号量存在的优先级翻转问题
带来的影响。
比如有两个任务需要对串口进行发送数据,其硬件资源只有一个,那么两个任务肯定
不能同时发送啦,不然导致数据错误,那么,就可以用互斥量对串口资源进行保护,当一
个任务正在使用串口的时候,另一个任务则无法使用串口,等到任务使用串口完毕之后,
另外一个任务才能获得串口的使用权。
另外需要注意的是 互斥量不能在中断服务函数中使用,因为其特有的优先级继承机制
只在任务起作用,在中断的上下文环境毫无意义。
互斥量例子如下:

static TaskHandle_t AppTaskCreate_Handle = NULL;/* 创建任务句柄 */
static TaskHandle_t LowPriority_Task_Handle = NULL;/* LowPriority_Task任务句柄 */
static TaskHandle_t MidPriority_Task_Handle = NULL;/* MidPriority_Task任务句柄 */
static TaskHandle_t HighPriority_Task_Handle = NULL;/* HighPriority_Task任务句柄 */
SemaphoreHandle_t MuxSem_Handle

你可能感兴趣的:(FreeRTOS,单片机,c语言,stm32)