Hi,
ich möchte das interne EEPROM von einem Mega644 nutzen um mir 4 Structs darin abzupeichern. Jedoch verändern sich von 2 Structs ab und zu nach dem mehrfachen Ein- und Ausschalten jeweils das erste Byte im Struct (der hue-Wert).
Structdefinition
Funktion zum Schreiben des Structs in das EEPROM, eine von 4 Funktionen (unterscheiden sich nur in der Adresse).Code:struct hsv_pixel{ uint8_t hue; uint8_t sat; uint8_t val; };
Code zum Auslesen der WerteCode:void setColorValuesGreen(hsv_pixel koerper){ //Interrupts sichern uint8_t tmp_sreg = SREG; cli(); while(!eeprom_is_ready()){} //Warten bis EEPROM bereit eeprom_write_block((const void*)&koerper, (void*)EE_GREEN, 3); //Koerperwert schreiben SREG = tmp_sreg; //Interrupts wiederherstellen }
EEPROM-Inhalt nach dem einspeichernCode:hsv_pixel ee_green; hsv_pixel ee_green_leg; hsv_pixel ee_silver; hsv_pixel ee_silver_leg; //Interrupts sichern uint8_t tmp_sreg = SREG; cli(); //Werte aus dem EEPROM holen while(!eeprom_is_ready()){} //Warten bis EEPROM bereit eeprom_read_block((void*)&ee_green, (const void *) EE_GREEN, 3); while(!eeprom_is_ready()){} //Warten bis EEPROM bereit eeprom_read_block((void*)&ee_green_leg, (const void *) EE_GREEN_LEG, 3); while(!eeprom_is_ready()){} //Warten bis EEPROM bereit eeprom_read_block((void*)&ee_silver, (const void *) EE_SILVER, 3); while(!eeprom_is_ready()){} //Warten bis EEPROM bereit eeprom_read_block((void*)&ee_silver_leg, (const void *) EE_SILVER_LEG, 3); SREG = tmp_sreg; //Interrupts wiederherstellen
Nach einigem mal Ein- und AusschaltenCode::20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 :20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 :20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 :20006000FFFFFFFF24B81DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26BA25FFFFFFFFFF9C :20008000FFFFFFFFFFFFFFFFFFFFFFFF2AA460FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F :2000A0002BA460FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E
Die Werte werden bei Bedarf per Tastendruck gespeichert.Code::20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 :20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 :20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 :20006000FFFFFFFF24B81DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26BA25FFFFFFFFFF9C :20008000FFFFFFFFFFFFFFFFFFFFFFFF2BA561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C :2000A0002BA35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
In den Fuses ist auch eingestellt, dass das EEPROM beim flashen erhalten bleibt. Außerdem wurde der Controller zwischendurch nicht neu geflasht.
Woran kann es liegen?
MfG Jörn







Zitieren

Lesezeichen