【发布时间】:2019-10-03 10:17:35
【问题描述】:
有如下结构:
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 结构布局将是相同的。我想确保这在任何情况下都不会中断,并且内存布局是相同的,并且不依赖于部分。
【问题讨论】:
-
如果你总是使用
some_config_type和sizeof(some_config_type)那么应该没有问题。结构布局不会因为您将结构从一个内存区域复制到另一个内存区域而改变。 -
是的,当我使用任何复制功能时,我总是在我的程序中使用 sizeof
-
是的,如果你使用
#pragma pack(1),你肯定数据会正确存储在内存中,还有更多:stackoverflow.com/questions/3318410/pragma-pack-effect -
一般来说,你会希望以降低对齐要求来订购结构,以确保最紧密的包装
-
@P__J__
#pragma pack不仅适用于微软编译器,我还在 gcc linux 和 gcc arm 工具链上进行了测试。在我的链接中是使用#pragma pack的解释
标签: c struct embedded alignment avr