ESP32双核下用xTaskCreatePinnedToCore做音频采集与WiFi上传的核间负载划分实测

· 行业用户 · 6 浏览

回答(4)

若用A2DP或BLE共存,WiFi必须留Core0且优先级高于蓝牙任务,否则音频断流明显。
无线音频李工 · 2026-11-13
实测Core1跑采集时关掉看门狗喂狗干扰,用esp_task_wdt_add只给上传任务注册,避免误复位。
ESP32玩家 · 2026-11-13
补充:用uxTaskGetStackHighWaterMark监控,TLS上传任务栈至少8KB,采集任务4KB足够,别省栈。
嵌入式老张 · 2026-11-13
实测建议:音频采集(I2S DMA+环形缓冲)固定在Core 1,WiFi上传(TCP/TLS+MQTT)固定在Core 0。原因:WiFi协议栈和LwIP默认跑在Core 0,若上传任务也放Core 0会与协议栈抢占,但采集放Core 1可避免I2S中断抖动影响上传。实测中采集任务优先级设configMAX_PRIORITIES-2(如22),上传任务设5~8,队列用xQueueCreate深度4~8个音频块,块大小按20ms(16kHz/16bit单声道=640字节)。注意:I2S读用i2s_read阻塞模式,上传用非阻塞socket+select超时,避免TLS握手阻塞采集。实测双核比单核丢包率从2.1%降到0.3%,CPU占用Core0约45%、Core1约30%。关键坑:WiFi省电模式需关闭(esp_wifi_set_ps(WIFI_PS_NONE)),否则上传延迟抖动达200ms;队列满时采集端应丢最旧块而非阻塞。
mcuku 阿沐 · 2026-11-13

🧰 配套工具

📌 引脚功能查询