Hallo, ich schreibe setupdaten ins eeprom und lese diese beim programmstart aus. Ab und zu wird der letzte Wert der struct nicht geschrieben, weiß jemand was ich dá falsch mache? typedef UCHAR* PCHARU; #define EEPROM_POS (PCHARU) 0x00 typedef struct { float sinkingTone, climbingTone; u08 timeOffset, trackIntervall, lautstaerke, bluetooth, sms, config, mode; } SETUPBLOCK; volatile SETUPBLOCK setupBlock; void writesetupdata (void) { while(!eeprom_is_ready()); cli(); eeprom_write_block((u16*) &setupBlock,EEPROM_POS, sizeof(SETUPBLOCK)); sei(); } void readsetupdata (void) { while(!eeprom_is_ready()); eeprom_read_block((u16*) &setupBlock,EEPROM_POS, sizeof(SETUPBLOCK)); }
> Ab und zu wird der letzte Wert der struct nicht geschrieben
Ich vermute mal, du läufst in ein anderes Problem:
Atmel hat dokumentiert, dass es ein Problem gibt, wenn
dem Chip der Versorgungsstrom abgeklemmt wird. Da kann
es passieren, dass noch mal ins EEPROM geschrieben wird
und zwar an der Stelle an der das Schreibregister fürs
EEPROM gerade steht.
Abhilfe: Nachdem du ins EEPROM geschrieben hast, schreibe
noch ein Byte an die EEPROM Adresse 0 (die du anderwertig
nicht benutzt). Dadurch ist sicher gestellt, dass ein
derartiges Fehlverhalten keine vitalen Bytes überschreibt,
da das EEPROM Adressregister dadurch auf ein nicht 'benutztes'
Byte zeigt.
kann ich machen, das Problem wird warscheinlich nicht behoben sein. Wenn ich noch eine struct an einer anderen Stelle hinterherschreiben möchte, so wird gar nichts mehr geschrieben. Erst wenn die zweite struct wieder als erstes geschrieben wird sind die Daten gespeichert. Als wenn nach denm 14ten oder 15ten Byte abgebrochen wird.
Michael wrote: > kann ich machen, das Problem wird warscheinlich nicht behoben sein. > > Wenn ich noch eine struct an einer anderen Stelle hinterherschreiben > möchte, so wird gar nichts mehr geschrieben. > Erst wenn die zweite struct wieder als erstes geschrieben wird sind die > Daten gespeichert. > Als wenn nach denm 14ten oder 15ten Byte abgebrochen wird. Dann kann ich dich nur bitten etwas mehr Informationen rauszurücken. Zb ein komplettes Testprogramm, das dein Problem demonstriert. Das können dann andere mal auf ihrem µC (BTW: welcher denn) ausprobieren und versuchen den Fehler nachzustellen und zu analysieren.
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.