eeprom mit eemem: Kann ich da was nachträglich ändern?

Gast #2434646
Lesenswert?

Hallo,

ich nutze auf einem Atmega mit AVR-GCC eemem, um Werte im eeprom 
abzulegen. Nun sollen nachträglich ein paar Werte hinzu kommen. Wenn ich 
nun oben ein paar neue "eemem-Variablen" deklariere, befürchte ich, dass 
dadurch das eeprom-Layout durcheinander Gerät und somit die bisher dort 
abgelegten Daten weg sind.

Ist das richtig?
Kann man das verhindern, oder müsste man sich dafür selbst um die 
eeprom-Verwaltung kümmern?

Danke & Gruß,
Chris
#2435965
Lesenswert?

Bei mir hat sich folgendes Verfahren bewährt:
Alle Variablen in eine Struct. Als erstes in der Struct ein Header, der 
eine Versionsnummer (1 Byte) und sie Länge der Struct (ein Byte) 
enthält. Die Struct wird einmal im EEMEM angelegt (aber nicht 
initialisiert) und einmal initialisiert im PROGMEM. Zu Beginn wird in 
der main eine Funktion EepromInit() aufgerufen. Diese geprüft, ob der 
Header im Eeprom und im Flash übereinstimmen. Wenn nicht, wird vom Flash 
ins Eeprom kopiert.
So startet man immer mit sinnvollen Werten und überschreibt sich nicht 
unnötig die eventuel schon manuell verstellten Werte.
Und wenn man das Programm über einen Bootloader überträgt, muss man sich 
über die Eeprom-Daten auch keine Gedanken machen.
Gast #2436214
Lesenswert?

So wirklich pauschal läßt sich da nichts sagen. Es kommt darauf an, was 
bisher wie gemacht wurde. Es macht natürlich einen enormen Unterschied, 
ob auf das EEPROM über absolute Adressen (z.B. 0xA5) zugegriffen wird 
oder über relative (&variable + 16). Davon hängt ab, wie das Problem zu 
lösen ist. Sprich: Hat der Compiler das Sagen im EEPROM oder der 
Programmierer.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren