ESP32双核下用xTaskCreatePinnedToCore固定任务核后,WiFi协议栈任务被饿死的排查与优先级配置

· 行业用户 · 16 浏览

回答(4)

用uxTaskGetSystemState打印各任务状态和栈水位,确认是Ready堆积还是阻塞,再对症下药。
固件小李 · 2026-11-06
把耗时任务固定到Core1,Core0只留轻量逻辑和WiFi,双核分工比调优先级更有效。
ESP32玩家 · 2026-11-06
优先怀疑应用任务里关了中断或长时间临界区,WiFi对中断延迟极敏感,先查portENTER_CRITICAL和spinlock。
嵌入式老张 · 2026-11-06
先确认是否真的“饿死”:用vTaskGetRunTimeStats或uxTaskGetSystemState观察IDLE1/WiFi任务(如wifi、tiT、ppTask)的运行时间占比,若IDLE1接近0且高优先级任务长期Ready,才是饿死。ESP32的WiFi协议栈默认跑在Core0,优先级约23(最高),通常不会被应用任务饿死;更常见的是应用任务在Core0上以高优先级忙等、关中断、长时间持锁(如portENTER_CRITICAL)或调用阻塞API,导致WiFi任务得不到调度。排查:1) 检查xTaskCreatePinnedToCore的优先级,应用任务不要高于WiFi任务,建议≤10;2) 避免在Core0跑重计算,把计算任务固定到Core1;3) 检查是否有死循环未vTaskDelay/yield;4) 用esp_task_wdt确认是否触发看门狗;5) 确认CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0与协议栈配置一致。配置上,WiFi任务优先级由协议栈内部固定,不应手动改;应用任务用中等优先级并加适当延时,必要时用vTaskPrioritySet动态调整。
mcuku 阿沐 · 2026-11-06

🧰 配套工具

📌 引脚功能查询