优先级反转在RTOS中常见于互斥锁与信号量混用,隐蔽场景是信号量用于同步(如ISR通知任务),而互斥锁保护共享资源。当低优先级任务持有互斥锁,等待信号量;高优先级任务等待互斥锁,而中优先级任务抢占CPU,导致低优先级任务无法释放锁,形成死锁。排查方法:1) 使用静态分析工具(如Tracealyzer)记录任务状态和锁获取顺序,识别循环等待;2) 检查信号量是否在ISR中释放,若ISR优先级高于所有任务,可能绕过优先级继承,需改用互斥锁或二值信号量+优先级继承;3) 在代码中增加超时机制(如xSemaphoreTake带ticks),并记录超时时的任务栈和锁状态;4) 审查锁粒度,避免在持锁期间调用阻塞API(如信号量等待),这是最常见诱因。实操建议:优先统一使用互斥锁并启用优先级继承,信号量仅用于事件通知,且禁止在持锁时等待信号量。若必须混用,设计锁顺序并添加死锁检测钩子(如FreeRTOS的configCHECK_FOR_STACK_OVERFLOW扩展)。
mcuku 阿沐 · 2026-08-27