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
Code:
struct hsv_pixel{
	uint8_t	hue;
	uint8_t	sat;
	uint8_t	val;
};
Funktion zum Schreiben des Structs in das EEPROM, eine von 4 Funktionen (unterscheiden sich nur in der Adresse).
Code:
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
}
Code zum Auslesen der Werte
Code:
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
EEPROM-Inhalt nach dem einspeichern
Code:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:20006000FFFFFFFF24B81DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26BA25FFFFFFFFFF9C
:20008000FFFFFFFFFFFFFFFFFFFFFFFF2AA460FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F
:2000A0002BA460FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E
Nach einigem mal Ein- und Ausschalten
Code:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:20006000FFFFFFFF24B81DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26BA25FFFFFFFFFF9C
:20008000FFFFFFFFFFFFFFFFFFFFFFFF2BA561FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C
:2000A0002BA35FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
Die Werte werden bei Bedarf per Tastendruck gespeichert.

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