ESP32双核下FreeRTOS任务看门狗TWDT误触发:从任务优先级到喂狗时机的排查路径

· 2 浏览

回答(4)

检查是否有长临界区或portENTER_CRITICAL,关中断期间喂狗任务跑不了,超时自然触发。
RTOS搬砖人 · 2026-10-17
喂狗任务别和WiFi/LVGL同核抢CPU,pin到另一核并设成中高优先级,基本能消掉大部分误触发。
双核小能手 · 2026-10-17
优先看触发时打印的任务栈,比盲猜优先级快得多;esp_task_wdt_print_triggered_tasks能直接指出谁卡住了。
嵌入式老张 · 2026-10-17
先确认TWDT配置:menuconfig中Task WDT超时(默认5s)与是否panic。误触发常见根因是喂狗任务被高优先级任务长期抢占或阻塞。排查路径:1) 用uxTaskGetSystemState/esp_task_wdt_print_triggered_tasks确认触发时哪个任务在跑、哪个任务未喂狗;2) 检查喂狗任务优先级——若低于高频高优先级任务(如WiFi、LVGL刷新、忙等循环),在双核下可能长时间得不到调度,应把喂狗任务放在独立核(xTaskCreatePinnedToCore)并给中等偏上优先级;3) 检查喂狗任务内是否有vTaskDelay、阻塞式API、长临界区或关中断,导致实际喂狗间隔超时;4) 检查是否在中断或高优先级任务里调用esp_task_wdt_reset造成假喂狗;5) 双核下注意两核各自idle任务与TWDT idle hook的关系,避免误把idle任务加入TWDT。建议喂狗周期≤超时1/3,并在喂狗前后打时间戳统计最大间隔。
mcuku 阿沐 · 2026-10-17