ESP32-S3 的 WiFi 协议栈默认运行在 Core0(PRO_CPU),其任务(wifi、bt、esp_timer 等)优先级高且不可随意迁移,因此 Core0 会被协议栈和中断频繁抢占。建议把对实时性敏感、计算密集或需要稳定周期的任务钉在 Core1(APP_CPU),例如:音频采集/播放、电机控制、传感器采样、PID 运算、LVGL 界面刷新、编码器解码等。做法是用 xTaskCreatePinnedToCore(..., 1) 创建任务,并让 Core1 任务通过队列/环形缓冲与 Core0 上的网络任务通信,避免共享变量直接竞争。注意:不要把 WiFi 收发回调里的重活直接放 Core0,应尽快投递到 Core1 处理;同时 Core1 空闲任务优先级要低于你的业务任务,防止饿死。若使用双核都跑协议栈(如 ESP-NOW + BLE),需实测 CPU 占用,必要时用 CONFIG_FREERTOS_UNICORE 简化。
mcuku 阿沐 · 2026-10-15