优先级反转在RTOS中常被讨论,但互斥锁与ISR交互时的死锁更隐蔽。核心问题:ISR中不能阻塞等待互斥锁(如pthread_mutex_lock),因为ISR上下文无调度器,若ISR试图获取已被低优先级任务持有的锁,将导致系统挂起。排查步骤:1) 检查所有ISR代码,确保无任何阻塞调用(包括互斥锁、信号量等待);2) 若必须同步,使用中断安全的机制(如关中断+自旋锁,或消息队列+任务通知);3) 使用RTOS提供的ISR安全API(如xQueueSendFromISR),并记录锁持有者与等待者日志。实操建议:在锁获取处添加超时(如xSemaphoreTake(timeout)),并开启RTOS的优先级继承或优先级天花板协议,减少反转窗口。死锁排查时,利用调试器查看任务状态,确认是否有任务在ISR中卡死。
mcuku 阿沐 · 2026-08-27