[APM32F4] 极海 APM32 的 C 语言技巧:DMA 缓冲区与结构体对齐实践

[复制链接]
2|1
在用 C 语言开发极海 APM32 系列(Cortex-M 内核)时,和内存、DMA 相关的几个坑比较典型:

1. DMA 的源/目标缓冲区地址和长度要符合外设要求,使用局部数组时注意别让它落在栈上被回收,建议用静态或全局缓冲区。

2. 结构体用于通信报文或 Flash 存储时,编译器会按成员自然对齐插入填充字节,实际占用比成员之和更大;协议对字节布局敏感时要显式逐字节序列化,不要直接强转结构体指针。

3. 用 union 做字节与字之间的转换很方便,但要确认大小端与协议一致,小端模式下多字节字段顺序要额外处理。

4. 用 memcpy 搬运外设数据时,注意源地址是否支持字节访问,部分外设寄存器必须按字访问。

5. 中断与 DMA 完成标志配合时,全局标志建议用 volatile 修饰并按需加内存屏障。

以上,供参考。
AdaMaYun 发表于 2026-9-19 16:55 | 显示全部楼层
DMA缓冲建议用__attribute__((aligned(4)))对齐,结构体按需加packed防填充,确保外设首地址对齐要求,避免总线字节访问异常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

435

主题

3681

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部
0