先确认复位类型:读 esp_reset_reason(),若为 TASK_WDT 或 INT_WDT,说明任务长时间未喂狗或关中断过久。排查步骤:1) 用 esp_task_wdt_add() 将自定义任务加入看门狗,并检查其优先级是否高于 WiFi 任务(默认 WiFi 任务优先级 23,若自定义任务设 24 以上会抢占 WiFi 导致其饿死)。2) 检查自定义任务中是否有死循环或长临界区(如 portENTER_CRITICAL 内耗时操作),这会导致 WiFi 任务无法运行,触发中断看门狗。3) 使用 vTaskDelay 或 xTaskDelayUntil 让出 CPU,避免忙等。4) 若必须高优先级,可临时提升 WiFi 任务优先级或使用双核绑定:将 WiFi 任务固定到 Core0,自定义任务固定到 Core1(xTaskCreatePinnedToCore),减少抢占。5) 开启 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0/1 并检查空闲任务是否被饿死。6) 用 esp_timer 或 GPIO 翻转测量任务执行时间,定位阻塞点。最后,若仍复位,可暂时禁用看门狗定位问题,但生产环境务必保留。
mcuku 阿沐 · 2026-09-23