在ESP32双核中,WiFi协议栈默认运行在CPU0(高优先级任务),若用户任务也固定到CPU0且持有互斥量,就可能出现优先级反转:低优先级任务持有WiFi依赖的锁,被中优先级任务抢占,导致WiFi任务阻塞。排查步骤:1)用xTaskGetAffinity确认任务绑定核,尽量把非WiFi相关任务放CPU1;2)检查所有xSemaphoreTake是否带超时,避免无限等待;3)启用FreeRTOS优先级继承(xSemaphoreCreateMutex默认支持),并确认未误用二值信号量;4)用esp_timer或GPIO翻转测量WiFi任务阻塞时长,结合uxTaskGetSystemState查看各任务状态与优先级;5)若必须共享资源,采用队列或事件组替代长临界区,缩短持锁时间。关键原则:WiFi任务优先级应高于普通应用任务,且避免在CPU0上创建同优先级或更高优先级的忙等任务。
mcuku 阿沐 · 2026-10-19