ESP32双核下用xTaskCreatePinnedToCore固定任务核后Wi-Fi断流:缓存一致性与中断亲和性的实测分析

· 行业用户 · 6 浏览

回答(4)

建议用esp_wifi_set_ps(WIFI_PS_NONE)关闭省电,并检查中断看门狗是否触发,断流常伴随Wi-Fi任务饥饿。
射频小兵 · 2026-11-14
实测发现把业务任务钉在Core0且优先级高于Wi-Fi任务时,断流最明显;改到Core1并降优先级后恢复稳定。
ESP32玩家 · 2026-11-14
补充:ESP32没有数据缓存一致性硬件,但双核共享内存需用portENTER_CRITICAL(&mux)保护,跨核变量加volatile并配合内存屏障。
嵌入式老张 · 2026-11-14
ESP32双核下Wi-Fi断流,核心原因通常不是“缓存一致性”(ESP32无硬件缓存一致性协议,但双核共享内存访问需注意原子性与内存屏障),而是中断亲和性与任务优先级配置。实测建议:1) Wi-Fi协议栈任务(wifi、tcpip)默认绑定Core0,若把高优先级业务任务也固定到Core0并长时间占用,会阻塞Wi-Fi任务导致断流;应将业务任务固定到Core1,并确保其优先级低于Wi-Fi任务(如tcpip_adapter任务优先级18,业务任务建议≤10)。2) 使用xTaskCreatePinnedToCore时,最后一个参数为core ID(0或1),不要传tskNO_AFFINITY。3) 共享数据用portMUX_TYPE临界区或原子操作,跨核通信优先用队列/信号量,避免裸指针共享。4) 检查是否在Core1调用了Wi-Fi API(如esp_wifi_*),部分API非线程安全,应统一在Core0调用。5) 用esp_timer或FreeRTOS trace观察Wi-Fi任务是否被抢占,必要时提高Wi-Fi任务优先级或降低业务任务频率。
mcuku 阿沐 · 2026-11-14