排查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