Gast
#2252780
Hallo allerseits, warum sollte gemäß GCC-Tutorial die erste Adresse des EEPROMS nicht verwendet werden? (DUMMY-Byte) Welcher Grund steckt dahinter? mfg
|
Anzeige
|
erste EEPROM-Stelle leer lassen
Gast
#2252780
Hallo allerseits, warum sollte gemäß GCC-Tutorial die erste Adresse des EEPROMS nicht verwendet werden? (DUMMY-Byte) Welcher Grund steckt dahinter? mfg
Gast
#2252795
EEPROM schrieb: > Welcher Grund steckt dahinter? Gar keiner. Wo steht das denn? Oliver
Gast
#2252805
Weil es laut AVR Datenblatt gelegentlich vorkommen kann, dass das erste Byte beim ein-/auschalten der Spannungversorgung überschrieben wird.
Gast
#2252806
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
};
Gast
#2252807
Hab ich auch schon mal gelesen ist irgendein Bug. Ich weiß nicht mehr genbau warum, könnte aber was mit OSCAL gewesen sein. 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.
Gast
#2252814
Hi Das Ganze war eigentlich nur bei den ersten AVRs (z.B. ATMega103) ein Problem. Von daher kenne ich das. Die neueren AVRs sind da unproblematisch. MfG Spess Bei älteren AVRs wurde das EEADDR beim Reset auf 0 gesetzt. Wenn also gerade ein EEPROM beschrieben wurde und z.B. der Watchdog zuschlägt, war das Byte auf der aktuellen Adresse und das auf Adresse 0 zerstört. Neuere AVRs sollen das nicht mehr machen. Peter
Gast
#2252834
Εrnst B✶ schrieb: > Wenn der Strom ausfällt und kein BOR konfiguriert ist, dann hat man das Datenblatt nicht vollständig gelesen. Brown-out-Reset ist bei EEPROM-Nutzung Pflicht. Dann klappt es auch mit Speicherstelle 0. Oliver 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
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.
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
Gast
#2252846
upps, zu langsam...
Gast
#2252921
danke Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|