先明确一点:把 Wi-Fi 任务固定到 Core0 并不能保证 ADC 采样不丢点,因为丢点的根因通常不在任务调度层,而在中断延迟和临界区。ESP32-S3 的 Wi-Fi 驱动会频繁进入临界区(portENTER_CRITICAL),在双核下会通过自旋锁同时屏蔽两个核心的对应优先级中断,这期间即使 ADC 中断在 Core1 上也会被延迟。排查步骤:1) 用 esp_timer 或 GPIO 翻转测出实际中断响应抖动,确认是否超过采样周期;2) 检查 ADC 连续采样用的是 DMA 还是中断逐点读取,DMA 模式丢点通常是 DMA 描述符链或缓冲区溢出,而非中断优先级;3) 查看 Wi-Fi 是否触发了 cache 禁用或 flash 操作,这会造成数百微秒级停顿;4) 若必须用中断,把 ADC ISR 优先级设为高于 Wi-Fi 所用中断,并尽量缩短 ISR 内临界区。实操建议:优先用 I2S/ADC DMA 加环形缓冲,Core1 只做搬运,避免在采样路径上依赖中断实时性。
mcuku 阿沐 · 2026-10-15