haker_fox 60 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? Разработал для своего девайса подсистему меню и вот теперь хочу поглюдеть на чужие творенья, т.к. считаю, что мой код не оптимальный. Устройства ввода-вывода у меня чрезывачайно "приметивные": пять кнопок и десятиразрядный семисегментный ЖКД с микроконтроллером. Управляющий МК ATmega8-16PI. Искал в нете, но ничего путнего не нашел: все для компьютера. Плохо искал значит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? Разработал для своего девайса подсистему меню и вот теперь хочу поглюдеть на чужие творенья, т.к. считаю, что мой код не оптимальный. Устройства ввода-вывода у меня чрезывачайно "приметивные": пять кнопок и десятиразрядный семисегментный ЖКД с микроконтроллером. Управляющий МК ATmega8-16PI. Искал в нете, но ничего путнего не нашел: все для компьютера. Плохо искал значит <{POST_SNAPBACK}> Что Вы конкретно хотели бы узнать (концепции построения, структура, код, дизайн)? Как правило это все назавается GUI или UI в зависимости от реализации применения. К тому же является одной из стратегий и фирменным отличием для производителя ПО (так что такие, особенно профессиональные публикации - редкость). Всегда лучше разрабатывать свое, беря за основу концепции построения наиболее полностью удовлетворяющие функциональные потребности проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Что Вы конкретно хотели бы узнать (концепции построения, структура, код, дизайн)? Как правило это все назавается GUI или UI в зависимости от реализации применения. К тому же является одной из стратегий и фирменным отличием для производителя ПО (так что такие, особенно профессиональные публикации - редкость). Всегда лучше разрабатывать свое, беря за основу концепции построения наиболее полностью удовлетворяющие функциональные потребности проекта. Трудно сказать, что мне надо, пажалуй все по этой теме. Как я уже писал мне просто хочется взглянуть на чужую работу. Графический интерфейс мне пока не нужен. У меня меню, типа как в китайских часах, но может чуть посложнее. Я его уже сделал, но хотел бы посмотреть как это делают другие. Но раз это такая редкость, не страшно - ведь меню-то я сделал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? Разработал для своего девайса подсистему меню и вот теперь хочу поглюдеть на чужие творенья, т.к. считаю, что мой код не оптимальный. Устройства ввода-вывода у меня чрезывачайно "приметивные": пять кнопок и десятиразрядный семисегментный ЖКД с микроконтроллером. Управляющий МК ATmega8-16PI. Искал в нете, но ничего путнего не нашел: все для компьютера. Плохо искал значит <{POST_SNAPBACK}> Гляди в почте мой вариант :) Только он под обычный ЖКД но структура сходная... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба AVR_Butterfly_application_rev06.zip Здравствуйте! Ни кто не ткнет ссылкой на исходники меню для встраиваемых систем? ... <{POST_SNAPBACK}> А в исходниках к Баттерфляю? "AVR_Butterfly_application_rev06.zip" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Посмотрите следующие сайты различных проектов: http://www.microsyl.com/ http://www.tietomyrsky.fi/projektit/aOS/aO...n.htm#_Toc72110 http://www.myplace.nu/avr/index.htm и вообще смотрите проекты, где присутствуют средства индикации с возможностью установки параметров, а так же дальнейшего их просмотра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Я делал меню для граф.ЖКИ. Описывал все пункты вот такой структурой: 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)(); // функция, выполняющаяся при условиях, установленных флагами }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 25 октября, 2005 Опубликовано 25 октября, 2005 · Жалоба Всем спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrayCat 0 26 октября, 2005 Опубликовано 26 октября, 2005 · Жалоба Вдогон к сказанному prottoss: Из подобных записей организуется таблица. Кроме того, заводится указатель Menu_Item *CurrentItem, котрый указывает на строку таблицы с текущим выбранным пунктом (работа с "готовым" указателем быстрее и короче вычисления адреса по индексу массива при каждом обращении). Для переключения пунктов вводится процедура int SwitchMenu(int NewMenu), котрая проверяет допустимость переключения, устанавливает *CurrentItem, выполняет всякие дополнительные действия типа уведомления других процессов о переключении, перерисовки экрана и т.п. Иногда в состав struct Menu_Item_Type приходится включать указатели на процедуры обработки кнопок и вывода на экран, чтобы в каждом пункте они выполнялись по-своему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-Tумблер- 0 26 октября, 2005 Опубликовано 26 октября, 2005 · Жалоба Трудно сказать, что мне надо, пажалуй все по этой теме. Как я уже писал мне просто хочется взглянуть на чужую работу. Графический интерфейс мне пока не нужен. <{POST_SNAPBACK}> Совсем простой вариант - и по быстрому: . . . 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 . . . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_artem_ 0 29 октября, 2005 Опубликовано 29 октября, 2005 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 29 октября, 2005 Опубликовано 29 октября, 2005 · Жалоба Спасибо Вам всем большое за ответы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bialix 0 29 октября, 2005 Опубликовано 29 октября, 2005 · Жалоба 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. <{POST_SNAPBACK}> Рекурсивные функции? Этоплохой тиль и не пример для подражания. Учитывая, что меню живет в человеческом реальном времени и между обновлениями экрана будут проходить сотни мс, то наиболее оптимально строить поддержку меню, точнее пользовательского интерфейса, включая кнопки, индикацию, попискивание и т.п., на основе конечных автоматов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 29 октября, 2005 Опубликовано 29 октября, 2005 · Жалоба Рекурсивные функции? Этоплохой тиль и не пример для подражания. Учитывая, что меню живет в человеческом реальном времени и между обновлениями экрана будут проходить сотни мс, то наиболее оптимально строить поддержку меню, точнее пользовательского интерфейса, включая кнопки, индикацию, попискивание и т.п., на основе конечных автоматов. Не разу еще не использовал рекурсии, не на 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 и др) } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 29 октября, 2005 Опубликовано 29 октября, 2005 · Жалоба Еще такой совет - так как большая часть действий в интерфейсе с несколькими клавишами для большинства пунктов меню в значительной степени совпадает (обновление индикации, переход по меню и т.д.), то для избежания длинных 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])(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться