Gus*_*avo 0 c embedded struct avr alignment
有以下结构:
typedef struct {
uint8_t val1;
uint16_t val2;
}some_config_type;
some_config_type EEMEM config = {
.val1 = 20,
.val2 = 2000
};
Run Code Online (Sandbox Code Playgroud)
该配置存储在eeprom内存中,我想从中加载它。我不确定avr gcc或C中是否有共同的规则,当我使用eeprom_read_block复制到另一个内存部分ram时,它保证了bot结构的布局是相同的。我想确保这在任何情况下都不会中断,并且内存布局是相同的,而不取决于部分。
AVR是8位MCU,因此就CPU而言,它没有对齐要求。struct此特定系统上不应有填充。
闪存和EEPROM可能具有与其存储扇区有关的对齐要求,但仅与写入这些区域的驱动程序有关。它不会影响编译器的分配方式struct。
我不确定avr gcc或C中是否有共同的规则,当我使用eeprom_read_block复制到另一个内存部分ram时,它保证了bot结构的布局是相同的。
是的,无论存储在何处,结构在程序中始终具有相同的内存布局。这是由C标准保证的。
RAM和EEPROM可能有不同的对齐要求,但是没有“线下魔术”处理-在编写闪存/ EEPROM驱动程序时,对于这种情况,您必须手动处理。