跳转至

说明

DMA + Dual Core — 双核分工:Core0 采集,Core1 处理

ESP32-S3 有两个核心。此架构将采集任务固定在 Core0,处理任务固定在 Core1,配合 DMA 实现最大吞吐。

算法直觉

双核分工

Core 0 ─── DMA + 采集(中断驱动)
        双缓冲切换
Core 1 ─── 数据处理 + 阈值检测 + MQTT 输出

两个核心不互相干扰

  • Core0 只管采:DMA 传输完成中断,切换缓冲,继续采
  • Core1 只管算:读取 Core0 填好的缓冲,做特征提取、阈值判断、结果输出

为什么不都在一个核?

单核上采和处理是"串行"的——采一会、算一会、再采一会。如果处理计算量大,采集的间隔就会不均匀(jitter),影响采样定时精度。

双核把采和算并行化,Core0 的采集定时完全不受 Core1 处理负载的影响。

数据流

Core0 (采集):
    DMA 中断 → 缓冲切换 → 通知 Core1

Core1 (处理):
    等待通知 → 读取缓冲 → 特征提取 → 阈值检测 → 输出

配置

#define TINY_MEASUREMENT_RT_DMA_DC_BUFFER_SIZE 256       // 每缓冲样本数
#define TINY_MEASUREMENT_RT_DMA_DC_PRODUCER_CORE 0       // Core0 采集
#define TINY_MEASUREMENT_RT_DMA_DC_CONSUMER_CORE 1       // Core1 处理

注意事项

什么时候选 Dual Core?

当其他两种架构都丢样时,这是最后的武器。在 ESP32-S3 上可以提供最高的采集吞吐量。

双核需谨慎分配资源

Core1 上如果有其他 WiFi/BLE 任务,可能与处理任务争抢 CPU。建议在 Core1 上只运行处理任务,其他网络任务留给 Core0。