Hallo zusammen Ich hab mal eine Verständnisfrage. Ich möchte einen Abgleichwert (ein paar Bytes) im EEPROM ablegen und bei jedem Programmstart wieder abrufen ... uint8_t eeFooByte EEMEM; uint8_t myByte; myByte = 99; eeprom_write_byte(&eeFooByte, myByte); // schreiben Kann ich sicher sein, dass jeder Lesevorgang (also auch nach Power off) immer auf die richtige EEPROM Zelle (Adresse) zugreift. Oder anders gefragt ... bin ich gezwungen in diesem Fall mit absoluten EEPROM adressen zu arbeiten? myByte = eeprom_read_byte(&eeFooByte); // lesen Danke im Vorraus ... Gerhard
Ich kann die Frage nicht ganz nachvollziehen. Wenn Du eine Variable im EEPROM mit EEMEM deklarierst, dann legt der Linker die Variable ins EEPROM. Da die Variable einen Namen (eeFooByte) hat, wird bei einem Aufruf von eeprom_read_byte(&eeFooByte, myByte) natürlich auch auf genau diese Variable zugegriffen. Wie sollte es auch sonst sein? Oder meinst Du etwas Anderes?
Hi Johnny Nein, das war schon so gemeint. Beim RAM ist`s klar ... die Variablen existiert ja nur während der Laufzeit. Beim EEPROM bin ich mir nicht sicher ob die Adresse der Variablen beim nächsten Compilieren / Linken evtl. anders vergeben wird?
>Beim EEPROM bin ich mir nicht >sicher ob die Adresse der Variablen beim nächsten Compilieren / Linken >evtl. anders vergeben wird? Das kann schon passieren, wenn es zwischendurch eine Umdeklaration gibt. Irgendwie kann man angeblich aber auch feste Adressen für die EEPROM-Variablen vergeben (ich weiß nicht, wie es geht...).
Ich behelfe mir in solchen Fällen mit ein paar Defines. Wenn ich sowieso eeprom_read_byte und eeprom_write_byte benutzen muss, dann brauch ich auch keine EEMEM Variablen dafür. #define CONFIG_BYTE ((void*)1) #define CONFIG_1 ((void*)2) eeprom_write_byte( CONFIG_BYTE, myByte ); So bleibt jedes Byte im EEPROM dort wo ich es hin haben will. Aufpassen muss man nur, dass die Konstanten in der Größe richtig sind. Wenn CONFIG_1 ein int sein soll, dann ist die nächste verwendbare EEPROM Position die 4 Wer will kann da noch mit sizeof() vorbeugend etwas Sicherheit hineinbringen, bisher hatte ich allerdings mit diesem einfachen Schema noch keine Probleme.
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.