01
日志采集的痛点
传统日志采集(printf、串口轮询)对CPU占用率过高,实时任务被干扰。
CPU负载实时性
02
DMA基础概念
什么是DMA(直接存储器访问),如何在不经过CPU的情况下搬运数据。
原理数据搬运
03
DMA与CPU的协作模型
DMA传输完成后的中断通知机制,以及如何避免数据竞争。
中断同步
04
环形缓冲区设计
为什么日志采集需要环形缓冲区,核心原理(头指针、尾指针)。
缓冲区指针
05
双缓冲机制
双缓冲(Ping-Pong Buffer)如何解决DMA传输过程中的数据覆盖问题。
Ping-Pong防覆盖
06
DMA触发源配置
配置定时器或硬件事件触发DMA传输,实现周期性日志采集。
定时器触发
07
内存到内存的DMA传输
利用DMA将日志数据从采集缓冲区搬运到日志存储区。
M2M存储
08
外设到内存的DMA传输
以ADC或UART为例,配置外设数据直接通过DMA存入内存。
外设ADC/UART
09
DMA描述符链
使用链式DMA(Scatter-Gather)处理非连续内存块的日志采集。
Scatter-Gather链式
10
低优先级DMA通道
为什么日志采集要使用低优先级DMA通道,避免影响关键数据流。
优先级QoS
11
日志时间戳注入
在DMA传输完成中断中,为日志数据添加硬件时间戳。
时间戳中断
12
数据压缩预处理
在DMA搬运前,使用简单的RLE(游程编码)压缩日志数据。
RLE压缩
13
日志过滤机制
通过硬件比较器或软件标志位过滤无效日志。
过滤硬件比较
14
多通道日志采集
使用多个DMA通道同时采集不同外设(CAN、SPI、I2C)的日志。
多通道外设
15
DMA传输错误处理
总线错误、FIFO溢出等检测与恢复策略。
错误处理恢复
16
日志缓冲区水位线设计
设置高/低水位线,在缓冲区将满时触发批量写入。
水位线批量
17
非阻塞日志写入
将日志从DMA缓冲区写入Flash或SD卡,使用DMA+中断实现非阻塞。
非阻塞Flash
18
日志格式标准化
定义统一的日志头部(长度、类型、时间戳)便于解析。
格式头部
19
日志采集性能基准测试
如何测量DMA日志采集方案的CPU占用率和吞吐量。
基准测试吞吐量
20
与RTOS的集成
在FreeRTOS或RT-Thread中,将DMA日志采集封装为任务。
RTOSFreeRTOS
21
低功耗模式下的日志采集
MCU进入睡眠模式前,通过DMA继续采集关键日志。
低功耗睡眠
22
DMA日志采集的调试技巧
使用逻辑分析仪或DMA寄存器查看传输状态。
调试逻辑分析仪
23
日志数据完整性校验
DMA传输完成后,对日志数据块计算CRC校验。
CRC完整性
24
多核系统中的DMA日志采集
在AMP或SMP架构下,协调多个核的DMA日志采集。
多核AMP/SMP
25
日志采集的启动与停止控制
通过原子操作控制DMA的启动和停止,避免竞态条件。
原子操作竞态
26
DMA日志采集的配置参数优化
根据日志产生速率调整DMA缓冲区大小和传输粒度。
参数优化缓冲区
27
日志采集与系统安全
安全关键系统中,DMA日志采集如何避免破坏MPU配置。
MPU安全
28
日志采集的远程传输
通过以太网DMA或USB DMA将日志直接发送到上位机。
远程以太网
29
日志采集的自动化测试
编写Python脚本模拟日志产生,验证DMA采集方案的稳定性。
自动化Python
30
综合实战:完整日志采集系统
从DMA配置到日志存储再到上位机解析,构建低开销系统。
实战全流程