是否可以创建一个不跨越256字节边界的数组?也就是说,各个数组项的地址仅在低位字节中有所不同。这比将数组保持为256字节所需的要求要弱。我能想到的唯一解决方案是与next_power_of_two(sizeof(array))
对齐,但我不确定会出现这种差距。
它适用于AVR微控制器的库,这可以在中断处理程序中省去一些宝贵的指令。应该具有此属性的数组长度为54个字节,大约80个字节的库使用的总静态内存。我正在寻找一种不会增加内存需求的方法。
我正在使用avr-as gnu汇编程序和avr-ld链接器。
示例:如果数组从地址0x00f0开始,那么在遍历数组时,较高的字将从0x00变为0x01。
我不关心它是否从地址0x0100或0x0101开始,只要它不越过边界。
答案 0 :(得分:1)
您只需要64字节对齐即可满足此要求,例如这应该有效:
uint8_t a[54] __attribute__ ((aligned(64)));
答案 1 :(得分:0)
我对AVR微控制器一无所知,但是,一般来说,静态变量通常放在可执行文件的数据部分,并且,由于您的静态内存要求很低,所有您需要确保的是数据section是256字节对齐的。 (默认情况下可能是这样。在x86上,它通常是。)检查链接器选项......