Ich habe ein Problem mit dem Speichern von Daten in einem EEPROM auf einem 16-Bit-Mikrocontroller von Fujitsu. Das Schreiben von Bytes in das EEPROM ist nicht das Problem, ich kann Daten byteweise schreiben und lesen, ohne Probleme zu haben.
Wir verwenden ein enum von dword
's, um verschiedene Variablen im EEPROM zu speichern, und sie sind alle 4 Bytes lang. Für jede Variable möchten wir bis zu diesen 4 Bytes Speicherplatz speichern. Das ist ziemlich schlecht, denn wenn ich nur eine Flagge (ein Bit) oder eine Variable, die nur ein Byte lang ist, speichern möchte, werden dennoch vier Bytes verwendet.
Der Grund, warum wir diese Vier-Byte-Technik verwenden, ist, damit wir wissen, auf welcher Adresse die Variable gespeichert ist, auf die ich zugreifen möchte. Das funktioniert in Ordnung, hat aber einige Nachteile.
Einer davon ist der verschwendete Platz, und ein weiteres Problem entsteht, wenn ich mit Strukturen arbeite.
Zum Beispiel habe ich eine Struktur wie
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;
und initialisiere sie wie:
static attenuator_info_t constinfo[_NUM_ATTENUATOR_WHICHONE_] = {...}
Mit dem Code, den wir derzeit verwenden, müssten wir jeden Wert einzeln speichern, wodurch die Struktur aufgebrochen wird. Ich möchte diese Struktur wirklich so speichern, wie sie ist (und einige mehr, die wir im Code haben).
Nach meinem Verständnis bräuchte ich dafür ein Dateisystem. Eine Google-Suche gab mir einige Beispiele wie das microFAT und so weiter. Das ist meiner Meinung nach zu übertrieben.
Das Speichern der Struktur mit sizeof und das Durchlaufen aller Bytes wären in Ordnung, aber wie gehe ich mit dem Problem um, zu wissen, wo sich die Strukturen im EEPROM befinden? Daher ist wahrscheinlich ein Dateisystem erforderlich. Gibt es nicht etwas Kleineres? Oder einen Trick? Die Variablen haben sowieso eine feste Länge. Deshalb frage ich mich, ob es einen einfachen Weg gibt, diese Strukturen zu speichern.
Ich hoffe, ich konnte mein Problem ausreichend erläutern.