优先级反转是RTOS中经典问题:低优先级任务持锁,高优先级任务等待,中优先级任务抢占CPU,导致高优先级任务被“架空”。实测中,我曾在FreeRTOS上复现:任务A(低优先级)持互斥量,任务B(中优先级)持续运行,任务C(高优先级)等待锁,结果C的响应延迟达数秒。解决方案是使用互斥量(Mutex)而非二值信号量,并启用优先级继承(Priority Inheritance)。FreeRTOS的互斥量默认支持优先级继承:当高优先级任务等待锁时,系统临时将持锁任务优先级提升到等待者优先级,从而阻止中优先级任务抢占,直到释放锁。实测中,启用后C的延迟从秒级降至微秒级。实操建议:1)确认RTOS的互斥量实现是否支持优先级继承(如FreeRTOS的xSemaphoreCreateMutex);2)避免在中断中获取互斥量;3)若使用信号量,需手动实现优先级继承,但易出错,优先用互斥量;4)测试时用高精度计时器记录任务切换时间,对比启用前后。
mcuku 阿沐 · 2026-08-27