Forum: Mikrocontroller und Digitale Elektronik Datenbank


von Rolf Gasser (Gast)


Lesenswert?

Hallo,

ich möchte eine Menüstruktur in einem Konfigurationsfile ablegen.
Dieses File soll in ein Flash gespeichert werden.
Dazu möchte ich mir eine Mikro-Datenbank bauen, mit
Zugriffsfunktionen.
Hat jemand schon mal sowas gebaut?Oder hat jemand ne gute Idee?

Gruss
Karl

von Tim (Gast)


Lesenswert?

Hallo Karl,

um möglichst wenig Speicher zu verbrauchen, sollten die Menüeinträge
als 'Baumstruktur' im Speicher ablegt werden.
Die Menüeinträge bestehen dabei aus dem folgenden DatenRecords, die
hintereinander im Speicher abgelegt werden.

type
PMenuItem=^TMenuItem; // Zeiger auf nachfolgende TMenuItem-Struktur
TMenuItem=record
          MenuText:array of Char;
          NextItem:PMenuItem;
          PrevItem:PMenuItem;
          ChildParentItem:PMenuItem;
          end;

MenuText:
=> Text des Menüeintrags
=> nullterminiert, um Textende beim Einlesen zu erkennen.

NextItem:
=> Zeiger auf nachfolgenden Menüeintrag.
=> wenn 'nil' handelt es sich um den unterster MenüEintrag der
aktueller MenüEbene.

PrevItem:
=> Zeiger auf vorhergehenden Menüeintrag.
=> wenn 'nil' handelt es sich um den oberster MenuEintrag der in
aktueller MenüEbene.
=> wenn 'nil' steht in ChildItem das ParentItem, dh. der Menüpunkt,
an dem dieser oberste SubMenüEintrags hängt.

ChildParentItem:PMenuItem
=> Zeiger auf den obersten MenüEintrag eines vorhanden SubMenüs oder
(bei PrevItem=nil) übergeordete MenüEintrag an dem dieser erste
Menüeintrag hängt.
=> wenn 'nil' hängt kein SubMenü an diesem Menüpunkt.

Über 4 MenüTasten (links/rechts/hoch/runter) kann man nun -beginnend
mit RootMenüEintrag (PrevItem&ChildParentItem ist hier 'nil')-  durch
die komplette Menüstruktur wandern.
Erweitert man jeden Record noch um eine Sprungzeiger, so kann man bei
der Auswahl direkt in das entsprechende Unterprogramm springen.

Wenn die PointerSize mit 2Byte angenommen wird, beträgt der
Speicherbedarf für einen MenüEintrag (6+TextLänge+1) Bytes.

Grüße

Tim

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
Noch kein Account? Hier anmelden.