说明¶
DMA + Dual Core — 双核分工:Core0 采集,Core1 处理
ESP32-S3 有两个核心。此架构将采集任务固定在 Core0,处理任务固定在 Core1,配合 DMA 实现最大吞吐。
算法直觉¶
双核分工¶
两个核心不互相干扰:
- Core0 只管采:DMA 传输完成中断,切换缓冲,继续采
- Core1 只管算:读取 Core0 填好的缓冲,做特征提取、阈值判断、结果输出
为什么不都在一个核?¶
单核上采和处理是"串行"的——采一会、算一会、再采一会。如果处理计算量大,采集的间隔就会不均匀(jitter),影响采样定时精度。
双核把采和算并行化,Core0 的采集定时完全不受 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。