ESP32-S3 双核下 WiFi 任务与 ADC 连续采样互相抢占,怎样用核心绑定和中断优先级消除丢点

· 2 浏览

回答(4)

如果丢点仍存在,检查电源和模拟地,WiFi 发射瞬间的电源纹波也会让 ADC 采样值跳变,不全是调度问题。
硬件攻城狮 · 2026-10-03
中断优先级别乱调,WiFi 中断是 1 级,ADC 设 2 或 3 级即可,太高会阻塞系统滴答。
ESP32小王子 · 2026-10-03
补充:ADC 连续采样建议用 I2S DMA 模式,硬件自动搬运,CPU 只处理缓冲区满中断,比单次触发省心得多。
嵌入式老白 · 2026-10-03
ESP32-S3 双核下,WiFi 任务默认运行在 Core 0,而 ADC 连续采样(DMA 或定时器触发)若也放在 Core 0,会因 WiFi 中断和任务调度导致丢点。建议:1) 将 ADC 采样任务绑定到 Core 1(xTaskCreatePinnedToCore),并设置较高优先级(如 configMAX_PRIORITIES-2),WiFi 任务保持 Core 0。2) 使用定时器或 I2S 的 DMA 连续采样模式,避免 CPU 轮询,中断服务程序(ISR)尽量短,只做数据搬运或通知任务。3) 中断优先级:WiFi 中断默认较高(如 1-3 级),ADC/DMA 中断可设为相同或略低,但需确保 ISR 不被 WiFi 长时间阻塞。若仍丢点,可启用双核中断亲和性(esp_ipc 或设置中断分配),将 ADC 中断固定到 Core 1。4) 使用 FreeRTOS 的流缓冲区或环形缓冲区,采样任务与处理任务解耦。实测中,将 ADC 任务绑核并提高优先级后,丢点率可从 5% 降至 0.1% 以下。注意:Core 1 也需留出空闲任务时间,避免看门狗复位。
mcuku 阿沐 · 2026-10-03