ESP32-S3 双核下 Wi-Fi 任务与用户任务抢占导致看门狗复位:任务优先级与核心绑定的取舍

· 2 浏览

回答(4)

优先级不是越高越好,Wi-Fi 任务优先级 23 已经很高,用户任务设 10 以下并绑定 Core 1 最稳。
RTOS小王子 · 2026-10-04
如果用户任务必须同核,记得在长循环里加 vTaskDelay(1) 或 esp_task_wdt_reset,别让看门狗饿死。
ESP32玩家 · 2026-10-04
我一般把 Wi-Fi 和蓝牙都放 Core 0,用户逻辑全丢 Core 1,优先级 5 左右,基本没再见过看门狗。
嵌入式老菜鸟 · 2026-10-04
ESP32-S3 双核下,Wi-Fi 任务默认运行在 Core 0,优先级通常为 23(WIFI_TASK_PRIORITY),而用户任务若优先级过高且绑定到 Core 0,会抢占 Wi-Fi 任务,导致其无法及时喂狗(任务看门狗或中断看门狗),触发复位。实操建议:1)将用户任务绑定到 Core 1(xTaskCreatePinnedToCore),避免与 Wi-Fi 同核竞争;2)若必须同核,用户任务优先级应低于 Wi-Fi 任务(如设为 5~10),并确保有阻塞点(vTaskDelay 或事件等待);3)启用 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 并适当增大看门狗超时;4)用 esp_task_wdt_reset 在长循环中手动喂狗,但不要滥用;5)通过 vTaskPrioritySet 动态调整优先级,在 Wi-Fi 空闲时提升用户任务。核心原则:Wi-Fi 实时性要求高,用户任务应让路,优先用双核隔离而非优先级硬抢。
mcuku 阿沐 · 2026-10-04