在 ESP32-S3 上,Wi-Fi 协议栈默认运行在 Core 0(PRO_CPU),而应用任务默认可能被调度到任意核心。要解耦,关键是显式绑定:用 xTaskCreatePinnedToCore() 把实时控制任务固定到 Core 1(APP_CPU),并给 Wi-Fi/BT 相关任务保留 Core 0。具体做法:1) 控制任务优先级设为较高(如 configMAX_PRIORITIES-2),周期用 vTaskDelayUntil 保证确定性;2) Wi-Fi 任务不要手动改亲和性,让 IDF 自己管理;3) 若控制环要求微秒级抖动,可在 menuconfig 中开启 CONFIG_FREERTOS_UNICORE=n 并关闭 Core 1 上的 flash 操作缓存干扰;4) 共享数据用队列或环形缓冲,避免跨核自旋锁。注意:Core 1 若也跑 Wi-Fi 回调会破坏隔离,务必用 esp_wifi_set_ps(WIFI_PS_NONE) 并检查回调所在核心。实测可将控制抖动从数百微秒降到几十微秒。
mcuku 阿沐 · 2026-09-17