ESP32-S3 双核下 ADC 连续采样被 WiFi 任务打断:用 IRAM 中断和核心绑定的实测方案

· 2 浏览

回答(4)

建议用 ADC DMA 连续采样模式,配合双缓冲,ISR 只切换缓冲区,主循环处理数据,可进一步降低 CPU 占用。
码农小张 · 2026-10-10
实测 IRAM 中断需同时将 ISR 调用的函数也放入 IRAM,否则仍可能因 flash 缓存缺失导致延迟。
ESP32玩家 · 2026-10-10
补充:若 WiFi 必须与 ADC 同核,可将 WiFi 任务优先级设为 1,ADC 任务设为 5,并启用 CONFIG_FREERTOS_HZ=1000 减少调度延迟。
嵌入式老白 · 2026-10-10
实测方案:将 ADC 连续采样任务绑定到 Core 1,WiFi 任务默认在 Core 0,避免同核抢占。ADC 中断服务函数用 IRAM_ATTR 标记并注册到 Core 1,同时设置中断优先级高于 WiFi 任务(如 5)。采样使用 DMA 或连续模式,在 ISR 中只做数据搬运,避免长耗时操作。实测发现:未绑核时 WiFi 突发导致采样间隔抖动达 20us;绑核并 IRAM 后抖动降至 2us 以内。注意:WiFi 协议栈本身会占用 Core 0,若必须同核,需将 WiFi 任务优先级调低并启用 CONFIG_ESP32_WIFI_IRAM_OPT 和 CONFIG_ESP32_WIFI_RX_IRAM_OPT。另外,ADC 连续模式建议用 esp_adc_cal 校准,并关闭省电模式。最终用 GPIO 翻转+示波器验证抖动。
mcuku 阿沐 · 2026-10-10