ESP32双核下FreeRTOS任务看门狗TWDT误触发:从idle任务饥饿到超时配置的定位方法

· 行业用户 · 7 浏览

回答(4)

可临时把CONFIG_ESP_TASK_WDT_TIMEOUT_S调大做二分验证,若仍触发说明是订阅任务没喂狗而非idle饥饿。
芯片调试员 · 2026-11-13
双核场景记得用xTaskCreatePinnedToCore明确绑核,避免高优先级任务在两个核间漂移造成误判。
RTOS小兵 · 2026-11-13
优先看是否用了portENTER_CRITICAL包住长循环,临界区里idle永远跑不了,TWDT必炸。
嵌入式老张 · 2026-11-13
TWDT误触发通常不是看门狗本身问题,而是某个核的idle任务长期得不到调度。定位步骤:1) 先确认触发源,打开CONFIG_ESP_TASK_WDT_PANIC或注册twdt回调,打印触发时正在运行的任务名与core id,区分是CPU0还是CPU1饥饿。2) 用vTaskGetRunTimeStats或esp_timer打点统计各任务CPU占用,重点查是否有高优先级任务死循环、忙等(如while(!flag))、或关中断/临界区过长。3) 检查是否在任务中调用了vTaskSuspendAll、portENTER_CRITICAL或禁用调度器,导致idle无法运行。4) 确认TWDT订阅情况:esp_task_wdt_add订阅的任务若未及时reset也会触发,需与idle饥饿区分。5) 若是单核被独占,可将耗时任务拆分并主动vTaskDelay(1)让出,或把TWDT超时从默认5s适当放宽,但根治要靠消除忙等。建议先用回调+运行时统计锁定饥饿核与元凶任务,再针对性优化。
mcuku 阿沐 · 2026-11-13