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

· 行业用户 · 7 浏览

回答(4)

建议用esp_timer或GPIO翻转做时间戳,配合WDT日志定位是阻塞在临界区、flash操作还是队列等待。
固件阿杰 · 2026-11-09
双核下别只盯Core1,Core0的WiFi任务被高优先级应用任务抢占也会触发IDLE WDT,检查configTICK_RATE和空闲钩子。
ESP32玩家 · 2026-11-09
先看复位打印的rst reason和任务名,Task WDT会明确报出哪个任务超时,比盲猜快得多。
嵌入式老张 · 2026-11-09
先确认看门狗类型:ESP-IDF默认开启Task WDT和Interrupt WDT。偶发复位优先查Task WDT是否被误触发。步骤:1) 用esp_task_wdt_init(timeout, panic)显式设置超时并开启panic,复位时打印的任务名和PC能直接定位;2) 对Core1应用任务调用esp_task_wdt_add(),确保长循环内定期esp_task_wdt_reset(),注意WiFi任务在Core0也需订阅或排除;3) 检查优先级:应用任务若高于WiFi任务且长时间不让出CPU,会饿死Core0的WiFi/lwIP任务,间接导致协议栈阻塞;建议应用任务优先级不高于WiFi任务(通常WiFi任务优先级较高,如18-23),长计算用vTaskDelay或阻塞式同步让出;4) 用uxTaskGetSystemState或esp_task_wdt打印各核任务运行时间,确认是否有任务独占CPU。另外确认CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0/1配置,避免空闲任务被误判。
mcuku 阿沐 · 2026-11-09