FreeRTOS学习记录-互斥信号量
目录
一.简介
优先级继承:
当一个互斥信号量正在被一个低优先级的任务使用时,此时有个高优先级的任务获取这个互斥信号量会被阻塞,不过这个高优先级的任务会将低优先级的任务提升到和自己相同优先级,这就是优先级继承。
互斥信号量:
互斥信号量就是具有优先级继承的二值信号量,只能用于任务中,不能用于中断服务函数中,因为中断服务函数不饿能进入阻塞态。
作用
能有效抑制优先级翻转现象的产生。
作用于需要互斥访问的资源。
二.API
动态创建
xSemaphoreCreateMutex():
描述: 用于通过动态内存创建互斥信号量,这个函数是个宏
参数:无
返回值:
NULL:创建失败
其他值:创建的互斥信号量句柄
静态创建
![]()
描述:用于静态内存分配进行互斥信号量的创建,这个函数是个宏
NULL:创建失败
其他值:创建的互斥信号量句柄
释放互斥信号量

获取互斥信号量

释放和获取和二值信号量是同一个API,具体描述参考二值信号量https://blog.csdn.net/qq_45631231/article/details/150873197?spm=1001.2014.3001.5501
三.代码实现
定义:

创建:

任务函数:
和优先级翻转任务一样,只是二值信号量改为了互斥信号量,具体参见优先级翻转https://blog.csdn.net/qq_45631231/article/details/151933775?spm=1001.2014.3001.5502
四.实验结果

可以看到高优先级正在请求互斥信号量,低优先级任务正在使用互斥信号量, 此时中优先级不会运行,低优先级的任务此时被提高到了和高优先级用一个优先级,比中优先级高,有效抑制了优先级翻转的问题。
可与优先级翻转的结果对照着看:
https://blog.csdn.net/qq_45631231/article/details/151933775?spm=1001.2014.3001.5501
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)