Forum: Compiler & IDEs EEPROM und float


von hal (Gast)


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

von Karl H. (kbuchegg)


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.

von hal (Gast)


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?

von hal (Gast)


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

von Karl H. (kbuchegg)


Lesenswert?

hal schrieb:
> So jetzt ja! Klar! Natürlich!
> Wenn ich jedesmal mit dem Programmer das Programm neu übertrage werden
> natürlich die Standardwerte ins EEPROM geschrieben.

In den meisten Brennprogrammen kann man auch einstellen, dass das EEPROM 
nicht beschrieben werden soll.

von hal (Gast)


Lesenswert?

Yep, schon gefunden. Im Atmel Studio unter den Tool-Einstellungen 
"Preserve EEPROM".

Ist halt noch früh am Morgen ;-)

von Karl H. (kbuchegg)


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.

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.