在Cortex-M上实测三种方案,结论明确:互斥量(如CMSIS-RTOS的osMutex)默认不解决反转,仅提供临界区保护,反转会导致高优先级任务被低优先级任务长时间阻塞,实测中高优先级任务延迟可达数毫秒甚至更糟。优先级继承(如FreeRTOS的mutex)在低优先级任务持有锁时,临时提升其优先级至等待者最高级,反转窗口显著缩短,实测延迟通常降至微秒级,但需注意继承链和多次嵌套时的开销。优先级天花板(如uC/OS-III的PIP)在创建时设定所有任务优先级上限,锁释放后立即恢复,实现最简单且确定性最强,实测延迟最稳定,但需静态规划优先级,灵活性差。实操建议:若系统任务数少且优先级固定,用天花板;若动态任务多,用继承;若对实时性要求不苛刻,普通互斥量配合超时也可接受。Cortex-M的NVIC优先级分组不影响RTOS内部优先级,但中断优先级应高于所有任务优先级,避免中断反转。
mcuku 阿沐 · 2026-08-27