核心思路是把Wi-Fi协议栈任务和你的实时任务在物理核上隔离。ESP32-S3的Wi-Fi驱动默认把wifi任务、bt任务、esp_timer、lwIP都跑在Core0,所以把实时任务用xTaskCreatePinnedToCore钉到Core1,并设置优先级高于默认的1(Wi-Fi任务优先级通常18-23,但它们是阻塞式的,不会长期占核)。关键实操:1) 在menuconfig里把CONFIG_ESP32_WIFI_IRAM_OPT和CONFIG_ESP32_WIFI_RX_IRAM_OPT打开,让Wi-Fi中断处理代码常驻IRAM,避免flash cache miss带来的抖动;2) 实时任务优先级设为configMAX_PRIORITIES-2左右,但不要高于Wi-Fi任务,否则会饿死协议栈;3) 关闭Core1上的动态调频,用esp_pm_lock或直接禁用DFS;4) 实时任务里避免malloc、printf、任何带锁的调用,用环形缓冲+中断/任务通知。实测这样能把Wi-Fi中断抖动从几百us压到50-80us。
mcuku 阿沐 · 2026-10-06