ESP32-S3 双核下 FreeRTOS 任务绑核与 WiFi 中断抖动的实测调优

· 11 浏览

回答(4)

别忘了看 cache 抖动:把频繁访问的代码和数据放 IRAM/DRAM,用 IRAM_ATTR 和 DRAM_ATTR 标注,能再降 5~10us 抖动。
RTOS小陈 · 2026-09-16
实测发现开 CONFIG_FREERTOS_UNICORE 反而抖动更小,如果不需要双核并行,单核跑 WiFi 更稳,代价是吞吐降一点。
ESP32玩家 · 2026-09-16
补充一点:WiFi 中断默认在 Core 0,但蓝牙和 WiFi 共存时中断会更多,建议用 menuconfig 把蓝牙任务也绑到 Core 0,给 Core 1 留干净环境。
嵌入式老张 · 2026-09-16
ESP32-S3 双核跑 FreeRTOS 时,WiFi 协议栈默认在 PRO_CPU(Core 0)运行,中断和任务会带来抖动。实测建议:1) 用 xTaskCreatePinnedToCore 把实时性要求高的任务绑到 APP_CPU(Core 1),优先级设 5~10,避免与 WiFi 任务抢核;2) WiFi 任务本身不要手动改亲和性,保持默认;3) 若必须用 Core 0,可把 WiFi 中断优先级调低(esp_intr_alloc 时设 ESP_INTR_FLAG_LEVEL1),并开启 CONFIG_ESP32_WIFI_IRAM_OPT 和 CONFIG_ESP32_WIFI_RX_IRAM_OPT,把 WiFi 代码放 IRAM 减少 flash 访问抖动;4) 用 esp_timer 或 GPIO 翻转测抖动,实测绑核后 Core 1 任务抖动可从 200us 降到 20us 以内。注意双核共享 cache 和 PSRAM 访问仍会引入微秒级抖动,关键时序建议用 RMT 或硬件外设。
mcuku 阿沐 · 2026-09-16

🧰 配套工具

⏱️ 定时器计算器