Hallo, kann mir jemand auf die Sprünge helfen? Ich möchte eine Struktur im EEPROM sichern und zur Konsistenz-Sicherung vor dem Sichern ein Byte auf 0xff, nach dem Sichern (bzw. zusammen mit der Struktur) dieses Byte auf 0 setzen (es heißt 'EE_Cons' in der Struktur, und ich gehe davon aus, daß die Funktion bzw. das Makro 'eeprom_write_block' von vorn nach hinten in dieser Reihenfolge sichert - ist es nicht so?). Mein Code (Teil eines größeren Programms): #define EE_ADDR 0 /* Start-Adresse im EEPROM */ struct { uint8_t EByte1,EByte2,EByte3,EByte4,EByte5; uint8_t EE_Cons; } ee; void save_ee(void) { eeprom_write_byte((void *)(EE_ADDR+offsetof(struct ee,EE_Cons)),0xff); ee.EE_Cons=0; eeprom_write_block(&ee,(void *)EE_ADDR,sizeof(ee)); } Die Addition von 'offsetof' zum Zeiger im EEPROM-Adreßraum macht nun Probleme; ich habe schon andere Formulierungen versucht, aber alles scheitert. Der Compiler bringt die Fehlermeldung "error: dereferencing pointer to incomplete type" Kann mir jemand einen Hinweis geben, was ich falsch mache? Danke schon mal. Günter
Günter R. wrote: > scheitert. Der Compiler bringt die Fehlermeldung > > "error: dereferencing pointer to incomplete type" Das 'incomplete type' weist darauf hin, dass der Compiler zwar weiss, dass es eine 'struct ee' gibt, aber nichts über die Internals weiss. Leider ist die Fehlermeldung leider daneben, denn mittels struct { uint8_t EByte1,EByte2,EByte3,EByte4,EByte5; uint8_t EE_Cons; } ee; hast du eine Variable namens ee erzeugt, die struct selbst hat aber keinen Namen (eine anonyme struct). Gib der struct selbst einen Namen, wenn du damit arbeiten willst: struct MyStruct { ... };
Kleiner Nachtrag: es muß wohl eeprom_write_byte((uint8_t *)(EE_ADDR+offsetof(struct ee,EE_Cons)),0xff); heißen (nicht mit "void"). Aber die Fehlermeldung bleibt gleich.
Hallo, Karl Heinz, danke! Dein Tip hat's gebracht. Mit einem Typnamen funktioniert das nun. Vielen Dank für diese schnelle Hilfe. Günter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.