EEPROM und float

Gast #3203061
Lesenswert?

Hallo,
wie sitze ich immer mal wieder auf dem Schlauch und getraue mir hier zu 
schreiben.
Ich möchte im EEPROM des ATMEL-Controllers einen float-Wert speichern 
der nachdem die Platine Stromlos war wieder abrufbar ist. Im Tutorial 
ist dies ja auch gut beschrieben:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Flie.C3.9Fkommawerte_lesen.2Fschreiben

Allerdings wird hier doch der Wert mit
1
float eeFloat EEMEM = 12.34f;
immer wieder nach dem Einschalten mit "12.34" überschrieben?

Wie kann ich eine "automatische" Adresse erhalten die nicht wieder neu 
mit einen Wert initialisiert wird?

Danke!
Gruß
hal
#3203084
Lesenswert?

hal schrieb:

> Allerdings wird hier doch der Wert mit
>
1
float eeFloat EEMEM = 12.34f;
> immer wieder nach dem Einschalten mit "12.34" überschrieben?

Nein.
EEMEM gekennzeichnete Variablen tauchen nicht als normale Variablen im 
Programm auf. So zu sagen.

Das EEMEM sorgt dafür, dass in der Verwaltung der Variablen im EEPROM 
Speicher reserviert wird und somit eine Speicheradresse zugewiesen wird. 
Mehr aber auch nicht.
Aus der Initialisierung generiert der Compiler/Linker ein eiges Hex-File 
welches ins EEPROM gebrannt werden kann und dann diesen Wert im EEPROM 
anlegt.

>
> Wie kann ich eine "automatische" Adresse erhalten die nicht wieder neu
> mit einen Wert initialisiert wird?

das passt schon alles so und funktioniert genau so, wie du es willst.
Gast #3203088
Lesenswert?

@Karl Heinz Buchegger
OK...aber warum erhalte ich für
1
float eeFooFloat_a EEMEM;
2
float value_a = 1.23, value_b;
3

4
eeprom_write_float(&eeFooFloat_a, value_a);
5

6
value_b = eeprom_read_float(&eeFooFloat_a);

für value_b immer 0?
Gast #3203101
Lesenswert?

So jetzt ja! Klar! Natürlich!
Wenn ich jedesmal mit dem Programmer das Programm neu übertrage werden 
natürlich die Standardwerte ins EEPROM geschrieben.
Um es zu testen muss ich den Kontroller Reseten bzw. vom Stromnetz 
trennen!

Danke, hat etwas gedauert

Gruß
hal
#3203117
Lesenswert?

Weiters solltest du dich mit der EESAV Fuse auseinandersetzen. Sie 
verhindert, dass der EEPROM Inhalt beim allgemeinen Chip Erase über ISP 
gelöscht wird. Und die meisten Brennprogramme machen beim Flashen eines 
neuen Programms erst mal einen Chip Erase. Woraufhin dein EEPROM Inhalt 
wieder flöten ist.

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