当来源或目标的地址设为数组起始地址时,用户必须检查数组起始地址是否为字节(word)对齐。
以下例buffer起始地址为0x2000_0039,因内存排序为编译程序决定,会有非字节对齐的情况发生。
unsigned int test2; unsigned char test1; unsigned char buffer[100];
当PDMA来源或目标的地址设定成buffer(0x2000_0039),PDMA的硬件配置会以字节存取(0x2000_0038)。 假设使用PDMA加UART传送数据时,将会送出0x01, 0x03…,而不是从0X03开始传送。
针对内存放置为非对齐字节的状况,可以使用aligned (4),让数组对齐内存中的字节 unsigned char buffer[100] __attribute__ ((aligned (4))); 数组buffer的起始地址会以4个byte的方式对齐摆放。
当PDMA来源或目标的地址设定成buffer(0x2000_003C),已有字节对齐。假设使用PDMA加UART传送数据时,将会从0X03开始传送。
|