|
0 / 0 / 0
Регистрация: 25.05.2013
Сообщений: 52
|
|
GUI для встраиваемых систем05.06.2014, 12:44. Показов 22222. Ответов 23
Метки нет (Все метки)
Доброго всем дня! Понемногу изобретаю велосипед пишу GUI оболочку и решил поделиться здесь.
До этого проекта я использовал в основном 7-ми сегментные индикаторы, иногда небольшие графические LCD. Для построения менюшек неоднократно использовал подход из проекта Micromenu. Он как нельзя лучше подходит для простых систем на базе мк AVR. Однако при переползании на АРМ захотелось чего-то более серьезного и интересного. Появилась идея реализовать систему, похожую на обычный визуальный интерфейс - панельки, кнопки, чекбоксы. Примерно в то же время была опубликована статья, после прочтения которой зачесались руки и захотелось самому изобразить нечто эдакое. Главной целью была (и остается) применимость разрабатываемого GUI как к простейшим системам с монохромными дисплеями и управлением исключительно кнопками, так и к более развитым цветным дисплеям с тачскрином. Это обусловило несколько архитектурных решений - иерархическую структуру и очередь сообщений. Итак, очень кратко по характеристикам системы: GUI представляет собой дерево объектов - виджетов. Взаимодействие между виджетами происходит как напрямую, через вызов функций, так и через очередь сообщений. Виджеты имеют главную функцию обработки сообщений, могут менять свои свойства, вызывать обработчики событий. Оконного менеджера как такового нет, есть упрощенная отрисовка с учетом порядка по Z, задаваемого при инициализации системы. Виджеты создаются статично, хотя в принципе ничего не мешает добавить их динамическое добавление и удаление. Бизнес-логика и графический слой разнесены в разные файлы, благодаря чему можно использовать одно и то же ядро с разными графическими представлениями. В ядре также имеются функции для работы с программными таймерами. Есть свой простейший менеджер памяти только с выделением (практически скопированный с heap1.c FriiRTOS). Для отрисовки может использоваться фреймбуфер, но не обязательно - это зависит от целевой платформы и наличия памяти. Работать это все может как под ОС, так и без нее - интерфейс с остальной системой определяется верхним уровнем GUI, который для каждого проекта свой. Все исходики на обычном С. Для моделирования я написал простенький эмулятор на QT, так что можно быстро отладиться на PC, а потом добавить исходники в целевой проект. На мой взгляд, получилось довольно удобно - пишем и отлаживаемся с одним набором графических библиотек, при сборке уже реального проекта используются другие, платформозависимые исходники. В результате можно собирать систему по частям - профит! Оболочку я назвал emGUI. Скажу сразу, проект еще очень, очень сырой и далек от завершения. Собственно, тема и нужна чтобы сделать его лучше и поделиться с народом. Основной упор я делаю не на красивости и виджетах, а на взаимодействие компонентов оболочки, так как последнее мне представляется более важным. Проект можно использовать в каких угодно целях :) Буду рад подсказать и помочь. Приветствую вопросы, идеи, пожелания, замечания. Но! Хочу сразу предупредить - хотя emGUI уже используется в нескольких других проектах, исходники могут кардинальным образом измениться, и вероятно, не раз. Пока что из реализованных виджетов для цветных дисплеев есть кнопка, текстовый ярлык, панели, чекбокс и радиокнопка. Все они поддерживают события тачскрина. Монохромный вариант не поддерживает тачскрин и пишется для конкретного устройства - лабораторного БП. Виджетов там больше, но они писались под специфичную задачу по мере необходимости. Далее планирую продолжить рассказ более делально. По мере расширения функционала буду отписываться здесь. Кроме того, из Китая приехал тачскрин дисплей 320х240, хочу в ближайшем времени подцепить его к халявной платке с Sortix-M0 от Nuvoton и потестировать, так сказать, вживую. Платы с более народным STM32 у меня, к сожалению, нет. Все лежит тут. В репозитории имеются два тестовых проекта: QMenuSim имитирует цветной дисплей 320x240 с тачем и является основным проектом для отладки. Второй проект использовался ранее для отладки монохромного варианта, сейчас заброшен, и вероятно, будет выпилен или заменен другим. О недостатках: реализация получилась довольно громоздкая и жрущая память (относительно). Собственно, я ориентировался на ARM и на AVR вряд ли буду портировать. По большому счету, потребление памяти обусловлено "визуальным" стилем - у виджетов очень много разных свойств, которые надо где-то хранить. Ну и напоследок несколько веселых картинок: Скриншот QMenuSim (Btn2 лежит под радиокнопкой) Примитивный отображатель сигналов (курсор является костылем и накладывается поверх уже отрисованного всего)
0
|
|
| 05.06.2014, 12:44 | |
|
Ответы с готовыми решениями:
23
Что поставить на линукс для встраиваемых систем Программист C#(Создание IDE для разработчика встраиваемых систем) 70 000 Требуется Разработчик системного программного обеспечения для встраиваемых систем, г.Москва, з/п по итогам проф.собеседования |
|
0 / 0 / 0
Регистрация: 25.05.2013
Сообщений: 52
|
|||||||||||
| 05.08.2014, 17:08 | |||||||||||
|
Я вот думаю, как бы получше уйти от дублирования полей в типах виджетов. Мне видится два способа. Первый - это определение с помощью #defyme общих полей и затем подстановка макроопределения. Преимущество тут в том, что для обращения к общим полям, не нужно указывать промежуточную структуру. Выглядеть это будет где-то так (в обоих примерах виджеты урезаны дабы продемонстрировать только суть подходов): Пример 1
Пример 2
В целом кроме удобства написания кода разницы я не вижу. Может, кто чего посоветует?
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
||||||||||||||||||||||||||
| 05.08.2014, 17:32 | ||||||||||||||||||||||||||
|
2Oviko.
Я тут пытался переосмыслить вашу библиотеку, немного переписать и упростить. И я сделал как вы описали во втором случае. Есть базовый виджет:
ps. про свою функцию guiWidgets_InitWidget. Она по сути инициализирует структуру виджета параметрами по умолчанию, сходными для всех виджетов. Так же в нее я добавил такую вещь:
0
|
||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 25.05.2013
Сообщений: 52
|
|
| 05.08.2014, 18:12 | |
|
itysiy, а такой вопрос - как у вас выглядит объявление структуры контейнера, например, панели? И как будете обращаться к базовым свойствам guiWidgetBase_t ? Получится что-то типа panel1.container.widget.x = 5; Ну или через указатель с приведением типа?
0
|
|
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
||||||||||||
| 05.08.2014, 20:19 | ||||||||||||
Функция инициализации виджета панели как-то так выглядит:
0
|
||||||||||||
| 05.08.2014, 20:19 | |
|
Вакансия Разработчик встраиваемых систем. г. Владимир вакансия инженера-программиста встраиваемых систем Программист встраиваемых систем г. Санкт-Петербург Ищу стажировку, разработчик встраиваемых систем Инженер-программист встраиваемых систем, Санкт-Петербург Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|