Wie schreibe ich eine struct ins EEPROM

Gast #362942
Lesenswert?
• ▲
▼
Hallo da draußen,

ich habe eine struct aus 3 arrays definiert, die ich mit
eeprom_write_block(...) ins EEPROM (des ATMega128) ab Adresse 0
schreiben möchte, und natürlich auch wieder auslesen möchte.

Da, wo im folgenden Code die ??? stehen, habe ich mein Problem: wie
finde ich das 1. Element der struct ?

Danke im voraus !

Otto

/**** eeprom_handling.c   begonnen 5.3.06  OR  *****/

#include <avr/eeprom.h>

typedef struct
{
  uint8_t format_delay_control [ 3 ] ;
  uint8_t  chroma_gain_control [ 3 ];
  uint8_t  chroma_control [ 3 ];
} eeprom_struct ;

#define eeprom_struct.format_delay_control = {0x12, 0x0F, 0x0E} ;
#define eeprom_struct.chroma_gain_control = {0x13, 0x0F, 0x0E } ;
#define eeprom_struct.chroma_control =  {0x24, 0x0F, 0x0E  } ;

void eeprom_write ( void )
{
eeprom_write_block ( ??? , 0  ,  sizeof ( eeprom_struct ) ) ;
}
#362943
Lesenswert?
• ▲
▼
> 3 arrays definiert

Du hast gar nichts definiert. Du hast nur eine Menge
Zeugs deklarariert. D.h. Du hast dem Compiler gezeigt
wie eine Variable aussehen würde, wenn Du eine anlegen
würdest. Aber Du hast keine Variable angelegt.

Irgendwo wirst Du die aber brauchen

eeprom_struct Configuration;

und dann kannst Du die natuerlich als Quelle fuer den
eeprom_write_block nehmen (bzw. umgekehrt zum Lesen).
Gast #362944
Lesenswert?
• ▲
▼
> ich habe eine struct aus 3 arrays definiert, die ich mit
> eeprom_write_block(...) ins EEPROM (des ATMega128) ab Adresse 0
> schreiben möchte, und natürlich auch wieder auslesen möchte.

Muß es unbedingt Adresse 0 sein? Normalerweise lässt man den Linker das
verwalten.

> Da, wo im folgenden Code die ??? stehen, habe ich mein Problem:
> wie finde ich das 1. Element der struct ?

Um ein erstes Element zu haben, mußt du erstmal ein Objekt diesen Typs
haben. Bisher hast du nur den Typ selbst.

> #define eeprom_struct.format_delay_control = {0x12, 0x0F, 0x0E} ;
> #define eeprom_struct.chroma_gain_control = {0x13, 0x0F, 0x0E } ;
> #define eeprom_struct.chroma_control =  {0x24, 0x0F, 0x0E  } ;

Was soll das denn sein?

Du solltest dir mal das Tutorial anschauen. Da ist erklärt, wie man mit
dem EEPROM arbeitet.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.