Hi leute, ich hoffe die Frage ist hier richtig, weiß nicht genau wo die
einzuordenen ist??
Ich bin gerade dabei ein universell erweiterbares LCD menü für meinen µC
(hier ATmega128) zu gestalten.
Es steht, und funktioniert auch, das einzige das mich stört ist, dass
die einzelnen Menüpunkte erst während der Laufzeit initialisiert werden.
Was mich hier stört, ist dass das Ganze in einer Funktion zur Laufzeit
initialisiert wird.
Besteht die möglichkeit das ganze auch außerhalb einer Funktion zu
machen
Etwa so:
1
#define add_all_menu {
2
add_menu_delay(0,1,65,menuStartWindow);
3
4
add_menu(1,1,2,3,1,menuDummy2);
5
6
add_menu(2,0,3,3,1,menuDummy3);
7
add_menu(3,3,3,3,0,menuDummy4);
8
}
Ich weiß dass die Syntax so nicht stimmt,
aber gibt es so eine (oder ähnliche)
Möglichkeit???
Gruß und Danke...
Die Fortsetzungszeilen müssen mit \ enden
2. Wenn du das machst, ändert sich garnichts. Dein Menü wird nach wie
vor erst zur Laufzeit erzeugt.
Um das Menü zur Übersetzungszeit aufzubauen, müßtest du eine
Datenstruktur initialisieren, die alle Daten enthält und zur Laufzeit
von einer Routine angezeigt/interpretiert wird.
Nein, das lauft auch zur Laufzeit ab. Ich dachte sowas in diesem Stil:
1
typedefstruct{
2
char*pText;
3
menuEntry*subMenu;
4
}menuEntry;
5
6
struct{
7
menuEntrye1;
8
menuEntrye2;
9
}menuLevel1={
10
{"Punkt 2.1",NULL}
11
};
12
13
struct{
14
menuEntrye1;
15
menuEntrye2;
16
menuEntrye3;
17
}menuLevel0={
18
{"Punkt 1",NULL},
19
{"Untermenü",&menuLevel1},
20
{"Punkt 3",NULL}
21
};
Der Baum fängt bei menuLevel0 an, der Benutzer hangelt sich durch, bis
er einen menuEntry mit subMenu == NULL auslöst. Dann gibt die
Menüroutine das zugehörige pText zurück.
Das Prinzip läßt sich noch verfeinern, z.B. indem man den Text nur bis
zu einem Sonderzeichen anzeigt und dahinter irgendwelche Parameter
speichert, die den Routinen übergeben werden, die die Menüpunkte
ausführen.
Z.B. so:
"Punkt 4~4711" // Der Text wird nur bis zu ~ angezeigt
// Die Menüroutine gibt 4711 zurück.
Jetzt hätt ich fast vergessen mich zu bedanken...
Zwar werde ich das so nicht übernehmen,
nicht weil es schlecht ist, besser als meine Lösung!
Aber das jetzt an meinen Code anzupassen ist mir ein zu großer Aufwand.
Aber du hast mir an einer ganz anderen Stelle meines Projekts geholfen,
an der es nicht weiterging...merci!
Gruß und Danke
Jo