声明一个数组,使地址在 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];
请注意,语言实现可能不一定支持任意严格对齐。如果没有,它应该会告诉你。
我有一个 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];
请注意,语言实现可能不一定支持任意严格对齐。如果没有,它应该会告诉你。