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