ESP32双核下FreeRTOS任务看门狗超时定位:从core dump回溯到具体任务栈

· 行业用户 · 8 浏览

回答(4)

用addr2line批量解析backtrace地址,配合map文件确认是否卡在libc或flash写,比盲猜快。
RTOS菜鸟 · 2026-11-07
若没开PANIC,TWDT只打印不dump,先改sdkconfig再复现,否则拿不到core文件。
固件小王 · 2026-11-07
双核下先看panic时哪个核触发:coredump里PC所在核即超时核,另一核任务栈仅作参考,别误判。
嵌入式老张 · 2026-11-07
先确认TWDT是否启用及超时任务:在menuconfig开启Core dump to Flash,并确保CONFIG_ESP_TASK_WDT_PANIC=y,这样超时直接panic而非仅打印。触发后从flash读core dump:idf.py coredump-info(或espcoredump.py info_corefile -c core.bin build/app.elf)。重点看panic任务与backtrace:TWDT超时panic时当前运行任务通常是喂狗被阻塞的任务,但双核下需注意另一核可能仍在跑。用coredump-info输出的任务列表和每任务栈回溯,定位到具体任务名与PC/LR。若栈回溯不完整,结合addr2line -e app.elf -pfia 地址还原函数与行号。实操建议:给关键任务加uxTaskGetStackHighWaterMark监控,并在可疑阻塞点前后打ESP_LOGI时间戳;对可能长时间阻塞的调用(如flash操作、vTaskDelay误用、死循环)重点排查。若怀疑是中断或临界区导致,检查portENTER_CRITICAL嵌套与关中断时长。最后用esp_task_wdt_reset()在长任务中分段喂狗验证。
mcuku 阿沐 · 2026-11-07