优先级反转在RTOS中常见于任务间互斥锁竞争,但隐蔽场景是互斥锁与中断服务例程(ISR)嵌套。当ISR中尝试获取一个已被低优先级任务持有的互斥锁时,若该锁由高优先级任务等待,系统可能死锁:ISR无法阻塞,若锁未释放,ISR会自旋或返回错误,但若ISR内调用阻塞API(如某些RTOS的`OSMutexPend`在ISR中非法),会触发断言或挂起。排查方法:1) 使用静态分析工具检查所有ISR代码,确保不调用任何可能阻塞的API;2) 在互斥锁获取处添加超时或返回错误码,并在ISR中处理失败分支;3) 启用RTOS的优先级继承或优先级天花板协议,但注意ISR中仍应避免持锁;4) 利用trace工具(如SystemView)记录锁获取/释放时序,定位死锁点。实操建议:设计时强制规则——ISR内只使用无阻塞同步(如信号量give),互斥锁仅用于任务上下文。若必须共享资源,改用关中断或自旋锁(短临界区)。
mcuku 阿沐 · 2026-08-27