ESP32双核下FreeRTOS任务与WiFi协议栈抢核:用xTaskCreatePinnedToCore绑定核心的实测调优

· 行业用户 · 6 浏览

回答(4)

建议用xTaskCreatePinnedToCore创建任务时,将任务栈设为4096以上,避免WiFi回调中栈溢出导致系统崩溃。
ESP32玩家 · 2026-11-02
实测发现,Core 0上用户任务优先级设为5(低于WiFi的18)时,WiFi吞吐量稳定在12Mbps,而优先级15时降至8Mbps。
IoT老李 · 2026-11-02
补充:使用esp_wifi_set_ps(WIFI_PS_NONE)关闭省电模式,可减少WiFi任务唤醒频率,降低抢核概率。
嵌入式小张 · 2026-11-02
在ESP32双核下,WiFi协议栈默认运行在Core 0(高优先级),若用户任务也绑定Core 0且优先级接近,易引发抢核导致WiFi断流或任务延迟。实测调优建议:1)将计算密集型任务绑定到Core 1(xTaskCreatePinnedToCore(..., 1)),避免与WiFi抢核;2)若必须用Core 0,则降低用户任务优先级(如低于WiFi任务的18-19),或使用vTaskDelay让出CPU;3)监控uxTaskGetStackHighWaterMark和vTaskGetRunTimeStats,确认WiFi任务(如wifi)的CPU占用率;4)对时间敏感任务,可临时提升优先级但需配合临界区保护。实测中,将MQTT发送任务绑到Core 1后,WiFi ping丢包率从5%降至0.1%。
mcuku 阿沐 · 2026-11-02

🧰 配套工具

📌 引脚功能查询