我有一个uint8数组,我需要将该数组的指针传递给DMA,DMA一次传输16个字节。因此,要求数组地址是16字节对齐的,比如32'xxxxxx00——最后两个地址号是0。我声明一个全局数组如下:
u8 R00_PRO_ADDR[0x64000] __attribute__ ((aligned(16)));// 16 bytes address aligned
然而,在运行时,我看到数组的地址是32'xxxxxxx0。我也尝试过(对齐(128((,但得到了相同的结果。
这是Vivado SDK Cortex A53 特有的
声明一个数组,使地址在16字节边界上对齐
您可以使用标准关键字alignas
。无需使用语言扩展:
alignas(16) u8 R00_PRO_ADDR[0x64000];
因此,要求数组地址是16字节对齐的,如32'xxxxxx00-最后两个地址号为0。
您的需求参差不齐。如果你需要这个,那么地址需要在256字节的边界上对齐:
alignas(256) u8 R00_PRO_ADDR[0x64000];
请注意,语言实现可能不一定支持任意严格的对齐。如果没有,它应该告诉你。