www.mikrocontroller.net

Forum: Compiler & IDEs platzsparende Menüstruktur


Autor: Marten (Gast)
Datum:

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

Autor: Εrnst B✶ (ernst)
Datum:

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

Autor: Marten (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher.
Du brauchst dazu eine 'forward Dekleration'

struct irgendwas Display;

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

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier meine Menü Struktur, so ähnlich wie die oben:
struct menupoint{
u08 prev;
u08 next;
u08 up;
u08 down;
char text[5];
void (*execute) (void);
};

const struct menupoint mainmenu[menuentries_nr] PROGMEM = {
  {254,5,3,1,"Game\0"},      //0
  {254,11,0,2,"AdvC\0"},    //1
  {254,255,1,3,"Cali\0",input_calib},  //2
  {254,255,2,0,"Demo\0",play_demo},  //3

}

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.

Autor: Michael Samarzija (msjj)
Datum:
Angehängte Dateien:

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

Autor: Marten (Gast)
Datum:

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

Marten

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.