[技术问答] 为什么PDMA送出的数据内容,会发生位移现象?

[复制链接]
1260|7
 楼主| powerantone 发表于 2022-2-23 15:28 | 显示全部楼层 |阅读模式
当来源或目标的地址设为数组起始地址时,用户必须检查数组起始地址是否为字节(word)对齐。

以下例buffer起始地址为0x2000_0039,因内存排序为编译程序决定,会有非字节对齐的情况发生。

unsigned int test2;
unsigned char test1;
unsigned char buffer[100];

FAQ117_1.png

当PDMA来源或目标的地址设定成buffer(0x2000_0039),PDMA的硬件配置会以字节存取(0x2000_0038)。
假设使用PDMA加UART传送数据时,将会送出0x01, 0x03…,而不是从0X03开始传送。

针对内存放置为非对齐字节的状况,可以使用aligned (4),让数组对齐内存中的字节
unsigned char buffer[100] __attribute__ ((aligned (4)));
数组buffer的起始地址会以4个byte的方式对齐摆放。

FAQ117_2.png

当PDMA来源或目标的地址设定成buffer(0x2000_003C),已有字节对齐。假设使用PDMA加UART传送数据时,将会从0X03开始传送。

mutable 发表于 2022-2-25 09:39 | 显示全部楼层
应该不会吧,虽然用的少,但是用过的,没发现有这个问题
tpgf 发表于 2022-3-8 09:36 | 显示全部楼层
请问什么是PDMA啊
qcliu 发表于 2022-3-8 10:02 | 显示全部楼层
每个数据都是这个现象吗
drer 发表于 2022-3-8 10:11 | 显示全部楼层
每次都是固定的位数吗
nawu 发表于 2022-3-8 10:19 | 显示全部楼层
是哪种对齐模式啊
zljiu 发表于 2022-3-8 10:28 | 显示全部楼层
是不是缓存读取有问题啊
tfqi 发表于 2022-3-8 10:40 | 显示全部楼层
普通模式发生偏移吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

680

主题

4056

帖子

4

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