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

Declare an array so that the address is aligned on 16 byte boundaries

我有一个 uint8 数组,我需要将这个数组的指针传递给 DMA,一次传输 16 个字节。因此,要求数组地址是 16 字节对齐的,如 32'hxxxxxx00 - 最后两个地址数字为 0。 我声明一个全局数组如下:

u8 R00_PRO_ADDR[0x64000]    __attribute__ ((aligned(16)));// 16 bytes address aligned

但是,在运行时,我看到数组的地址是32'hxxxxxxx0。我也尝试做 (aligned(128)) 但得到相同的结果。

这是特定于 Vivado SDK Cortex A53

Declare an array so that the address is aligned on 16 byte boundaries

您可以使用标准关键字alignas。无需使用语言扩展:

alignas(16) u8 R00_PRO_ADDR[0x64000];

So, the requirement is that the array address is 16 byte aligned, like 32'hxxxxxx00 - the last two address numbers to be 0.

您的要求很复杂。如果你需要这个,那么地址需要在 256 字节边界上对齐:

alignas(256) u8 R00_PRO_ADDR[0x64000];

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