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

 
 
> Система меню, Меню для встраиваемых систем
haker_fox
сообщение Oct 25 2005, 07:38
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? Разработал для своего девайса подсистему меню и вот теперь хочу поглюдеть на чужие творенья, т.к. считаю, что мой код не оптимальный. Устройства ввода-вывода у меня чрезывачайно "приметивные": пять кнопок и десятиразрядный семисегментный ЖКД с микроконтроллером. Управляющий МК ATmega8-16PI.

Искал в нете, но ничего путнего не нашел: все для компьютера. Плохо искал значит biggrin.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Oct 29 2005, 13:53
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата
Рекурсивные функции? Этоплохой тиль и не пример для подражания.

Учитывая, что меню живет в человеческом реальном времени и между обновлениями экрана будут проходить сотни мс, то наиболее оптимально строить поддержку меню, точнее пользовательского интерфейса, включая кнопки, индикацию, попискивание и т.п., на основе конечных автоматов.


Не разу еще не использовал рекурсии, не на PC не в embedded. Но чутье подсказывает, что рекурсия будет жрать стек, как уже выше сказал _artem_. Я создал свое меню, на основе переключателя switch, примерно так
while(menu_rk!=CANCEL_KEY) //пока не нажали "Отмена"
{
switch(menu_root_ptr) //в зависимости от указателя меню
{
case 0: //показываем соответствующий пункт, тут же, если была нажат клавиша "Вход" вызываем функцию подменю, для настройки некого параметра (например времени)

case 1:

case 2:
.....................
}
menu_rk=read_key(); //читаем код нажатой клавиши
switch(menu_rk)
{
//здесь тоже в зависимости от нажатой клавиши выполняем некие действия (изменяем указатель menu_root_ptr и др)
}
}


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Oct 29 2005, 16:06
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Еще такой совет - так как большая часть действий в интерфейсе с несколькими клавишами для большинства пунктов меню в значительной степени совпадает (обновление индикации, переход по меню и т.д.), то для избежания длинных switch можно завести массивы указателей на функции и выбирать по текущему индексу меню

Код
//вывод на индикатор в большинстве случае одинаковый - строка из массива
void fsmDefault();
void fsmeSetStart();
menu_handler code ShowMenu[cMenuItems] = {
    fsmDefault,      fsmeSetStart,
    ...
}

//на Enter переход вниз в большинстве случаев
void fceDefault();
void fceeSetStart();
menu_handler code CheckEnter[cMenuItems] = {
    fceDefault,      fceeSetStart,
    ...
}

То есть если нужно просто перейти вниз по нажатию Enter, это делает Default(), а если нужно что-то еще сделать, то
void fcceSetStart()
{
    ... //Do something
    fceDefault();
}

А дальше в программе просто
//check keys
switch (key)
{
case kbEnter: (CheckEnter[hMenu])(); break;
case kbUp: ...
...}
//update ind
(ShowMenu[hMenu])();
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- haker_fox   Система меню   Oct 25 2005, 07:38
- - BVU   Цитата(haker_fox @ Oct 25 2005, 11:38)Здравст...   Oct 25 2005, 08:07
- - haker_fox   ЦитатаЧто Вы конкретно хотели бы узнать (концепции...   Oct 25 2005, 08:19
|- - -Tумблер-   Цитата(haker_fox @ Oct 25 2005, 11:19)Трудно ...   Oct 26 2005, 09:08
- - &-rey   Цитата(haker_fox @ Oct 25 2005, 10:38)Здравст...   Oct 25 2005, 08:24
- - GeorgyBey   Цитата(haker_fox @ Oct 25 2005, 10:38)Здравст...   Oct 25 2005, 09:17
- - BVU   Посмотрите следующие сайты различных проектов: htt...   Oct 25 2005, 11:43
- - prottoss   Я делал меню для граф.ЖКИ. Описывал все пункты вот...   Oct 25 2005, 15:06
- - haker_fox   Всем спасибо!   Oct 25 2005, 23:26
- - GrayCat   Вдогон к сказанному prottoss: Из подобных записе...   Oct 26 2005, 07:46
- - _artem_   Statya po GUI dlya embedded systems. Ne sovsem pri...   Oct 29 2005, 05:27
|- - bialix   Цитата(_artem_ @ Oct 29 2005, 07:27)Statya po...   Oct 29 2005, 10:36
- - haker_fox   Спасибо Вам всем большое за ответы!   Oct 29 2005, 10:18
- - _artem_   Rekursiya ochen elegantnoe resenie dlya prostix me...   Oct 29 2005, 19:50
|- - bialix   Цитата(_artem_ @ Oct 29 2005, 21:50)Rekursiya...   Oct 30 2005, 23:15
|- - _artem_   Цитата(bialix @ Oct 31 2005, 01:15)Не уверен ...   Oct 31 2005, 00:35
|- - ObitJr   Цитата(bialix @ Oct 31 2005, 01:15)Цитата(_ar...   Oct 31 2005, 11:43
|- - GrayCat   Цитата(ObitJr @ Oct 31 2005, 13:43)Что Вы пон...   Nov 1 2005, 08:31
- - haker_fox   Вот решил выложить свое творение, может быть кто и...   Oct 31 2005, 00:09
- - haker_fox   ЦитатаЧто Вы понимаете под многозадачностьсю ? На...   Oct 31 2005, 12:06


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

 


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


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