Andy1988
30-05-2006, 23:14
Hi,
Ich hab da ein kleines Problem. Dieses Programm soll eigentlich auf einem AVR laufen und ein Menü darstellen. Drückt man dann irgendeinen Button wird der Callback, der in der struct steht aufgerufen und es wird ein Ereignis ausgelöst (zum Beispiel ein Untermenü aufrufen oder eine Funktion umschalten).
Ich hab das jetzt mal als PC Variante gebastelt, weil man da besser die Ausgaben sehen kann.
Allerdings hab ich jetzt ein Problem, den Text, den ich in der Struct abspeichere wieder da raus zu bekommen. Wenn ich das Feld hole, bekomme ich nur eine Adresse im RAM und keinen Text.
Ich hab das sowieso noch nicht ganz geblickt mit den Zeigern. Was das ist weiß ich, aber mir fehlt die Erfahrung um die Dinger anzuwenden ;)
Wär super, wenn mir jemand helfen kann!
#include <stdio.h>
#include <stdlib.h>
struct menuitem
{
char name[28];
void (*callback)(void);
};
struct menuitem items[2];
void menu_1(void)
{
return;
}
void menu_2(void)
{
return;
}
void init_items(void)
{
struct menuitem *item = &items[0];
*(item->name) = "1. Menüpunkt \0";
item->callback = menu_1;
item = &items[1];
*(item->name) = "2. Menüpunkt \0";
item->callback = menu_2;
}
int main(void)
{
init_items();
struct menuitem *item;
item = &items[0];
printf("%s\n", item->name);
item = &items[1];
printf("%s\n", item->name);
return 0;
}
edit:
Achja! Ich bin auch offen für andere Vorschläge, wie man so ein menü darstellen kann. Es soll nur möglichst einfach erweiterbar sein. Deswegen habe ich eine Variante mit Callbacks gewählt.
nochmal edit:
Der gcc spuckt mir auch folgende Meldungen aus:
test2.c: In function `init_items':
test2.c:25: warning: assignment makes integer from pointer without a cast
test2.c:29: warning: assignment makes integer from pointer without a cast
Ich hab da ein kleines Problem. Dieses Programm soll eigentlich auf einem AVR laufen und ein Menü darstellen. Drückt man dann irgendeinen Button wird der Callback, der in der struct steht aufgerufen und es wird ein Ereignis ausgelöst (zum Beispiel ein Untermenü aufrufen oder eine Funktion umschalten).
Ich hab das jetzt mal als PC Variante gebastelt, weil man da besser die Ausgaben sehen kann.
Allerdings hab ich jetzt ein Problem, den Text, den ich in der Struct abspeichere wieder da raus zu bekommen. Wenn ich das Feld hole, bekomme ich nur eine Adresse im RAM und keinen Text.
Ich hab das sowieso noch nicht ganz geblickt mit den Zeigern. Was das ist weiß ich, aber mir fehlt die Erfahrung um die Dinger anzuwenden ;)
Wär super, wenn mir jemand helfen kann!
#include <stdio.h>
#include <stdlib.h>
struct menuitem
{
char name[28];
void (*callback)(void);
};
struct menuitem items[2];
void menu_1(void)
{
return;
}
void menu_2(void)
{
return;
}
void init_items(void)
{
struct menuitem *item = &items[0];
*(item->name) = "1. Menüpunkt \0";
item->callback = menu_1;
item = &items[1];
*(item->name) = "2. Menüpunkt \0";
item->callback = menu_2;
}
int main(void)
{
init_items();
struct menuitem *item;
item = &items[0];
printf("%s\n", item->name);
item = &items[1];
printf("%s\n", item->name);
return 0;
}
edit:
Achja! Ich bin auch offen für andere Vorschläge, wie man so ein menü darstellen kann. Es soll nur möglichst einfach erweiterbar sein. Deswegen habe ich eine Variante mit Callbacks gewählt.
nochmal edit:
Der gcc spuckt mir auch folgende Meldungen aus:
test2.c: In function `init_items':
test2.c:25: warning: assignment makes integer from pointer without a cast
test2.c:29: warning: assignment makes integer from pointer without a cast