Hallo da draußen, ich will eine große Anzahl von Werten (Geräteeinstellung) ins EEPROM eines ATMega128 schreiben (WINAVR, Studio4) und natürlich wieder auslesen. Die Werte sind alle Arrays unterschiedlicher Länge, die über den I2C-Bus div. chips initialisieren. Die I2C-Bus-Steuerung und die Init. der chips läuft. Meine Fragen zu dem folgenden Code: 1. Definiere / deklariere ich die struct korrekt ? 2. Warum stehen nach dem eeprom_write() die Werte nicht im EEPROM ? Danke für eure Tips uns Hilfe ...der Code: /**** eeprom_handling.c begonnen 5.3.06 OR **** #include <stdint.h> #include <stdio.h> #include <avr/eeprom.h> #ifndef EEPROM #define EEPROM _attribute_ ((section (".eeprom"))) #endif /* Definition der struct und Füllen mit Werten */ struct { uint8_t format_delay_control [ 3 ] ; uint8_t chroma_gain_control [ 3 ]; uint8_t chroma_control [ 3 ]; } eeprom_data = {{0x11, 0x22,0x33}, /*format_delay_control*/ {0x44, 0x55, 0x66 }, /* chroma_gain_control*/ {0x77, 0x88, 0xFF }}; /* chroma_control*/ void eeprom_write ( void ) { eeprom_write_block ( &eeprom_data , 0, sizeof (eeprom_data)) ; } void eeprom_read ( void ) { eeprom_read_block (&eeprom_data, 0 , sizeof (eeprom_data)) ; /* Ausgabe zum Test */ for (uint8_t i=0; i < sizeof ( eeprom_data.format_delay_control ); i++) printf("%X",eeprom_data.format_delay_control[i]) ; for (uint8_t i=0; i < sizeof ( eeprom_data.chroma_gain_control ); i++) printf("%X",eeprom_data.chroma_gain_control[i]) ; for (uint8_t i=0; i < sizeof ( eeprom_data.chroma_control ); i++) printf("%X",eeprom_data.chroma_control[i]) ; }
..nochmal Otto: Frage 3: Gibt es eine Möglichkeit über eine Art Index, z.B. mit einer for-Schleife, auf alle (Unter-)elemente einer struct zuzugreifen? Das wäre praktisch, wenn ich die struct mit eeprom_write_byte(...) ins EEPROM schreiben möchte. Nochmals Danke !
Um eine Struktur komplett in einem EEPROM abzulegen, mußt Du einen Pointer auf den Anfang der Struktur setzen und sizeof(struct) Bytes ins EEPROM schreiben, wobei der Pointer entsprechend erhöht wird.
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.