Hallo wenn ich folgende Daten im EEPROM ablege
1 | |
2 | |
3 | |
und diese dann mit
1 | |
2 | |
wieder auslese, bekomme ich dann als Ergebnis 0x00FF, 0xFF00 oder funktioniert das erst gar nicht? :)
|
Anzeige
|
EEPROM - HighByte first?Hallo wenn ich folgende Daten im EEPROM ablege
und diese dann mit
wieder auslese, bekomme ich dann als Ergebnis 0x00FF, 0xFF00 oder funktioniert das erst gar nicht? :)
Gast
#2536202
Hallo, das Ganze funktioniert schon und da dein AVR eine "Little Endian machine" ist bekommst du 0xFF00. Das Problem ist nur: Wer beschreibt dir dein EEPROM, der Programmer ??? Normalerweise tut er das nicht ohne spezielle Anweisung !!!
Gast
#2537499
Hallo, ich hab mir gerade nochmal die Fragestellung und meine Antwort angesehen und muss einiges richtig stellen! Die Antwort dass das Ganze funktioniert ist zwar gültig aber dennoch sehr grenzwertig! (das heisst mehr zufällig) Man muss sich folgende Zeile genau ansehen und überlegen was sie macht! > uint8_t eeMem[] EEMEM = {[EE_DEVICE_MEM_NEXTFREE] = 0x00, [EE_DEVICE_MEM_NEXTFREE+1] = EE_DEVICES_START}; Du deklarierst hier ein Array eeMem (mit zunächst unbekannter Länge) in der Sektion ".eeprom" und initialisierst das Element mit Index EE_DEVICE_MEM_NEXTFREE (=0x001) auf 0x00 und das nachfolgende Element auf den Wert EE_DEVICES_START. Das Array ist mit den gegebenen Werten dann 3 Byte (uint8_t) lang und steht als erstes im EEPROM. Jetzt greifst du mit > tmp = eeprom_read_word((uint16_t*)EE_DEVICE_MEM_NEXTFREE); auf ein Element im EEPROM zu das an der Adresse 0x001 steht. Diese Adresse zeigt jetzt mehr zufällig auf das gewollte Element im Array eeMem. Denn sind vor eeMem weitere Variablen (etc.) in der Sektion ".eeprom" deklariert dann steht eeMem nicht mehr an erster Stelle im EEPROM und es geht schief. Die Zeile > tmp = eeprom_read_word((uint16_t*)EE_DEVICE_MEM_NEXTFREE); müsste dann besser lauten tmp = eeprom_read_word((uint16_t*)eeMem[EE_DEVICE_MEM_NEXTFREE]); Hi schon mal vielen Dank für die detaillierte Antwort. Ich muss aber - glaube ich - noch kurz erklären wie ich mir Daten im EEPROM ablege. :) Ich schreibe mir immer Art Define-Liste, die mir wieder spiegelt was wo im EEPROM zu liegen hat.
und lege mir dann genau ein Array namens eeMem an, in dem ich alle Werte initialisieren (siehe Beitrag oben) und flashe dann die Werte einmalig mit ins EEPROM. Damit sollte ich auf der sicheren Seite sein. Dass das ganze schief gehen kann, wenn ich mehrere Arrays kreuz und quer anlege war mir wirklich nicht mehr bewusst. Ich glaube ich sollte echt mal anfangen mir das ab zu gewöhnen und mit Variablen arbeiten :) struct ist hilfreich UND wenn du ein Wort im eeprom speichern willst, warum definierst du dann nicht eins, dann musst du dir beim Auslesen auch keinen Kopf machen Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|