Optimierung EEPROM Zugriff (AVR)

OP #2093875
Lesenswert?
• ▲
▼
Ich verwende die eeprom_write_block() Funktion um Messwerte in einen 
Ringbuffer ins EEPROM zu schreiben.

Zum Algorithmus:
1
1. Datenzeile ins EEPROM schreiben, index++
2
2. nächste Datenzeile im EEPROM mit 0xFF als leer markieren
3
3. weiter mit dem Programm und irgendwann wieder zu 1. zurück.

Das "leeren" (0xFF setzen) der nächsten Datenzeile hat den Vorteil, dass 
ich damit die index-Variable nicht jedes Mal (an die selbe Stelle) ins 
EEPROM schreiben muss -> wirkliche, gleichmäßige Verteilung der EEPROM 
Schreibzugriffe.  Außerdem passt es mit der default-Initialisierung des 
EEPROMS zusammen :-)
Nachteil: pro Datensatz werden 2 Zeilen geschrieben (aber eben immer 
andere Zeilen)

Gibt es andere, EEPROM schonendere, Möglichkeiten?

Ist es besser die beiden Datenzeilen in einem Rutsch ins EEPROM zu 
schreiben, oder kann ich eeprom_write_block() auch 2x hintereinander 
aufrufen?
Gast #2093876
Lesenswert?
• ▲
▼
Stephan V. schrieb:
> Gibt es andere, EEPROM schonendere, Möglichkeiten?

Der AVR kann Löschen (Setzen auf FF) und Schreiben (Ver-AND-en der 
EEPROM-Zelle mit dem neuen Wert) getrennt ausführen.
=> Effektiv nur ein Schreibzugriff.

Leider wurde diese Funktion irgendwann in den letzten Jahren aus der 
AVR-Libc entfernt, d.H. inline-ASM mus her.
#2093898
Lesenswert?
• ▲
▼
MicroSD schrieb:
> Leider wurde diese Funktion irgendwann in den letzten Jahren aus der
> AVR-Libc entfernt

Außerdem wurden sie unnötig aufgebläht (indirekter Call), brauchen also 
viel Code und Zeit.

MicroSD schrieb:
> d.H. inline-ASM mus her.

Nö, muß garnicht.
Die IO-Bits und Bytes sind in io.h definiert, also einfach in C 
schreiben.

Zusätzlich kann man noch den Verschleiß minimieren, indem bei Gleichheit 
das Schreiben übersprungen wird.
Sieh dann so aus:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=91306


Peter

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.