富士通 16 ビット マイクロコントローラの EEPROM にデータを格納する際に問題があります。EEPROM へのバイトの書き込みは問題ではありません。問題なくバイト単位でデータを読み書きできます。
s の列挙型を使用してdword
さまざまな変数を EEPROM に格納していますが、それらはすべて 4 バイト長です。変数ごとに、最大 4 バイトのスペースを格納したいと考えています。フラグ (1 ビット) または長さが 1 バイトしかない変数のみを格納したい場合でも、4 バイトを使用するため、これはあまり良くありません。
この 4 バイト手法を使用する理由は、アクセスしたい変数が格納されているアドレスを知るためです。これは問題なく機能しますが、かなりの欠点があります。
1 つは無駄なスペースで、もう 1 つは構造体を扱うときに発生する問題です。
たとえば、次のような構造体があります
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_] = {...}
現在使用しているコードでは、すべての値を個別に保存する必要があります。したがって、構造をバラバラに壊します。その構造をそのまま保存したいのです。(そして、コードにさらにいくつかあります)。
私の理解では、そのためにはファイルシステムが必要です。Google で検索すると、 microFAT などの例がいくつか見つかりました。これは、私の意見では、やり過ぎです。
sizeof を使用して構造体を保存し、すべてのバイトを反復処理することは問題ありませんが、構造体が EEPROM のどこにあるかを知るという問題をどのように処理すればよいでしょうか? そのため、何らかのファイル システムが必要になる可能性があります。もっと小さいのはないの?それとも何かのトリック?とにかく変数は固定長です。そのため、これらの構造体を格納するための素晴らしく簡単な方法があるかどうか疑問に思っていました。
私の問題を十分に詳しく説明できれば幸いです。