EEPROM Variable ...

Gast #478181
Lesenswert?
• ▲
▼
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
Gast #478191
Lesenswert?
• ▲
▼
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?
Gast #478202
Lesenswert?
• ▲
▼
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?
Gast #478206
Lesenswert?
• ▲
▼
>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...).
#478334
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.