Forum: Compiler & IDEs Frage zu AVR EEPROM


von kalle (Gast)


Lesenswert?

Ich verstehe den Abschnitt zum EEPROM im Tutorial nicht ganz:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM
1
uint8_t eeFooByte EEMEM = 123;

Steht der Wert 123 jetzt im RAM oder im EEPROM oder beides?

von Johannes M. (johnny-m)


Lesenswert?

kalle wrote:
> Steht der Wert 123 jetzt im RAM oder im EEPROM oder beides?
Im EEPROM. Und nur da. (Vorausgesetzt, Du schickst beim Programmieren 
die .eep-Datei mit)

von kalle (Gast)


Lesenswert?

Danke und aha, also ist eeFooByte nur die vom Compiler vergebene Adresse 
im EEPROM.

Aber was mache ich, wenn ich einmal einen Anfangswert im EEPROM ablegen 
will, der aber anschließend nur vom Programm geändert werden soll und 
durch ein neu-flashen nicht wieder mit 123 überschrieben werden soll?

Einmal Flashen und dann die Fuses so setzen, dass die Initialisierung 
nicht übertragen wird?

von Johannes M. (johnny-m)


Lesenswert?

kalle wrote:
> Danke und aha, also ist eeFooByte nur die vom Compiler vergebene Adresse
> im EEPROM.
Nicht ganz. Erstens ist eeFooByte keine Adresse, sondern ein 
Variablenname, weshalb bei Zugriffen auf die Variable mit den 
entsprechenden Funktionen auch der Adressoperator "&" verwendet werden 
muss, um an die Adresse heranzukommen. Außerdem vergibt der Compiler 
keine Adressen, das macht der Linker.

> Aber was mache ich, wenn ich einmal einen Anfangswert im EEPROM ablegen
> will, der aber anschließend nur vom Programm geändert werden soll und
> durch ein neu-flashen nicht wieder mit 123 überschrieben werden soll?
Dann darfst Du das EEPROM beim Programmieren eben nicht jedes Mal neu 
schreiben. Du könntest nach dem ersten Programmieren die EESAVE-Fuse 
setzen, um die Inhalte zu behalten.

von kalle (Gast)


Lesenswert?

Vielen Dank für die Hilfe!

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
Noch kein Account? Hier anmelden.