Forum: Compiler & IDEs Problem mit Struczur in Eeprom zu schreiben!


von der kleine Nils (Gast)


Lesenswert?

Hallo Leute
habe ein kleines Problem mit folgender Structur!
1
typedef  struct // 76 Byte
2
{
3
  uint8_t adress;        
4
  uint8_t var1;
5
  uint8_t var2;
6
  uint8_t var3;
7
  uint8_t dummy[70];
8
  unsigned int crc;
9
}config;
10
11
config local_config;
12
config Eeprom_config EEMEM;

ich möchte jetzt die structur local_config ins EEprom speichern und 
wollte mich an diesen Trend halten!

Beitrag "Re: EEPROM Struct mit read und write block kopieren?"
1
 eeprom_write_block(  & local_config.config,& Eeprom_config.config,sizeof( local_config.config) );

leider bekomme ich folgende Fehlermeldung!

'config' has no member named 'config'

Was mache ich falsch?

von Detlef K. (adenin)


Lesenswert?

der kleine Nils schrieb:
> Was mache ich falsch?

Du benutzt local_config.config und Eeprom_config.config

von der kleine Nils (Gast)


Lesenswert?

im Beispiel: https://www.mikrocontroller.net/topic/goto_post/1838895
wird auch RAM_Data.Foo verwendet

Was übersehe ich
Danke für Eure hilfe

von Falk B. (falk)


Lesenswert?

@ der kleine Nils (Gast)

>'config' has no member named 'config'

Das ist auch so.

>Was mache ich falsch?

C-Grundlagen. Eher so
1
eeprom_write_block( &local_config, &Eeprom_config, sizeof(local_config) );

Besser ist der config_t für den typdef, daran erkennt man einen Typ.
Macht die libc vom avr gcc auch so.

von der kleine Nils (Gast)


Lesenswert?

Danke
Aber was ist im Beispiel anders?
Würde es gern verstehen!
Danke für die kompetente Hilfe

von Detlef K. (adenin)


Lesenswert?

der kleine Nils schrieb:
> Danke
> Aber was ist im Beispiel anders?

Das benutzt local_config und Eeprom_config

von der kleine Nils (Gast)


Lesenswert?

1
eeprom_write_block( & RAM_Data.Foo,
2
                      & EEP_Data.Foo,
3
                      sizeof( RAM_Data.Foo ) );
so sieht das Beispiel aus was ist hier anders?
Sorry ich sehe vorlauter Wald den Christbaum nicht!

von Uwe (Gast)


Lesenswert?

Hallo der kleine Nils !
Du kannst nur über den Punkt "." auf Elemente in der Stuktur zugreifen, 
die auch definiert sind.

Zu deiner Frage |.config| ist kein Element von typedef struct { .. } 
config;

Wie ein anderer schon schrieb, das sind C Grundlagen, die solltest Du 
dir vorab aneignen.

von der kleine Nils (Gast)


Lesenswert?

1
eeprom_write_block( & RAM_Data.Foo,
2
                      & EEP_Data.Foo,
3
                      sizeof( RAM_Data.Foo ) );
so sieht das Beispiel aus was ist hier anders?
Sorry ich sehe vorlauter Wald den Christbaum nicht!

Also ist das obige Beispiel Falsch!
Foo müsste klein geschrieben sein!
Oder?

von Detlef K. (adenin)


Lesenswert?

der kleine Nils schrieb:
> eeprom_write_block( & RAM_Data.Foo,
>                       & EEP_Data.Foo,
>                       sizeof( RAM_Data.Foo ) );
> so sieht das Beispiel aus was ist hier anders?
> Sorry ich sehe vorlauter Wald den Christbaum nicht!

Was da anders ist:
Es war einmal ein Struct mit Namen EEP_Data.
Und das enthielt ein Member Namens Foo.
Und diese Foo sollte eines Cycles in den EEPROM geschickt werden, zur 
Großmutter, die da wegen Steuerhinderziehung in einer Speicherzelle 
saß...

Du hast versucht einen Member namens config zu speichern, den Du 
garnicht hast.
Wenn Du etwas speichern willst, solltest Du aber auch groß genug sein, 
um zu wissen, was Du speichern willst.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Detlef Kunz schrieb:
> Was da anders ist:

Neben der sehr schönen Erläuterung:

Das Beispiel speichert ein Element einer Struktur im EEPROM, aber 
nicht die ganze Struktur.

Also macht das Beispiel was anderes, als das, was Du erreichen willst, 
denn Du willst ja die komplette Struktur speichern, und nicht nur ein 
Element davon.

Hast Du schon mal ein C-Buch gesehen?

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.