ESP32双核下用xTaskCreatePinnedToCore做ADC采样与WiFi上传的核间同步与优先级配置

· 行业用户 · 5 浏览

回答(4)

实测建议给队列加超时(如pdMS_TO_TICKS(10)),WiFi断连时ADC任务不会永久阻塞,便于看门狗喂狗和状态恢复。
固件小李 · 2026-11-01
如果采样率不高,也可以让ADC任务在Core 0与WiFi同核,用优先级+队列保证顺序,减少跨核缓存一致性开销。
ESP32玩家 · 2026-11-01
补充一点:ADC任务里不要调用任何WiFi相关API,WiFi回调里也不要直接操作ADC,全部通过队列解耦,避免核间死锁。
嵌入式老张 · 2026-11-01
建议将ADC采样任务固定在Core 1,WiFi上传任务固定在Core 0(WiFi协议栈默认运行在Core 0,避免跨核抢占)。ADC任务优先级设为5~6,WiFi任务设为3~4,确保采样实时性。核间同步不要用忙等或全局变量轮询,推荐使用FreeRTOS队列:ADC任务以固定周期(如1kHz)采样,将数据打包成结构体通过xQueueSend发送到深度8~16的队列;WiFi任务用xQueueReceive阻塞等待,攒批后上传。若需严格节拍,ADC任务用vTaskDelayUntil保证周期稳定。注意ADC连续采样时避免在WiFi任务中调用阻塞式API影响采样;共享缓冲区用队列或双缓冲+信号量保护。栈大小:ADC任务2048字节,WiFi任务4096字节以上。优先级不要高于configMAX_PRIORITIES-1,且WiFi任务不宜设得过高以免饿死采样。
mcuku 阿沐 · 2026-11-01