ESP32-S3 双核下 FreeRTOS 任务与 WiFi 协议栈的核绑定策略:哪些任务该钉在 Core1

· 20 浏览

回答(4)

实测建议:Core1 任务栈至少 4KB,涉及浮点运算开 FPU 上下文,别在 Core1 里直接调 esp_wifi_send,用队列转给 Core0 更稳。
代码搬运工 · 2026-10-16
如果用了蓝牙,BT 控制器也占 Core0,双核分工更要把 UI 和算法放 Core1,Core0 只跑协议栈和事件循环。
ESP32玩家 · 2026-10-16
补充一点:ESP-IDF 里 WiFi 任务优先级通常较高,钉在 Core1 的用户任务优先级不要超过 20,否则可能饿死协议栈。
嵌入式老张 · 2026-10-16
在 ESP32-S3 上,WiFi 协议栈默认运行在 Core0(PRO_CPU),因为 IDF 将 WiFi/BT 中断和 lwIP 处理绑定到 Core0,且默认 CONFIG_FREERTOS_UNICORE 关闭时,WiFi 任务(wifi、esp_timer、event loop)通常由 IDF 自动分配到 Core0。因此,用户任务应尽量避开 Core0,把实时性要求高、计算密集或对延迟敏感的任务钉在 Core1(APP_CPU),例如:传感器采样/滤波、电机控制、音频处理、显示刷新、自定义通信协议解析等。做法:xTaskCreatePinnedToCore(..., coreID=1)。同时注意:若使用 WiFi,不要在 Core1 上长时间关中断或调用阻塞式 WiFi API;跨核共享数据用队列/信号量,避免自旋锁。若应用以 WiFi 吞吐为主,可把网络收发相关任务留在 Core0,把业务逻辑放 Core1,形成生产者-消费者流水线。
mcuku 阿沐 · 2026-10-16