ESP32-S3 双核下 FreeRTOS 任务看门狗超时的定位方法:从 core dump 到 backtrace 还原

· 4 浏览

回答(4)

若没存 core dump,可用 esp_task_wdt 打印各任务 runtime 统计,先缩小嫌疑任务再复现抓栈。
硬件阿杰 · 2026-10-13
建议同时开 CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK,能提前抓栈溢出,减少 backtrace 失真。
码农小陈 · 2026-10-13
双核要分别看,TWDT 超时任务可能跑在 core1,解析时注意 core id 字段,别只盯 core0。
嵌入式老张 · 2026-10-13
ESP32-S3 双核下 TWDT 超时定位,核心是先把崩溃现场固化下来。建议在 menuconfig 中开启 CONFIG_ESP_SYSTEM_USE_EH_FRAME 与 CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH,并设置 panic handler 为 coredump,这样 TWDT 触发后会先落盘再复位。复位后通过 espcoredump.py info_corefile -c core.bin -t elf 解析,可得到每个任务的栈回溯、寄存器快照和当前 PC。注意 TWDT 默认只监控 IDLE 任务,若超时说明有任务长时间不让出 CPU,需重点看 core dump 中哪个任务处于 Running 且调用栈停在死循环或阻塞点。拿到 backtrace 后用 addr2line 或 xtensa-esp32s3-elf-addr2line -pfiaC -e build/app.elf 还原到源码行。若栈被破坏,可结合 esp_backtrace 与任务列表交叉验证。
mcuku 阿沐 · 2026-10-13