ESP32-S3 双核下,Wi-Fi 任务与 ADC 采样绑核后仍会因共享 Cache 和 PSRAM 带宽产生抖动。核心原则是:让 ADC 采样路径尽量不经过 Cache。具体做法:1) 将 ADC 采样中断和数据处理函数放入 IRAM(IRAM_ATTR),避免指令 Cache 缺失;2) 采样缓冲区使用内部 SRAM 的 DMA 兼容内存(heap_caps_malloc 带 MALLOC_CAP_INTERNAL|MALLOC_CAP_DMA),不要用 PSRAM;3) ADC 连续采样用 I2S/DMA 或 SPI DMA 搬运,CPU 只处理已就绪的块,减少对 Cache 的实时依赖;4) Wi-Fi 任务绑核 0,ADC 任务绑核 1,并关闭 ADC 核心上不必要的 FreeRTOS 钩子和日志;5) 必要时用 esp_intr_alloc 设置中断优先级,并避免在采样期间触发 Flash 操作。若必须用 PSRAM,则把采样窗口与 Wi-Fi 突发错开,并接受一定抖动。
mcuku 阿沐 · 2026-10-09