问题一:除了二值信号量和计数信号量,还有哪些情况可能引发优先级翻转?
- 用户自定义的同步机制:如果开发者自行实现锁或资源管理机制(如基于任务标志或全局变量的同步),且未实现优先级继承或优先级天花板机制,可能导致优先级翻转。
- 未正确使用互斥量:虽然 FreeRTOS 的互斥量(Mutex)默认支持优先级继承,但若错误地使用其他同步对象(如二值信号量)替代互斥量来保护共享资源,仍可能引发优先级翻转。
- 递归互斥量的嵌套使用:如果高优先级任务在递归获取互斥量时被低优先级任务间接阻塞,而中优先级任务抢占,也可能导致翻转(需结合具体场景)。
- 共享硬件资源访问:如直接操作外设(GPIO、SPI 等)时未正确同步,低优先级任务占用资源后被中优先级任务抢占,导致高优先级任务阻塞。
问题二:优先级翻转的简单示例
场景描述
- 任务 H:最高优先级,需访问共享资源(如传感器数据)。
- 任务 M:中优先级,不访问共享资源,但会执行长时间计算。
- 任务 L:最低优先级,访问共享资源(如通过信号量保护)。
时序流程
- 任务 L 获取信号量,开始操作共享资源。
- 任务 H 就绪,尝试获取信号量,但被阻塞(因信号量已被 L 持有)。
- 任务 M 就绪,抢占 L 的执行(因 M 优先级高于 L)。
- 任务 L 因被 M 抢占,无法释放信号量。

最低0.47元/天 解锁文章
714

被折叠的 条评论
为什么被折叠?



