Struct mit Function Pointer + Array
Verfasst: Do Jan 14, 2016 12:03 am
Hallo zusammen,
eigentlich bin ich kein wirklich guter User hier im Forum, ich stelle meist nur Fragen anstatt auch einmal irgendwas zu Lösung beizutragen.
Vielleicht seit ihr aber doch noch ein wenig gnädig mir diese Frage zu beantworten?
Ich habe folgende Situation: Ich möchte gerne ein LCD Menü generieren, das Menü funktioniert eigentlich schon, aber ich stelle fest je größer das Menü wird, desto mehr Funktionen hat, das wäre eigentlich auch ok, aber ca. 90 % der Funktionen sind gleich, da Sie nur eine Variable vom Inhaltlichen Wert verkleinern oder vergrößern und zusätzlich einen passenden Text über die aktuelle Einstellungssituation ans LCD zu übergeben.
Jetzt wird die Steuerung des Menüs aus einem Array definiert, doch aus dem Array kann ich zwar eine Funktion starten, doch nicht mit "Funktionsargumenten" so wie ich das gerne hätte.
Das original Beispiel in verkürzter Form:
(diese Art des LCD Menüs ist nicht direkt von mir sondern, aus vielen Beispielen zusammengestellt.
Jetzt habe ich schon versucht, das Array mit den Werten "aufzubrechen" :
Nur kann ich leider keine "echten" Variablennamen übergeben, welche ich natürlich brauche, wenn ich die einzustellenden Variablen an die Funktion übergeben möchte.
Sollte ich das ganze mit einem weiteren Struct lösen?
Versteht mich Jemand?
eigentlich bin ich kein wirklich guter User hier im Forum, ich stelle meist nur Fragen anstatt auch einmal irgendwas zu Lösung beizutragen.
Vielleicht seit ihr aber doch noch ein wenig gnädig mir diese Frage zu beantworten?
Ich habe folgende Situation: Ich möchte gerne ein LCD Menü generieren, das Menü funktioniert eigentlich schon, aber ich stelle fest je größer das Menü wird, desto mehr Funktionen hat, das wäre eigentlich auch ok, aber ca. 90 % der Funktionen sind gleich, da Sie nur eine Variable vom Inhaltlichen Wert verkleinern oder vergrößern und zusätzlich einen passenden Text über die aktuelle Einstellungssituation ans LCD zu übergeben.
Jetzt wird die Steuerung des Menüs aus einem Array definiert, doch aus dem Array kann ich zwar eine Funktion starten, doch nicht mit "Funktionsargumenten" so wie ich das gerne hätte.
Das original Beispiel in verkürzter Form:
(diese Art des LCD Menüs ist nicht direkt von mir sondern, aus vielen Beispielen zusammengestellt.
Code: Alles auswählen
typedef const struct MenuStructure
{
const char *text;
unsigned char m_points;
unsigned char up;
unsigned char down;
unsigned char enter;
void (*func) ();
}MenuEntry;
const char menu_000[] = "[Setup]"; // 0
const char menu_001[] = " Date & Time"; // 1
MenuEntry menu[] =
{
{menu_000, 8, 0, 0, 0, 0}, // 0
{menu_001, 8, 1, 2, 9, setValuesByLCDConfiguration}, // 1
};
void setValuesByLCDConfiguration()
{
printf("CHECK\n");
}
int main (void)
{
menu[selected].fp();
}
Code: Alles auswählen
typedef const struct MenuStructure
{
const char *text;
unsigned char m_points;
unsigned char up;
unsigned char down;
unsigned char enter;
void (*func) ();
unsigned char *lcdMenu;
unsigned char *variableDefiniton;
}MenuEntry;
MenuEntry menu[] =
{
{menu_000, 8, 0, 0, 0, 0}, // 0
{menu_001, 8, 1, 2, 9, setValuesByLCDConfiguration, 'C', 8, 'X'}, // 1
};
void setValuesByLCDConfiguration( unsigned char *p, int *z, unsigned char *g)
{
printf("%c :: %i :: %c \n", p, g););
}
int main (void)
{
menu[0].fp(menu[0].lcdMenu, menu[0].variableDefiniton);
}
Sollte ich das ganze mit einem weiteren Struct lösen?
Versteht mich Jemand?