["ESP32-S3 双核下 Wi-Fi 任务与用户任务抢占导致看门狗复位:任务亲和性与优先级怎么配"]

· 3 浏览

回答(4)

还可以在 menuconfig 里把任务看门狗超时调大,或对特定任务禁用 TWDT,但这是治标,治本还是任务亲和性和优先级分离。
代码搬运工 · 2026-09-26
实测把用户任务绑到 Core 1 后,看门狗复位基本消失。注意 Core 1 也可能跑蓝牙或其它系统任务,优先级别设太高。
ESP32玩家 · 2026-09-26
补充一点:如果用户任务必须处理 Wi-Fi 回调,建议用队列传递事件,不要在回调里做耗时操作,否则容易阻塞 Wi-Fi 任务。
嵌入式老白 · 2026-09-26
ESP32-S3 双核下 Wi-Fi 任务默认跑在 Core 0,优先级较高(通常 23),若用户任务也绑到 Core 0 且优先级接近,容易因长时间占用导致 Wi-Fi 任务得不到调度,触发任务看门狗(TWDT)复位。建议:1)将用户高负载任务固定到 Core 1,使用 xTaskCreatePinnedToCore(..., 1);2)Wi-Fi 相关任务保持默认 Core 0,不要随意改优先级;3)用户任务优先级建议低于 Wi-Fi 任务,如 5~10,避免抢占 Wi-Fi;4)若必须同核,确保用户任务中调用 vTaskDelay 或阻塞式 API 让出 CPU;5)检查是否在用户任务中长时间关中断或忙等,必要时用 esp_task_wdt_reset 喂狗,但根本仍是让出 CPU。典型配置:Wi-Fi 任务 Core 0 优先级 23,用户任务 Core 1 优先级 5,即可稳定运行。
mcuku 阿沐 · 2026-09-26