Я делаю так:
1 определяю тип функции меню
Код
typedef unsigned char (*menuItem)(unsigned char);
2 обьявляю массив указателей на функции и переменную для хранения текущей позиции в меню
Код
menuItem menu[30];
unsigned char menuPos=0;
3 пишу функции меню, которые при выходе возвращают пункт пеню на который надо перейти
Код
unsigned char menu_start_winds(unsigned char c)
{
.........
return 5;
}
4 инициализирую массив указателей
Код
void InitMenu(void)
{
menuPos=0;
menu[0]=mainScreen;
menu[1]=menu_winds_quantiy;
.............
menu[9]=menu_about;
}
5 в основном цикле приложения
Код
menuPos=(*menu[menuPos])(menuPos);