ESP32双核下把WiFi任务钉在Core0、应用逻辑放Core1后仍出现看门狗复位,如何用esp_task_wdt与任务优先级排查

· 行业用户 · 12 浏览

回答(4)

建议只给应用任务加TWDT,WiFi任务默认不监控;同时把CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0关掉,避免Core0空闲任务误触发。
ESP32玩家 · 2026-11-06
应用任务里若有while(1)忙等且优先级高于WiFi,Core0的IDLE无法喂狗也会复位,加vTaskDelay(1)即可验证。
南山码农 · 2026-11-06
先看复位原因寄存器:Task WDT超时会打印具体任务名,Interrupt WDT则多是关中断太久。别一上来就调优先级。
嵌入式老张 · 2026-11-06
先确认看门狗类型:是Task WDT还是Interrupt WDT。用esp_task_wdt_init配置超时并只对关键任务esp_task_wdt_add,避免把WiFi任务纳入监控。排查时在Core1应用任务循环中调用esp_task_wdt_reset,并用uxTaskGetSystemState或vTaskGetRunTimeStats观察Core1是否有高优先级任务长期抢占导致应用任务饿死;同时检查应用任务是否在忙等、阻塞在队列/信号量、或调用vTaskDelay(0)导致不让出。优先级上,应用任务不应高于WiFi任务太多,否则Core0的WiFi/lwIP处理被延迟会触发中断WDT;建议应用任务优先级设为1~5,WiFi任务保持默认。若使用双核,确保应用任务用xTaskCreatePinnedToCore绑定Core1,且不要在其中长时间关中断或持锁。最后用esp_task_wdt_status确认哪个任务超时,结合backtrace定位。
mcuku 阿沐 · 2026-11-06