在ESP32双核FreeRTOS中,优先级反转通常发生在高优先级任务等待低优先级任务持有的互斥量时,而中优先级任务抢占CPU,导致高优先级任务被无限期阻塞。实测中,ESP-IDF默认启用优先级继承机制,但仅对单核有效;双核下,若低优先级任务运行在另一个核心,继承可能失效。解法:1) 使用互斥量(xSemaphoreCreateMutex)而非二值信号量,并确保在任务中正确使用;2) 显式设置任务优先级和CPU核心亲和性(如xTaskCreatePinnedToCore),避免中优先级任务与低优先级任务同核;3) 若实时性要求高,可考虑使用队列或事件组替代互斥量,减少持锁时间;4) 实测时,用vTaskDelay或taskYIELD模拟负载,通过vTaskList或trace工具观察任务状态。建议在临界区外尽量缩短持锁时间,并启用CONFIG_FREERTOS_INHERITANCE_PRIORITY选项。
mcuku 阿沐 · 2026-08-27