Знатоки Ц подскажите как сделать выход из подпрограммы.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено vilkin 19 марта 2003 г. 22:57

В общем пишу многоуровневое меню на экране ТV монитора.
Присутствует основное меню и куча вложенных менюшек, которые также содержат вложения.
По ним бегает курсор управляется курсорными кнопками с пульта ДУ.
Структура подпрограмм обработки меню примерно такая:

void main(void){
while(1){
if (key==menuOn) main_menu();
}

}

//--------------------------
void main_menu(void){
switch(key){
case 1: menu_1(); break;
case 2: menu_2(); break;
case 3: menu_3(); break;
....
....
case MenuExit: return; break;

}
}
//--------------------
void menu_1(void){
switch(key){
case 1: menu_1_1(); break;
case 2: menu_1_2(); break;
case 3: menu_1_3(); break;
....
....
case MenuExit: return; break;
}
}
//----------------------------------
void menu_2(void){
switch(key){
case 1: menu_2_1(); break;
case 2: menu_2_2(); break;
case 3: menu_2_3(); break;
....
....
case MenuExit: return; break;
}
}
//---------------------------------

Не уверен что скрипт wwwboard отобразит всё правильно, но думаю суть понятна? Из основной программы вызываю подпрограму меню из неё вызываю подпрограмму подменю из которой можно вызвать следующее подменю и т.д. Чтобы вернуться опять в программу main() нужно выйти последовательно из всех подменю, для этого нужно нажать кнопку MenuExit несколько раз. Каждое нажатие вываливает нас в предедущее меню и в конце концов мы оказываемся в головной программе.
Внимание теперь главный вопрос:
Как выйти из самого последнего подменю за !!!одно!!! нажатие кнопки.
Другими словами как выйти из подпрограммы скажем пятого уровня вложенности в основную программу при наступлении необходимого события.
Естественно оператор Goto, как кто-то предлагал на предедущей странице здесь категорически не прокатит, весь стек развалится.
Покритикуйте мою программу, может она из начально не пралильно организованна? И вложенные меню нужно делать по другому?
Пишу на CVAVR.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru