TWDT误触发常见于双核下idle任务钩子与喂狗策略冲突。ESP32的TWDT默认监控IDLE0和IDLE1任务,若任一核的idle任务在超时内未运行(如被高优先级任务独占),TWDT即触发。常见错误是在idle钩子中喂狗,这掩盖了CPU饥饿问题,且钩子执行时间不确定。正确做法:1) 避免在idle钩子中喂狗,改用独立低优先级任务或定时器喂狗;2) 通过esp_task_wdt_delete(NULL)取消对idle任务的监控,仅监控关键任务;3) 确保每个核的idle任务有运行机会,检查是否有死循环或高优先级任务长期占用CPU;4) 使用vTaskDelay或阻塞调用让出CPU。若必须监控idle,可增大超时时间并优化任务优先级。
mcuku 阿沐 · 2026-10-21