|
Система меню, Меню для встраиваемых систем |
|
|
|
Oct 25 2005, 08:07
|

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

|
Цитата(haker_fox @ Oct 25 2005, 11:38) Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? Разработал для своего девайса подсистему меню и вот теперь хочу поглюдеть на чужие творенья, т.к. считаю, что мой код не оптимальный. Устройства ввода-вывода у меня чрезывачайно "приметивные": пять кнопок и десятиразрядный семисегментный ЖКД с микроконтроллером. Управляющий МК ATmega8-16PI. Искал в нете, но ничего путнего не нашел: все для компьютера. Плохо искал значит  Что Вы конкретно хотели бы узнать (концепции построения, структура, код, дизайн)? Как правило это все назавается GUI или UI в зависимости от реализации применения. К тому же является одной из стратегий и фирменным отличием для производителя ПО (так что такие, особенно профессиональные публикации - редкость). Всегда лучше разрабатывать свое, беря за основу концепции построения наиболее полностью удовлетворяющие функциональные потребности проекта.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Oct 25 2005, 08:19
|

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

|
Цитата Что Вы конкретно хотели бы узнать (концепции построения, структура, код, дизайн)? Как правило это все назавается GUI или UI в зависимости от реализации применения. К тому же является одной из стратегий и фирменным отличием для производителя ПО (так что такие, особенно профессиональные публикации - редкость). Всегда лучше разрабатывать свое, беря за основу концепции построения наиболее полностью удовлетворяющие функциональные потребности проекта. Трудно сказать, что мне надо, пажалуй все по этой теме. Как я уже писал мне просто хочется взглянуть на чужую работу. Графический интерфейс мне пока не нужен. У меня меню, типа как в китайских часах, но может чуть посложнее. Я его уже сделал, но хотел бы посмотреть как это делают другие. Но раз это такая редкость, не страшно - ведь меню-то я сделал.
--------------------
Выбор.
|
|
|
|
|
Oct 25 2005, 08:24
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(haker_fox @ Oct 25 2005, 10:38) Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? Разработал для своего девайса подсистему меню и вот теперь хочу поглюдеть на чужие творенья, т.к. считаю, что мой код не оптимальный. Устройства ввода-вывода у меня чрезывачайно "приметивные": пять кнопок и десятиразрядный семисегментный ЖКД с микроконтроллером. Управляющий МК ATmega8-16PI. Искал в нете, но ничего путнего не нашел: все для компьютера. Плохо искал значит  Гляди в почте мой вариант  Только он под обычный ЖКД но структура сходная...
|
|
|
|
|
Oct 25 2005, 09:17
|
Местный
  
Группа: Свой
Сообщений: 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"
--------------------
На "нет" и "нах" :)
|
|
|
|
|
Oct 26 2005, 09:08
|

Частый гость
 
Группа: Свой
Сообщений: 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 . . .
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Oct 29 2005, 10:36
|

Частый гость
 
Группа: Свой
Сообщений: 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. Рекурсивные функции? Этоплохой тиль и не пример для подражания. Учитывая, что меню живет в человеческом реальном времени и между обновлениями экрана будут проходить сотни мс, то наиболее оптимально строить поддержку меню, точнее пользовательского интерфейса, включая кнопки, индикацию, попискивание и т.п., на основе конечных автоматов.
--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
|
|
|
|
|
Oct 29 2005, 13:53
|

Познающий...
     
Группа: Свой
Сообщений: 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 и др) } }
--------------------
Выбор.
|
|
|
|
|
Oct 29 2005, 16:06
|
Местный
  
Группа: Свой
Сообщений: 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])();
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|