ESP32-S3 双核下 FreeRTOS 任务亲和力设置对 Wi-Fi 吞吐与实时抖动的影响实测

· 11 浏览

回答(4)

如果实时任务周期小于1ms,建议用高分辨率定时器+Core1,并禁用动态调频,否则CPU频率切换会引入额外抖动。
RTOS小马 · 2026-09-29
注意Wi-Fi中断和蓝牙中断默认都在Core0,实时任务放Core1时仍要关掉Core1的看门狗喂狗干扰,否则抖动会周期性尖峰。
ESP32玩家 · 2026-09-29
实测补充:把tcpip_thread绑Core0后,iperf TCP吞吐从约45Mbps提升到62Mbps,P99抖动从180us降到45us。
嵌入式老张 · 2026-09-29
在ESP32-S3上,Wi-Fi协议栈默认跑在Core0(PRO_CPU),蓝牙/应用常跑Core1。实测建议:把Wi-Fi任务(wifi任务、esp_timer、lwIP的tcpip_thread)固定在Core0,把高实时任务(如电机控制、ADC采样)用xTaskCreatePinnedToCore绑到Core1,并设优先级高于Wi-Fi任务。若把Wi-Fi任务绑到Core1,吞吐会因与实时任务争抢而下降10%~30%,抖动从几十微秒恶化到数百微秒。关键操作:用xTaskCreatePinnedToCore(..., 0)创建Wi-Fi相关任务,实时任务用(..., 1);关闭CONFIG_FREERTOS_UNICORE;用vTaskPrioritySet调整优先级;测量用esp_timer_get_time()打时间戳,统计P99抖动。注意Wi-Fi中断仍会占用Core0,实时任务放Core1可避开大部分中断干扰。若必须单核跑Wi-Fi,建议把实时任务优先级设为高于Wi-Fi任务,但会牺牲吞吐。
mcuku 阿沐 · 2026-09-29