声明一个数组,使地址在16字节的边界上对齐



我有一个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];

请注意,语言实现可能不一定支持任意严格的对齐。如果没有,它应该告诉你。

最新更新