www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datensätze im Eeprom verwalten (ATMega)


Autor: Daniel Luscher (danielschlumpf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich bin seit einigen Wochen dabei, mich in die Thematik von 
Mikroprozessoren einzuarbeiten. Bei meinen Recherchen bin ich immer 
wieder auf dieses Forum gestossen und habe unzählige hilfreiche 
Anleitungen und Tipps gefunden, daher vorab ein großes Danke an die 
Fragesteller und -beantworter! Mir eurer Hilfe habe ich inzwischen 
testweise zwei Controller im Betrieb, die einige Taster und LEDs 
betreiben und über I2C miteinander kommunizieren können, quasi zur 
'Grundlagenforschung'.

Habe aber nun doch eine Frage, zu der ich nicht viel im Netz gefunden 
habe:

Ich habe auf längere Sicht vor, eine Vielzahl von Datensätzen 
abzuspeichern und zu verwalten. Wie ich Werte an bestimmten Addressen in 
einem Eemprom speichern und auslesen kann, ist klar. Was mir jedoch nun 
fehlt, sind einige Tipps zur dynamischen Verwaltung dieser Daten - ich 
will keine konkrete Anleitung oder Code sondern einfach ein paar Tipps, 
nach welchem System ihr ggf arbeitet oder was sinnvoll wäre:

Ein Datensatz besteht aus mehreren Werten, die jeweils eine bestimmte 
Bedeutung haben (z.B. für viele Personen jeweils Haarfarbe, Gewicht etc) 
Ausserdem bekommt jeder Datensatz einen Namen (oder eine ID), damit ich 
sehen kann welche Daten vorhanden sind. Im Betrieb werden Datensätze 
gelöscht, editiert und neu erstellt. Letztlich will ich eine Liste der 
vorhandenen Datensätze anzeigen lassen und einzelne Sätze in den RAM 
laden können.

Auf höherer Ebene ist das eine simple Datenstruktur, auf Eeprom-Ebene 
dachte ich bislang an einen reservierten Bereich mit den IDs oder Namen, 
hinter denen jeweils die Addresse des restlichen Datensatzes steht, so 
als Inhaltsverzeichnis. An den jeweils verlinkten Addressen stehen dann 
Blöcke von n Bytes, die in einer festgelegten Reihenfolge die Werte 
enthalten (1. Gewicht, 2. Größe...). Oder alternativ eine Liste von 
Wertepaaren, bei denen der erste Wert die Datentyp angibt und der zweite 
dann den Wert darstellt...

Meinungen dazu, macht das Sinn? :)

Autor: Andreas Vogt (tico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sinn machen beide Ansätze: Der erste verbraucht weniger Speicherplatz, 
der zweite ist leichter erweiterbar. Welchen Du wählst, hängt von Deinen 
Anforderungen ab.
Falls einzelne Datensätze sehr oft geändert werden sollen, kannst Du 
dich auch mal mit wear leveling beschäftigen. Ist ein interessantes 
Thema, in das man viel Gehirnschmalz stecken kann.

Gruss
Andreas

Autor: Daniel Luscher (danielschlumpf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

danke für deine Antwort, dann lag ich ja gar nicht so falsch. Ich denke, 
ich werde letztlich ein Zwischending der Varianten nehmen und die 
Datensätze in kleinere Pakete unterteilen. Dann brauche ich zu jedem 
Datensatz jeweils nur die benötigten Datenpakete zu schreiben (jeweils 
mit nem Byte als Ankündigung was kommt), und ab da eine festgelegte 
Anzahl und Reihenfolge von Werten.

Grüße

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite nie direkt im EEPROM, sondern lege eine Struct im SRAM an.
Und dann wird von der EEPROM-Adresse (Index * sizeof(struct)) ein 
Element gelesen bzw. dahin zurückgespeichert.
Dadurch kannst Du bequem mit dem Datensatz arbeiten und ihn auch 
editieren, ohne unnötige EPROM-Schreibzugriffe.

Ich brauche dann auch nur eine kleine Zugriffsroutine:
http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Die EEPROM-Zugriffe mit indirekten Calls beim AVR-GCC sind ja doch sehr 
aufwendig und langsam.


Peter

Autor: Daniel Luscher (danielschlumpf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

danke für den Tipp - die Frage, wie mich ich nun innerhalb des EEPROM 
oder eben SRAM organisiere, ist ja die eine Sache, aber um dann damit zu 
arbeiten werde ich in Zukunft wohl genau so eine Lösung wie deine 
brauchen. Und es ist mal wieder ein mit "Dannegger'scher Effizienz" 
programmierter Code, ich fand deine debounce-Routinen schon prima.

Müsste ja dann durch die erhöhte Geschwigkeit auch möglich sein, mit 
mehreren ICs auf einem gemeinsamen SRAM zu arbeiten, oder?

Grüße,
Daniel

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.