Forum: Compiler & IDEs platzsparende Menüstruktur


von Marten (Gast)


Lesenswert?

Hallo

ich hab vor für ein 16x2LCD eine Art Menü zu schreiben. Aber ich steh
etwas auf dem Schlauch was die Programmierung angeht.
Das Menü sollte baumförmig aufgebaut sein wobei jeder Menüpunkt mehrere
Unterpunkte haben kann.
Wie kann ich da am besten vorgehen? (wichtiger Aspekt: möglichst
speichersparend)

Marten

von Εrnst B. (ernst)


Lesenswert?

hab das mal so gemacht (menu mit vier "cursortasten" zum steuern):

<c>
struct menu_entry {
  const prog_char * text;
  const void * left;
  const void * right;
  const void *  up;
  const void * down;

  uint8_t flags;
};
</c>

dann entsprechend eine Baumstruktur im Flash damit ausfüllen.

je nach "flags" waren die "void *" entweder funktionspointer die
bei Tastendruck ausgeführt wurden, oder pointer auf das untermenu, in
das gesprungen werden sollte.

/Ernst

von Marten (Gast)


Lesenswert?

Danke für deine Antwort!


Hab noch eine Frage: nehmen wir mal an es gibt nur 2 Menüpunkte

 'Display'<->'Einstellungen'

Dann würde ich gern einen Ring machen das man wieder am Anfang
rauskommt:

'Display'<->'Einstellungen'<->'Display'<->'Einstellungen' usw.

aber dazu müsste man ja irgendwie rekursiv die Zeiger setzen .. geht
das?

Marten

von Karl heinz B. (kbucheg)


Lesenswert?

Sicher.
Du brauchst dazu eine 'forward Dekleration'

struct irgendwas Display;

struct irgendwas Einstellungen = { &Display, &Display, ... };
struct irgendwas Display       = { &Einstellungen, &Einstellungen, ...
};

von Malte _. (malte) Benutzerseite


Lesenswert?

Hier meine Menü Struktur, so ähnlich wie die oben:
1
struct menupoint{
2
u08 prev;
3
u08 next;
4
u08 up;
5
u08 down;
6
char text[5];
7
void (*execute) (void);
8
};
9
10
const struct menupoint mainmenu[menuentries_nr] PROGMEM = {
11
  {254,5,3,1,"Game\0"},      //0
12
  {254,11,0,2,"AdvC\0"},    //1
13
  {254,255,1,3,"Cali\0",input_calib},  //2
14
  {254,255,2,0,"Demo\0",play_demo},  //3
15
16
}

Es gibt also immer eine Nummer die sagt welche Menüeintrag bei welchem
Button folgen soll. Dabei steht 254 für nicht auswählbar und 255 fürs
Ausführen der Routine.

von Michael S. (msjj)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe ein Menüsystem geschrieben für eine 7 Segment Anzeige.
( mit Änderungen auch für andere Anzeigen ).
Das Prinzip ist aber gleich.

1. Menüebene -> Auswahl der Liste.
2. Menüebene -> Auswahl der Parameter.

Taste +(1) oder -(2) zur navigation ( immer im Kreis herum )
Taset 3 Auswahl
Taste 4 Abbruch und eine Ebene zurück.

gruß Micha

von Marten (Gast)


Lesenswert?

Danke für eure Hilfe. Hab jetzt schon eine kleine Menüstruktur
geschrieben. Ist sogar kleiner geworden als ich angenommen habe.

Marten

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.