Forum: Compiler & IDEs EEPROM beschreiben


von Michael (Gast)


Lesenswert?

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));
}

von Karl H. (kbuchegg)


Lesenswert?

> 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.

von Michael (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.