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
Füge sie nicht oben, sondern unten an - und schon werden sie (hoffentlich) weiter hinten in das EEPROM geschrieben.
Hallo, wenn es geht pack den kompletten EEPROM-Inhalt in eine struct dann kommt sicher nichts durcheinander. Stefan
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.
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.
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.