Имеется мега16 с подключенными к ней двухстрочным LCD и мартицей кнопок 2х3. Нужно написать достаточно сложную иерархическую менюшку. Подскажите, как это лучше реализовать? Сейчас я это сделал целиком на case`ах, т.е. в зависимости от кадра, в котором нахожусь, я анализирую варианты нажатия кнопок, что - то вроде этого:
Код
switch (frame_index)
{
....
case FRAME_SET_TIME:
case FRAME_SET_DATE:
switch (button_mask)
{
case BTN_YES:
if(systime_set(&systime_input))
{// Неправильный ввод
// Если время введено неправильно,
// то возвращаться следует в этот кадр
stack_push(&frame_stack,frame_index);
frame_index = FRAME_INVALID_DATA;
}
else
frame_index = FRAME_SET_DONE;
print_flag = 1;
break;
case BTN_NO:
frame_index = stack_pop(&frame_stack);
print_flag = 1;
break;
...
}
Оно работает вполне неплохо, но уж слишком большого размера получается и код и прошивка. Добавить какой-то новый пункт - очень трудоемкая задача.
Есть некоторые мысли, что бы сделать что-то типа шаблона меню а также некоторые более идиотские идеи. Но возникает сомнение, не сожрет ли такая обработка все ресурсы (скорее всего срам память) контроллера? Подскажите, кто сталкивался с такой задачей?