реклама на сайте
подробности

 
 
> Реализация меню для работы со знакосинтезирующим ЖКИ, Поделитесь опытом. Пожалуйста.
Alex2578
сообщение Aug 6 2007, 13:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 20-02-07
Пользователь №: 25 515



Всех приветствую.

Поделитесь пожалуйста опытом, кто как организует меню для работы со занакосинтезирующим ЖКИ.

Задача:
- просмотр информации о состоянии чего-либо;
- внесение данных, типа калибровка и т.д.;
- кофигурирование;
- ну и чего-нибудь еще....

Думаю, в глубину будет уровня 3-4, не больше.

С чего начать? Как организовать иерархию?

Прошу пардон, но на этот момент вопросы только общие, более конкретные, быть может, появятся позже.

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ochkarik_
сообщение Feb 23 2008, 14:15
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-07-07
Пользователь №: 28 824



А как вам такой принцип реализации меню?
Прикрепленный файл  menu.rar ( 108.33 килобайт ) Кол-во скачиваний: 236


В приложенном файле реализация для обычного консольного приложения Windows, с целью показать принцип.

Реализация для атмеги есть на работе, почти полная версия, вкупе с обработкой клавиатуры.
Функция main для атмеги выглядит примерно так:
Код
while(1)
{
   .......
   if(MAIN_NOT_BUSY) //условие, дающие разрешение на работу терминала в этом цикле
     next_terminal_task();
}

Ф функции next_terminal_task выполняется только один шаг из текущей задачи - или вывод одного символа на дисплей или один скан клавиатуры или обработка нажатой клавиши, или еще чего-то.
Но это уже другая история. А идея само меню реализовать в виде стека, в котором хранятся указатели на активное меню, оказалась довольно удачной. Попробуйте.

Сообщение отредактировал ochkarik_ - Feb 23 2008, 14:28
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 23 2008, 17:04
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(ochkarik_ @ Feb 23 2008, 17:15) *
Ф функции next_terminal_task выполняется только один шаг из текущей задачи - или вывод одного символа на дисплей или один скан клавиатуры или обработка нажатой клавиши, или еще чего-то.
Но это уже другая история.

IMHO зачем изобретать велосипед, така идея реализована в switch технологии или автоматном программровании. здесь можно посомтреть инфу и пример
http://ru.wikipedia.org/wiki/Автоматное_программирование
А для серьезного использования лучше с первоисточника начать
http://is.ifmo.ru/

Еще в FreeRTOS есть co-routine, тоже очень удобная штука.

Сообщение отредактировал KRS - Feb 23 2008, 17:17
Go to the top of the page
 
+Quote Post
Getmanov
сообщение Feb 24 2008, 09:59
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 28-01-08
Из: Николаев
Пользователь №: 34 507



CODE


/****************************************************************/
/* Menu */
/****************************************************************/
// Структура хранящая пункты меню
typedef
struct {
unsigned char __flash *itemText; // Название Пункта
void (*itemFunction)(char); // Вызываемая функция
char itemArg; // Аргумент
}
_menuItem;
_menuItem MenuItem;

// Названия
static __flash unsigned char
_max[] = {77,65,88,32,72,97,190,112,0},
_min[] = {77,73,78,32,72,97,190,112,0},
_sens[] = {171,121,179,99,191,179,184,191,0},
_timeout[] = {84,105,109,101,32,79,117,116,0},
_beep[] = {66,101,101,112,72,114,115,20,0},
_sec[] = {83,104,111,119,32,83,101,99,0},
_stime[] = {83,101,116,32,84,105,109,101,0},
_deadzone[] = {68,101,97,100,90,111,110,101,0},
_service[] = {42,42,42,42,42,42,42,42,0};


// Загрузка структуры
static _menuItem __flash MenuItems[] =
{
_max, SetMaxV, 3,
_min, SetMinV, 2,
_sens, Sensitivity, 0,
_timeout, SetTimeOut, 0,
_deadzone, SetDead, 0,
_beep, SetBeepHrs, 0,
_sec, SetShowSec, 0,
_stime, SetTime, 0,
_service, Service, 0
};
/****************************************************************/

void Menu(char inp)
{
static _menuItem __flash *_mptr = MenuItems;
switch (inp)
{
case NEXT: // Next item
if (++_mptr > &MenuItems[(sizeof MenuItems)/(sizeof (_menuItem)) - 1])
_mptr = MenuItems;
OutStrFlash(_mptr->itemText,0x01);
PrintSymbol(4,0x00);
/* Вывод следующего пункта в след. строку */
if (++_mptr > &MenuItems[(sizeof MenuItems)/(sizeof (_menuItem)) - 1])
{
_mptr = MenuItems;
}
OutStrFlash(_mptr->itemText,0x40);
if (--_mptr < MenuItems) // Set pointer to the last item
_mptr = &MenuItems[(sizeof MenuItems)/(sizeof (_menuItem)) - 1];
Dev_State = MENU;
break;

case SELECT: // Выполнение выбранного пункта
Ctrl = 0;
Dev_State = MENU;
(*_mptr->itemFunction)(_mptr->itemArg);
ClrScr();
break;
}
}


Где то так делал я , на примере ув. Леонида Ивановича. Для навигации использовал 2 кнопки.
Меню одноуровневое, но добавить ещё уровней не проблема. Вместо указателя на исполняемую функцию нужно подставить указатель на функцию подменю. Работает это дело быстро, да и места не много занимает.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alex2578   Реализация меню для работы со знакосинтезирующим ЖКИ   Aug 6 2007, 13:34
- - GDI   В исходниках программ и библиотек смотрели уже? ht...   Aug 6 2007, 14:01
|- - Alex2578   Цитата(GDI @ Aug 6 2007, 18:01) В исходни...   Aug 7 2007, 03:54
- - man with no name   Можно делать следующим образом: описываем структур...   Aug 6 2007, 14:44
- - GDI   Вот тема как нельзя кстати всплыла http://electron...   Aug 7 2007, 14:24
- - VDG   Цитата(Alex2578 @ Aug 6 2007, 17:34) Поде...   Aug 11 2007, 13:21
- - Aesthete Animus   Имеется мега16 с подключенными к ней двухстрочным ...   Dec 18 2007, 10:09
|- - Dog Pawlowa   Цитата(Aesthete Animus @ Dec 18 2007, 14...   Dec 18 2007, 10:25
- - umup   сделать массив struct-ов, в каждом - текст пункта ...   Dec 18 2007, 10:16
|- - Aesthete Animus   Цитата(umup @ Dec 18 2007, 13:16) сделать...   Dec 18 2007, 10:30
- - umup   Цитатасколько памяти съест такая реализация ну пос...   Dec 18 2007, 10:57
|- - Aesthete Animus   Цитата(umup @ Dec 18 2007, 13:57) ну посч...   Dec 18 2007, 11:26


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 22:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016