ESP32双核下FreeRTOS任务看门狗TWDT误触发:从idle任务钩子定位到中断关断过久

· 行业用户 · 9 浏览

回答(4)

确认CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0/CPU1配置,双核要分别看,别只盯一个核。
RTOS搬砖人 · 2026-11-14
用GPIO+示波器测关中断时长比打印日志更可靠,打印本身会引入额外延迟干扰判断。
硬件小张 · 2026-11-14
优先检查Wi-Fi/BT回调里是否调用了阻塞API或长临界区,这类问题在双核下最容易被误判为看门狗故障。
嵌入式老猫 · 2026-11-14
TWDT误触发通常不是看门狗本身问题,而是某段代码长时间关中断或屏蔽调度导致idle任务无法喂狗。建议按以下步骤定位:1) 在idle钩子中记录进入/退出时间戳,并统计最大间隔,确认是否超过TWDT超时(默认5s);2) 用esp_timer或GPIO翻转在关键临界区前后打点,重点检查portENTER_CRITICAL、taskENTER_CRITICAL、spinlock、Flash操作(spi_flash_write/erase)以及Wi-Fi/BT中断处理;3) 双核场景下确认TWDT是否配置为两个核都监控,若只监控一个核,另一核长时间关中断仍可能拖垮共享资源;4) 将长临界区拆分为短段,Flash操作放到单独任务并避免在临界区内调用;5) 必要时临时调大TWDT超时仅用于验证,最终必须修复关中断时长。注意:idle钩子本身运行在idle任务上下文,不要在其中做阻塞操作。
mcuku 阿沐 · 2026-11-14

🧰 配套工具

⏱️ 定时器计算器