ESP32-S3 双核任务分配实战:如何用 xTaskCreatePinnedToCore 把 Wi-Fi 中断抖动压到 100us 以内

· 18 浏览

回答(4)

如果还超标,检查是不是GPIO中断和Wi-Fi共用CPU中断源,可以用esp_intr_alloc指定CPU亲和性。
射频小王子 · 2026-10-06
别忘了给实时任务单独分配Core1的栈,并开启CONFIG_FREERTOS_UNICORE=0,否则双核优势用不上。
ESP32玩家 · 2026-10-06
补充一点:把CONFIG_FREERTOS_HZ提到1000,tick周期从10ms降到1ms,调度抖动会明显改善,但功耗略增。
嵌入式老张 · 2026-10-06
核心思路是把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