Hallo alle zusammen, Ich verwende gerade zum ersten mal ein externes EEPROM. Bytes schreiben und auslesen funktioniert auch bereits. Das ich bei uint16_t mehrere bytes im EEPROM belegen muss ist mir klar. SO jetzt meine Frage: Gibt es eine Möglichkeit, dass die Speicherplatzzuweisung automatisch erfolgt oder muss ich mir hier selbst den Kopf zerbrechen? Schön wäre, wenn man wie bei internen EEPROM bei ATMEL Controllern eine Möglichkeit wie "EMEMM" hätte. Mein verwendeter Controller ist ein STM32f4.
Es gibt die Möglichkeit sich eine Struktur an zu legen:
struct EE_Data {
uint8_t VersionDer_EEPROM_Struktur; // Für Update wichtig
unit8_t DatenEEPROMGueltig; // Zahl was anderes als 0xFF
uint16_t Parameter1;
uint16_t Parameter2;
uint8_t Parameter3;
uint8_t Parameter4;
uint8_t Parameter5;
uint8_t Parameter6;
uint32_t Parameter7;
uint32_t Parameter8;
int32_t Parameter9;
uint8_t ParamTable1[256];
};
Und dann schreibst Du diese komplette Struktur in das EEPROM, bzw liest
diese wieder aus.
Beim Schreiben musst Du aufpassen, da das EEPROM nur maximal eine
PageSize auf einmal schreiben kann und danach eine kurze Wartezeit
benötigt. Da musst Du eine Schleife aufbauen, die Erkennt wie viele
Bytes deine Struktur groß ist (sizeof(EE_Data)).
Ich habe bei einem anderen Projekt je Page nur eine einzige Variable abgelegt. Dabei wird eine Zahl für "DatenEEPROMGueltig" sowie die Zahl und die ~Zahl gespeichert. Damit weiß ich dass die Variable einmal gespeichert worden ist und dass diese Zahl auch gültig ist. Je nach dem was für Parameter man ablegen möchte gibt es unterschiedliche Methoden. Für meine Anwendung kam daher ein EEPROM 24LC512 zum Einsatz, das hat eine PageSize von 16 Byte, wovon ich 12 Byte nutze und 32 Pages, da mir 32 Parameter dicke reichen. Da das EEPROM eine Schreib-Rate von 1Mio Zyklen hat, kann ich jeden einzelnen Parameter 1 Mio mal schreiben. Bei der ersten Variante kann man nur alle Parameter 1 Mio mal schreiben - das ist der Unterschied.
Markus M. schrieb: > Es gibt die Möglichkeit sich eine Struktur an zu legen. Finde ich schon einen guten Ansatz. Aber das heißt ja dann auch, dass ich beim schreiben jedes mal die gesamte Struktur schreiben muss.
Matthias F. schrieb: > Markus M. schrieb: >> Es gibt die Möglichkeit sich eine Struktur an zu legen. > > > Finde ich schon einen guten Ansatz. > Aber das heißt ja dann auch, dass ich beim schreiben jedes mal die > gesamte Struktur schreiben muss. Warum? Du liest zuerst Pageweise die Daten noch mal aus und vergleichst mit den Daten in der Struktur. Wird ein Unterschied festgestellt schreibst dann nur diese Page neu. Spart Zeit und schon den EEprom. Macht aber mM nach nur Sinn wenn die Struktur klein bleibt - belegt ja schließlich RAM in entsprechender Größe. Sascha
> Macht aber mM nach > nur Sinn wenn die Struktur klein bleibt - belegt ja schließlich RAM in > entsprechender Größe. Ja ich denke, dass die Datenmengen nicht allzu groß werden. Das mit der Struktur ist auch momentan die beste Möglichkeit, welche mir einfallen würde. Vor allem uint8_t VersionDer_EEPROM_Struktur; // Für Update wichtig unit8_t DatenEEPROMGueltig; // Zahl was anderes als 0xFF finde ich sehr sinnvoll. Allerdings hatte ich immer noch gehofft eine Möglichkeit zu finden, dass ich mich nicht selbst im die Adressen kümmern muss. Hier muss ich jetzt quasi (zumindest für jede Page) mir selbst die Gedanken über die Adressierung machen. Wahrscheinlich werde ich 2 gleiche Strukturen erstellen. In der einen Speichere ich mein eigentlichen Werte und in der anderen die dazugehörige Adresse.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.