AVR ein Element aus Structur im EEPROM?

OP #2808448
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
OP #2808506
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
#2808524
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.
OP #2808666
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.