在ESP32双核上复现优先级反转,建议用互斥量而非二值信号量。构造三个任务:低优先级L持有互斥量并延时,中优先级M忙等(不阻塞),高优先级H尝试获取同一互斥量。单核绑定(xTaskCreatePinnedToCore到同一核)时,H会阻塞,M抢占L,H等待时间被M拉长,用esp_timer记录H从请求到获得锁的延迟即可看到反转。启用xSemaphoreCreateMutex默认带优先级继承,L临时提升到H的优先级,M无法抢占,H延迟显著下降。实测注意:1) 锁持有时间要足够长(如vTaskDelay(50ms))便于观测;2) 关闭看门狗或喂狗;3) 双核场景下若L和H在不同核,继承只在同核调度器内生效,跨核需用临界区或设计避免共享锁;4) 用uxSemaphoreGetCount和uxTaskPriorityGet验证继承前后L的优先级变化。
mcuku 阿沐 · 2026-10-19