Forum: Mikrocontroller und Digitale Elektronik allgemeine Frage zu Menu und Funktionspointer


von Thomas (Gast)


Lesenswert?

Hallo Forum,

in vielen Beiträgen zu Menus mit Funktionszeigern sind structs erwähnt, 
die neben Texten und integer-Variablen nur eine einzige Funktion haben. 
Ich muss ehrlich sagen, ich hab noch nicht kapiert, wie das 
funktionieren soll. Ist es nicht so, dass Menus immer Parameter ändern? 
Dann brauch ich nach meiner Meinung pro Parameter 4 Funktionen: Menu zum 
Darstellen, Plus und Minus zum Ändern des Wertes und zum Darstellen des 
neuen Wertes, und Enter zum Bestätigen und abspeichern des neuen Werts.
Der folgende Code-Ausschnitt zeigt das Vorgehen mit dem Parameter tv
1
...
2
status = 0
3
4
  while(1)
5
  {
6
7
  if ( ( flag & 0x04 ) == 0x00 || ADC_Read(0) > 800)  //keine Taste gedrückt
8
   { 
9
10
  knopp = tastenhandler();
11
 
12
  if ( status == 5 )
13
  {
14
    switch(knopp)
15
    {
16
    case MENU  :goto menuende;
17
    case PLUS  :status = tvplus(status); goto menuende;
18
    case MINUS :status = tvminus(status); goto menuende;
19
    case ENTER :status = eepromparameter (status); goto menuende;
20
    }
21
  }
22
23
  if ( status == 4 )
24
  {
25
    switch(knopp)
26
    {
27
    case MENU  :status = menu5(status);goto menuende; 
28
...

 5 Parameter hab ich schon, drei werde ich noch ergänzen, dann hab ich 
aber auch alle Betriebsarten des Programms erschlagen. Die Frage ist 
jetzt, ob das nicht alles viel zu kompliziert ist, und ich wirklich so 
viele Funktionen brauche. Und ob es nicht sinnvoll ist, eine 
Funktionstabelle vo0n 8*4 Funktionen anzulegen, z.B.

uint8_t menu[uint8_t status][uint8_t knopp]

um die switch-case-Geschichte zu umgehen.

Würde mich interessieren, wie Ihr das seht. Ach so, ich hab ein 
zweizeiliges LCD, also viel Text kann ich gar nicht darstellen.

Vielen Dank für's lesen

Gruß Thomas

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.