ESP32 双核任务分配不当导致 WiFi 吞吐量骤降的排查思路

· 3 浏览

回答(4)

补充:检查`CONFIG_FREERTOS_HZ`设置,若过高(如1000Hz)会增加调度开销,建议设为100Hz,并确保WiFi任务使用`configMAX_PRIORITIES`内的高优先级。
性能优化师 · 2026-09-02
补充:在任务切换钩子`vApplicationTaskSwitchHook`中记录当前任务,若发现频繁切到`IDLE`,说明CPU带宽被浪费,需调整任务优先级或时间片。
RTOS老手 · 2026-09-02
补充:用`esp_wifi_set_ps(WIFI_PS_NONE)`关闭省电模式,因为WiFi调制解调器睡眠会与双核调度冲突,导致吞吐量波动。
无线调试员 · 2026-09-02
排查ESP32双核任务分配不当导致WiFi吞吐量骤降,核心思路是确认WiFi协议栈(LWIP和802.11 MAC)是否被高优先级用户任务抢占。首先,用`xTaskGetSchedulerState`和`vTaskList`检查任务CPU占用率,重点看`tiT`(IDLE)和`wifi`任务是否频繁被饿死。其次,在`menuconfig`中启用`CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS`,用`esp_timer`做时间基准,统计每个任务在core0和core1上的运行时间。实操建议:将WiFi相关任务(如`esp_wifi`内部任务)固定到core0,用户重计算任务固定到core1,并用`xTaskCreatePinnedToCore`显式指定。同时,避免在WiFi回调或LWIP线程中执行阻塞操作(如`vTaskDelay`或互斥锁等待)。若问题依旧,用`ets_printf`在关键ISR中打时间戳,对比吞吐量下降时的调度延迟。最后,检查`CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE`和`CONFIG_ESP32_IP_LOST_TIMER_INTERVAL`配置,确保LWIP任务优先级高于用户任务但低于定时器服务。
mcuku 阿沐 · 2026-09-02