5

是否可以创建一个不跨越 256 字节边界的数组?也就是说,各个数组项的地址仅在低字节中有所不同。这比保持数组对齐到 256 字节的要求更弱。我能想到的唯一解决方案是与 对齐next_power_of_two(sizeof(array)),但我不确定以这种方式出现的差距。

它是用于 AVR 微控制器的库,这将在中断处理程序中为我节省一些宝贵的指令。在库使用的大约 80 个字节的总静态内存中,应该具有此属性的数组是 54 个字节长。我正在寻找一种不会增加内存需求的方法。

我正在使用 avr-as gnu 汇编器和 avr-ld 链接器。

示例:如果数组从地址 0x00f0 开始,则在遍历数组时,高位字将从 0x00 变为 0x01。

我真的不在乎它是从地址 0x0100 还是从 0x0101 开始,只要它不越界。

4

2 回答 2

1

您只需要 64 字节对齐即可满足此要求,因此例如应该可以:

uint8_t a[54] __attribute__ ((aligned(64)));
于 2010-10-13T12:50:06.327 回答
0

我对 AVR 微控制器一无所知,但是,一般来说,静态变量通常放在可执行文件的数据部分中,并且由于您的静态内存要求很低,您只需要确保数据部分是 256字节对齐。(默认情况下可能是。在 x86 上,通常是。)检查链接器选项...

于 2010-10-29T19:42:20.220 回答