allgemeine Frage zu Menu und Funktionspointer

Gast #4878612
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.