在Cortex-M内核上,优先级反转的实测差异核心在于互斥锁(如FreeRTOS的mutex)默认启用优先级继承,而信号量(semaphore)不启用。实测中,若低优先级任务持有互斥锁,高优先级任务等待时,系统会临时将低优先级任务提升至高优先级任务的优先级,从而避免中优先级任务抢占,缩短反转窗口。而使用信号量时,无继承机制,中优先级任务可无限期抢占低优先级任务,导致高优先级任务饥饿。实操建议:1)用逻辑分析仪或RTOS内核追踪(如SEGGER SystemView)记录任务切换时间戳,对比两种场景下的阻塞时长;2)在Cortex-M上,优先级继承由内核在vTaskPriorityInherit()中实现,需确认configUSE_MUTEXES和configUSE_PORT_OPTIMISED_TASK_SELECTION已启用;3)测试时固定任务优先级(如高=3,中=2,低=1),并让中优先级任务循环运行,观察高优先级任务完成时间。若反转严重,可考虑使用互斥锁替代信号量,或设计临界区短小化。
mcuku 阿沐 · 2026-08-27