Hallo! Wie mache ich das richtig? i = eeprom_read_word (&i_restzeit_l); restzeit = i; i = eeprom_read_word (&i_restzeit_h); restzeit = restzeit + ( i_restzeit_h << 16); i_restzeit_l sind die unteren, i_restzeit_h die oberen 16bit einer 32 bit Zahl die im EEPROM steht. Das schieben um 16 bit nach links geht natürlich nicht. restzeit ist 32bit. Macht man das mit eeprom_read_block() oder gibts was einfacheres? Ist die Reihenfolge im EEPROM richtig? int16_t i_gesamtzeit_l ESECT; int16_t i_gesamtzeit_h ESECT;
Hi, #include "avr/eeprom.h" void test1(void) { unsigned long restzeit; uint16_t* i_restzeit_h = (uint16_t*)6; uint16_t* i_restzeit_l = (uint16_t*)8; restzeit = eeprom_read_word (i_restzeit_h); restzeit <<= 16; restzeit += eeprom_read_word (i_restzeit_l); } // Version 2: void test2(void) { unsigned long restzeit; unsigned long* restzeit_adresse = (unsigned long*)6; eeprom_read_block(&restzeit,restzeit_adresse ,sizeof(restzeit)); } Beide Versionen lassen sich bei mir compilieren. Ich habe es selbst noch nicht getestet. Melde dich bitte, wenn etwas laufen sollte. Wenn nichts läuft, sowieso melden. Oryx
Hi, wenn ich meinen Test richtig interpretiere, werden erst die l-words geschrieben und dann die h-words void test1_in(void) { uint16_t* i_restzeit_h = (uint16_t*)12; uint16_t* i_restzeit_l = (uint16_t*)10; eeprom_write_word (i_restzeit_h,0x0102); eeprom_write_word (i_restzeit_l, 0x0408); } unsigned long test2(void) { unsigned long restzeit; unsigned long* restzeit_adresse = (unsigned long*)10; eeprom_read_block(&restzeit,restzeit_adresse ,sizeof(restzeit)); return restzeit; } läuft bei mir Oryx
Hallo Oryx! > restzeit = eeprom_read_word (i_restzeit_h); > restzeit <<= 16; Ich lach mich tot! Sowas fällt mir nicht ein? Entweder bin ich 32-bit verwöhnt oder sowieso zu blöd für alles! Ich sollte beruflich doch waas anderes machen. So in der Art Türstopper oder Schuhverkäufer. Auf jeden Fall danke für den Tip, funktioniert natürlich (die erste Version). An der 2. arbeite ich noch, weil ich es auch mit eeprom_write_block machen will. Ist im Assembler Code deutlich kürzer.
Hi, freut mich. Die einfachsten Sachen sind immer etwas schwerer zu finden. Aber Schuhverkäufer ist nun wirklich ein ehrenwerter Beruf. Oryx
So, Variante 2 tut auch, hatte woanders noch einen Bug drin. Ist schon lustig, dass man mit Mikrocontroller viel mehr Zeit am Feilen vom Code aufbringt sobald man weniger als 1k Flash frei hat :-)
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.