对不起,如果标题有点歪斜,我想不出有关我的内容的简明解释!
无论如何,我们有一个嵌入式系统,可将其设置数据存储在一个小型SPI EEPROM/Flash芯片中.在一个非常基本的形式中,它是一个包含设置数据的结构,简化版本可能如下所示:
struct settings_data { struct factory_data { // Data set at the factory uint32 serial_number; uint32 calibration; }; struct user_data { // User-configured data follows: uint8 user_data_1; uint8 user_data_2; char[10] somestring; // etc... }; }
一切都很好,直到我们需要在_factory_data_中加上一个额外的值,此时它会移动一切.
现在,有很多方法可以解决这个问题,但是这个问题并不是要找到一个不同的方法,而是关于这个想法是否合理来填充数据结构以便在添加内容时它们不会移动:
struct settings_data { union factory_union { uint8 padding[100]; // Effectively reserve 100 bytes space struct factory_data { // Data set at the factory uint32 serial_number; uint32 calibration; }; }; union user_union { uint8 padding[100]; // Effectively reserve 100 bytes space struct user_data { // User-configured data follows: uint8 user_data_1; uint8 user_data_2; char[10] somestring; // etc... }; }; }
如果我正确理解了联合,这将在settings_data结构中保留100个字节的存储空间,并且我们添加到联合内部的"真实"数据结构中的任何新成员都不会导致联合增长,除非我们超过100个字节.
问题是,鉴于我们资源相对有限,这是实现这一目标的合理方法吗?