Forum: Compiler & IDEs Wie schreibe ich eine struct ins EEPROM


von Otto Richter (Gast)


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 ) ) ;
}

von Karl H. (kbuchegg)


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).

von Rolf Magnus (Gast)


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.

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.