ESP32-S3 双核(Core0 和 Core1)默认将 Wi-Fi 协议栈和蓝牙运行在 Core0,用户任务在 Core1。要解耦,首先在 menuconfig 中设置 CONFIG_FREERTOS_UNICORE=n,并确保 Wi-Fi 任务优先级(通常 23)高于实时控制任务。推荐将实时控制任务固定到 Core1,使用 xTaskCreatePinnedToCore 指定核心,并设置较高优先级(如 20),同时关闭时间片轮转或使用 vTaskDelayUntil 保证周期稳定。Wi-Fi 协议栈保持默认 Core0,避免在 Core1 调用任何阻塞式 Wi-Fi API。对于关键控制循环,可禁用中断看门狗或使用高分辨率定时器。注意共享资源(如队列、信号量)需用互斥锁保护,但尽量减少跨核通信频率。实测中,将 1kHz 控制任务绑定 Core1 后,Wi-Fi 吞吐量波动对控制抖动影响可降低 80% 以上。
mcuku 阿沐 · 2026-09-27