【发布时间】:2012-07-19 06:03:14
【问题描述】:
我在富士通 16 位微控制器的 EEPROM 中存储数据时遇到问题。 向 EEPROM 写入字节没有问题,我可以按字节写入和读取数据。
我们使用dwords 的枚举将不同的变量存储在 EEPROM 中,它们都是 4 字节长。对于每个变量,我们最多要存储 4 个字节的空间。这很不好,因为当我只想存储一个标志(一位)或一个只有一个字节长的变量时,它仍然会占用四个字节。
我们使用这种四字节技术的原因是我们知道我想要访问的变量存储在哪个地址上。这工作正常,但它有很多缺点。
一个是浪费的空间,另一个是我使用结构时出现的问题。
例如我有一个类似的结构
typedef struct {
attenuator_whichone_t attenuator;
char* attenuatorname;
servo_whichone_t associated_servo;
ad_ad7683_whichone_t associated_adconverter;
word item_control;
word item_mode;
word item_position;
} attenuator_info_t;
并像这样初始化它:
static attenuator_info_t constinfo[_NUM_ATTENUATOR_WHICHONE_] = {...}
使用我们现在使用的代码,我们需要单独保存每个值。 因此打破了结构。我真的很想按原样存储该结构。 (以及我们在代码中的更多内容)。
据我了解,我需要一个文件系统。谷歌搜索给了我一些例子,比如microFAT 等等。在我看来,这太过分了。
使用 sizeof 存储结构并遍历所有字节就可以了,但是,我该如何处理知道结构在 EEPROM 中的位置的问题呢? 所以可能需要某种文件系统。没有更小的东西吗?还是什么诡计?无论如何,变量都是固定长度的。所以这就是为什么我想知道是否有一些好的和简单的方法来存储这些结构。
我希望我能详细说明我的问题。
【问题讨论】:
-
我想我刚刚找到了答案。在选择标签时,我发现了这一点:stackoverflow.com/questions/3551824/… 这可能对我有用。我试试看。
-
如果您担心将 4 个字节转换为 1 个字节,文件系统将非常浪费,文件系统可能需要在文件中的每个块中刻录 2048 或 4096 或更多字节,您很少没有数万到数千个未使用的字节。跨编译域使用结构也是一个坏主意(将结构指向内存/文件等)。固定的 4 字节实体很好,将结构分解成单独的 4 字节实体很好,然后在它周围添加你发现的标记的东西很好。
-
使用 eeprom 或闪存作为文件系统很糟糕,它们会磨损(是的,当前的商业产品是一次性的,您必须在磨损时不断重新购买它们、mp3 播放器、拇指驱动器, ETC)。理想情况下,您希望对它们进行一次编程,然后永远阅读,也许偶尔会添加一些东西。进行系统工程,以便了解产品的生命周期。随着它们的磨损,写入时间会变得更长,因此您的系统工程也会在那里。
标签: c microcontroller eeprom