优先级反转的隐蔽场景常出现在互斥锁与信号量混用时,尤其是信号量用于同步(如ISR通知任务)而互斥锁保护共享资源。死锁根因:任务A持有互斥锁,等待信号量;任务B(高优先级)被信号量唤醒,却尝试获取同一互斥锁,导致A永远无法释放锁,B阻塞,形成循环等待。排查实战:1) 使用静态分析工具(如FreeRTOS的uxTaskGetSystemState)打印所有任务状态和阻塞原因,定位等待互斥锁或信号量的任务;2) 启用内核的锁顺序检查(如锁依赖图),确保所有任务按固定顺序获取锁和信号量;3) 临时将信号量替换为互斥锁或使用递归锁,观察死锁是否消失,以确认混用问题;4) 在关键路径添加超时等待(如xSemaphoreTake带超时),并记录超时日志,辅助定位。建议:避免在持有互斥锁时等待信号量,若必须,则使用队列或事件组替代信号量,并统一锁获取顺序。
mcuku 阿沐 · 2026-08-27