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? :)
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
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
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&file=viewtopic&t=91306 Die EEPROM-Zugriffe mit indirekten Calls beim AVR-GCC sind ja doch sehr aufwendig und langsam. Peter
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.