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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Система меню, Меню для встраиваемых систем
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
BVU
сообщение Oct 25 2005, 08:07
Сообщение #2


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



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

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

Что Вы конкретно хотели бы узнать (концепции построения, структура, код, дизайн)?
Как правило это все назавается GUI или UI в зависимости от реализации применения. К тому же является одной из стратегий и фирменным отличием для производителя ПО (так что такие, особенно профессиональные публикации - редкость). Всегда лучше разрабатывать свое, беря за основу концепции построения наиболее полностью удовлетворяющие функциональные потребности проекта.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 25 2005, 08:19
Сообщение #3


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

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



Цитата
Что Вы конкретно хотели бы узнать (концепции построения, структура, код, дизайн)?
Как правило это все назавается GUI или UI в зависимости от реализации применения. К тому же является одной из стратегий и фирменным отличием для производителя ПО (так что такие, особенно профессиональные публикации - редкость). Всегда лучше разрабатывать свое, беря за основу концепции построения наиболее полностью удовлетворяющие функциональные потребности проекта.


Трудно сказать, что мне надо, пажалуй все по этой теме. Как я уже писал мне просто хочется взглянуть на чужую работу. Графический интерфейс мне пока не нужен. У меня меню, типа как в китайских часах, но может чуть посложнее. Я его уже сделал, но хотел бы посмотреть как это делают другие. Но раз это такая редкость, не страшно - ведь меню-то я сделал.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Oct 25 2005, 08:24
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



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

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


Гляди в почте мой вариант smile.gif Только он под обычный ЖКД но структура сходная...
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Oct 25 2005, 09:17
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Прикрепленный файл  AVR_Butterfly_application_rev06.zip ( 64.06 килобайт ) Кол-во скачиваний: 473
Цитата(haker_fox @ Oct 25 2005, 10:38)
Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? ...
*



А в исходниках к Баттерфляю? "AVR_Butterfly_application_rev06.zip"


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
BVU
сообщение Oct 25 2005, 11:43
Сообщение #6


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Посмотрите следующие сайты различных проектов:
http://www.microsyl.com/
http://www.tietomyrsky.fi/projektit/aOS/aO...n.htm#_Toc72110
http://www.myplace.nu/avr/index.htm
и вообще смотрите проекты, где присутствуют средства индикации с возможностью установки параметров, а так же дальнейшего их просмотра.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 25 2005, 15:06
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Я делал меню для граф.ЖКИ.
Описывал все пункты вот такой структурой:

typedef struct Menu_Item_Type Menu_Item;

struct Menu_Item_Type
{ CONST_CHAR *icon; // адрес пиктограммы
CONST_CHAR *help; // адрес текстового пояснения к меню

// указатели на соседние с данным пункты меню
MENU_ITEM *left; // если смежных пунктов с данным нет, должен указывать на самого себя
MENU_ITEM *right; // если смежных пунктов с данным нет, должен указывать на самого себя
MENU_ITEM *up; // если родительских пунктов нет, должен быть равен NULL
MENU_ITEM *down; // если нисходящих пунктов нет, должен быть равен NULL

int flags; // флаги
void (*metod)(); // функция, выполняющаяся при условиях, установленных флагами
};


--------------------
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 25 2005, 23:26
Сообщение #8


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

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



Всем спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
GrayCat
сообщение Oct 26 2005, 07:46
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 7-10-05
Из: UA
Пользователь №: 9 342



Вдогон к сказанному prottoss:

Из подобных записей организуется таблица. Кроме того, заводится указатель Menu_Item *CurrentItem, котрый указывает на строку таблицы с текущим выбранным пунктом (работа с "готовым" указателем быстрее и короче вычисления адреса по индексу массива при каждом обращении). Для переключения пунктов вводится процедура int SwitchMenu(int NewMenu), котрая проверяет допустимость переключения, устанавливает *CurrentItem, выполняет всякие дополнительные действия типа уведомления других процессов о переключении, перерисовки экрана и т.п.

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


--------------------
Gray©at
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Oct 26 2005, 09:08
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(haker_fox @ Oct 25 2005, 11:19)
Трудно сказать, что мне надо, пажалуй все по этой теме. Как я уже писал мне просто хочется взглянуть на чужую работу. Графический интерфейс мне пока не нужен.
*


Совсем простой вариант - и по быстрому:
.
.
.
for (;;)
runfor

type_crlf (line);
outstr ("0. TEST RS-485\r\n", line);
outstr ("1. TEST R-29 INC\r\n", line);
outstr ("2. TEST R-29 FLOAT 1\r\n", line);
outstr ("ESC- EXIT\r\n", line);
outstr ("^C - MAIN MENU\r\n", line);
type_crlf (line);

for (j=0; j leq 0;)
run1
b =getbyte (line);
switch ( b )
runswitch

case space:
case cr:
j=1;
break;

case '0':
rs485_menu ();
j=1;
break;

case '1':

test_r29_inc ();
j=1;
break;

case '2':
test_r29_f (1);
j=1;
break;

case esc: return;

case ctlc:
ret_main_menu ();

endswitch
end1
endfor
.
.
.


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
_artem_
сообщение Oct 29 2005, 05:27
Сообщение #11


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Statya po GUI dlya embedded systems. Ne sovsem primitivnaya i ne ochen optimizirovannaya.

Ochen legko menyu delat pri pomosi rekursivnix funkciy . No pri bolsom urovne vlozeniy problemi so stekom ne minovat.
Прикрепленные файлы
Прикрепленный файл  gui.rar ( 317.8 килобайт ) Кол-во скачиваний: 1912
 


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 29 2005, 10:18
Сообщение #12


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

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



Спасибо Вам всем большое за ответы!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
bialix
сообщение Oct 29 2005, 10:36
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-11-04
Из: zp.ua
Пользователь №: 1 046



Цитата(_artem_ @ Oct 29 2005, 07:27)
Statya po GUI dlya embedded systems. Ne sovsem primitivnaya i ne ochen optimizirovannaya.

Ochen legko menyu delat pri pomosi rekursivnix funkciy . No pri bolsom urovne vlozeniy  problemi so stekom ne minovat.
*


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

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


--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 29 2005, 13:53
Сообщение #14


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

Группа: Свой
Сообщений: 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
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 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

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

 


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


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