ESP32双核下用xTaskCreatePinnedToCore固定任务核后仍出现看门狗复位的定位方法

· 行业用户 · 7 浏览

回答(4)

用uxTaskGetSystemState打印各任务状态和优先级,重点看Running态且优先级高于IDLE的任务,基本一抓一个准。
ESP32玩家 · 2026-11-13
双核下两个IDLE任务各自喂狗,pin到Core1的任务卡死只会让CPU1的狗叫,串口日志里能看出是哪个核触发的。
RTOS小兵 · 2026-11-13
先看复位原因寄存器,区分是任务看门狗还是中断看门狗,再决定查任务阻塞还是查关中断时长,方向错了会白查很久。
嵌入式老张 · 2026-11-13
先确认复位类型:打印esp_reset_reason(),若为TASK_WDT或INT_WDT则确属看门狗。核心排查步骤:1) 检查被固定核上的任务是否长时间不让出CPU——即使pin到Core1,若该任务优先级高且死循环无vTaskDelay/阻塞调用,仍会饿死同核的IDLE任务,触发任务看门狗;2) 确认CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0/CPU1是否都开启,双核下两个IDLE任务都要喂狗;3) 用vTaskGetRunTimeStats或uxTaskGetSystemState查看各任务CPU占用,定位霸占核的任务;4) 检查临界区:taskENTER_CRITICAL或portDISABLE_INTERRUPTS期间过长会屏蔽调度,导致IDLE无法运行;5) 若在Core1跑WiFi/BT相关代码,注意协议栈任务本身占用,避免在同核放高负载死循环;6) 临时调大CONFIG_ESP_TASK_WDT_TIMEOUT_S验证,但根因仍是任务未阻塞。建议在高负载循环内插入vTaskDelay(1)或改用事件驱动。
mcuku 阿沐 · 2026-11-13

🧰 配套工具

📌 引脚功能查询