11.STM32freeRTOS---互斥信号量 【补充】

文章目录

  • 前言
    • **不能用于中断服务函数**,
  • 一、创建互斥信号量
  • 二、获取 与 获取 互斥信号量
  • 三、实验
  • 总结


前言

互斥信号量就是为了解决二值信号量的优先级反转的问题。
所以,我先简单的说一说互斥信号量的情况。

假设有两个任务,任务1和任务2,任务1的优先级是1,任务2 的优先级是2。者两个任务都会操作同一个互斥信号量Mutex,低优先级任务先获取了互斥信号量,此时高优先级任务也要获取互斥信号量,但是发现低优先级任务正在占用互斥信号量,**于是高优先级任务会将低优先级任务的优先级拉高到和自己一样高,**然后等待拉高后的低优先级任务释放互斥信号量,并且去获取。

简而言之,互斥信号量主要就是把占用着互斥信号量的低优先级任务的任务优先级拉高!!!

注意:互斥信号量具有优先级继承的机制,所以只能运用在任务中,

不能用于中断服务函数

原因是:中断服务函数不能因为要等待互斥信号量设置阻塞时间进入阻塞态。


一、创建互斥信号量

11.STM32freeRTOS---互斥信号量 【补充】_第1张图片

二、获取 与 获取 互斥信号量

与释放二值信号量和计数型信号量的函数相同:xSemaphoreGive()

与获取二值信号量和计数型信号量的函数相同:xSemaphoreTake()

三、实验

本实验在二值信号量的优先级反转的基础上完成,只需要将二值信号量更改为互斥信号量,其他部分完全一致。


总结

互斥信号量 ,缓解二值信号量的优先级反转。

你可能感兴趣的:(32freeRTOS,stm32)