erste EEPROM-Stelle leer lassen

Gast #2252806
Lesenswert?
• ▲
▼
Im Kapitel:

"EEPROM-Variable auf feste Adressen legen"

im ersten Beispiel:


uint8_t ee_mem[EESIZE] EEMEM =
{
   [EE_DUMMY]   = 0x00,
   [EE_VALUE1]  = 0x05,
   [EE_WORD1L]  = 0x01,
   [EE_WORD1H]  = 0x00,
   [EE_VALUE2]  = 0xFF
};
#2252808
Lesenswert?
• ▲
▼
EEPROM schrieb:
> Welcher Grund steckt dahinter?

Wenn der Strom ausfällt und kein BOR konfiguriert ist, 
kann/konnte/könnte es bei manchen AVRs dazu kommen, dass eine 
EEPROM-Zelle gelöscht oder überschrieben wurde...

Hoffnung der Dummy-Zelle ist nun, dass es eben jene ist, deren Daten 
verloren gehen. Deshalb: erste Zelle verwenden, und nach jeder 
Eeprom-Operation ein Read der Dummy-Zelle, um die EE-Address-Register 
wieder zu nullen.

Muss man selber mit seiner Paranoia ausmachen, ob man das braucht oder 
nicht.
#2252835
Lesenswert?
• ▲
▼
Ah, danke Peter.
Damit wird das klarer...

Das Problem war damals also, dass während des Schreibvorgangs die 
Adresse genullt wurde.
d.H. die von mir angesprochenen regelmäßigen Reads auf die 
Dummy-Eeprom-Zelle um EEADR zu resetten bringen sowieso nix.
Und der BOR hilft auch nicht wirklich, sondern könnte das Problem sogar 
noch verschärfen.
Gast #2252839
Lesenswert?
• ▲
▼
Oliver schrieb:
> Gar keiner. Wo steht das denn?

hier, im Codebeispiel: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM-Variable_auf_feste_Adressen_legen

Finde ich durchaus sinnvoll, wenn man über Pointer aufs EEPROM zugreift.
Dann kann man vor dem Zugriff den Pointer durch einen Vergleich (ob 
ungleich NULL) auf Gültigkeit testen.
1
if (ptr) { ...

Und Funktionen, die einen Pointer aufs EEPROM liefern sollen, liefern im 
Fehlerfall NULL.

Auf Adresse 0 im EEPROM kann man damit natürlich nicht mehr zugreifen,
und macht daher eine Dummy-Zuweisung.

Der zweite Grund ist, daß wenn irgendwas schiefgeht beim Schreiben ins 
EEPROM oft Adresse 0 betroffen ist.
Bei einigen AtMegas konnte der Speicherinhalt von Adresse 0 zerschossen 
werden, wenn während des Schreibens die RESET-Leitung aktiviert wird.

Gruß,
Thorsten

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren