Forum: Mikrocontroller und Digitale Elektronik AVR ein Element aus Structur im EEPROM?


von Anton G. (antong)


Lesenswert?

Hallo,
kann ich eigentlich ein Element aus einer Struktur im EEPROM speichern?
Hintergrund:
Ich habe eine Globale Struktur in einer Header Datei. Das Programm ist 
sehr lang. Jetzt würde ich gerne ein Element aus der Struktur ins EEPROM 
speichern.

In einer Globalen Headerdatei habe ich z.B. folgendes stehen:
Der Sinn sei jetzt mal dahingestellt...
1
struct Person{
2
 uint8_t Name;
3
 uint8_t Alter;
4
 uint8_t Gruppe EEMEM; //Funktioniert nicht!
5
}
6
extern struct Person Gestern;
7
extern struct Person Heute;

Ohne das EEMEM funktioniert alles einwandfrei.
Ich möchte aber, dass die Gruppe immer im EEPROM gespeichert wird. Ich 
möchte nach dem aus und wieder einschalten des µC noch wissen, was in 
der Variablen "Gestern.Gruppe" gestanden hat.
Wie bekomme ich das hin?
Gruß Antong

von Georg G. (df2au)


Lesenswert?

Was funktioniert denn nicht?
Nur die Deklaration, dass die Gruppe im EEPROM liegt, bewirkt nicht, 
dass automatisch der Wert dort gelesen / geschrieben wird.

von Anton G. (antong)


Lesenswert?

Hallo Georg G.

Ich bekomme beim compilen die Meldung
"expected ':', ',', ';', '}' or '__attribute__' before 'EEMEM'"

Ich habe allerdings die deklaration auch in einer Headerdatei stehen. 
Ich habe dort auch kein "#include <avr/eeprom.h>" drin stehen. Mit 
klappt das aber auch nicht. Muß ich das auch in der Headerdatei 
einbinden?

Beschreiben und lesen mache ich ja mit eeprom_read_byte usw. Soweit 
komme ich aber erst gar nicht.

Wenn ich eine Variable in einer .c Datei initialsiere z.B.
"uint8_t eeFooByte EEMEM = 123;" dann kann ich die auch lesen und 
beschreiben. Bleibt auch nach aus und wieder einschalten vorhanden.

Ich habe also im Moment praktisch zwei Probleme.
Wie bekomme ich eine Globale Variable in einer Headerdatei ins EEPROM? 
Und die zweite Sache, was ist wenn das auch noch ein Element einer 
Struktur ist?

Gruß Antong

von Georg G. (df2au)


Lesenswert?

<avr/eeprom.h> muss eingebunden werden.

von Stefan E. (sternst)


Lesenswert?

Anton G. schrieb:
> Wie bekomme ich eine Globale Variable in einer Headerdatei ins EEPROM?

Indem du genauso vorgehst, wie bei jeder anderen Variablen auch. Die 
Definition mit Initialisierung kommt in eine C-Datei, und eine 
Deklaration in die Header-Datei.

Anton G. schrieb:
> Und die zweite Sache, was ist wenn das auch noch ein Element einer
> Struktur ist?

Geht nicht. Du kannst die Elemente einer Struktur nicht über 
verschiedene Speicher verteilen.

von Anton G. (antong)


Lesenswert?

Stefan Ernst schrieb:
> Anton G. schrieb:
>> Wie bekomme ich eine Globale Variable in einer Headerdatei ins EEPROM?
>
> Indem du genauso vorgehst, wie bei jeder anderen Variablen auch. Die
> Definition mit Initialisierung kommt in eine C-Datei, und eine
> Deklaration in die Header-Datei.
>
> Anton G. schrieb:
>> Und die zweite Sache, was ist wenn das auch noch ein Element einer
>> Struktur ist?
>
> Geht nicht. Du kannst die Elemente einer Struktur nicht über
> verschiedene Speicher verteilen.

Danke euch allen.
Dann muß ich das wohl noch mal komplett umstricken oder eine extra 
Variable dafür anlegen.

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.