mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Optimierung EEPROM Zugriff (AVR)


Autor: Stephan V. (orca)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende die eeprom_write_block() Funktion um Messwerte in einen 
Ringbuffer ins EEPROM zu schreiben.

Zum Algorithmus:
1. Datenzeile ins EEPROM schreiben, index++
2. nächste Datenzeile im EEPROM mit 0xFF als leer markieren
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?

Autor: MicroSD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der AVR-EEPROM kann nur Byteweise beschrieben werden.
Man kann aber getrennt löschen und programmieren.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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&f...


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.