GUI для встраиваемых систем - продолжение

Продолжение

Проект был успешно запущен и внедрен, работает в одном мелкосерийном изделии.
Второе изделие в процессе.
Нашлось немного времени сделать пример.
Структура примера получилась достаточно навороченная, это скорее не пример, а шаблон проекта.
Поскольку в большинстве крупных проектах использую ОС TNKernel, соответсвенно так и построен пример.
Пример привел для keil по просьбам трудящихся :), сам обычно использую eclipse + gcc. а на работе кейл.
Теперь краткое описание структуры проекта:

проект
Папки:
  • TNKernal — собственно ОС
  • StdLb — StdPeripherial Library от ST
  • CMSYS — CMSYS Library от ST
  • GUI — ну сама библиотека gui
  • user — пользовательское приложение, включая main
  • bspStdLib — часто используемые библиотеки, типа uart, spi flash, кнопки, crc...
  • appGUI — то что выводится на экран, используя элементы библиотеки GUI
Почему я решил выложить шаблон, а не минимальный проект? Причины две:
1. лень :) мне было просто лень выпиливать лишнее
2. Поскольку приложения использующие гуи по умолчанию сравнительно сложные, то применение ОС вполне оправдано, возможно это кому-то поможет приобщиться к ОС

Подробнее об исходниках.

Функция main расположена в файле main.c :)
Глобальный инклюд соответсвенно в globals.h
аппаратная конфигурация в hw_config.h
Такой подход позволяет настраивать всю периферию в одном файле, и легко переносить проект на другое изделие
файл hw_init.c там начальная инициализация железа. лишнее выкидывать не стал, просто закомментировал, может кому понадобится
Проект сделан на STM32F407ZG при компиляции без оптимизации занимает 76кб флэши и 8.5кБ ram. Причем флэши 16кБ — это страница памяти, используемая для хранения настроек, в данном случае калибровка тачскрина. 7кб — минимальный набор шрифтов.
файл appGUI.c — задачи отображения графики в TNKernel
HMI_Control.c — собственно функция обработки.
Для оптимизации использования RAM все объекты испоульзуемые GUI задаются изначально в HMI_COntrol.h с помощью структуры

typedef struct
{
	TEXT_BUTTON textButton[MAX_NUM_TXT_BUTTON];
	GUI_CHECK_BOX checkBox[MAX_NUM_CHECK_BOX];
	GUI_LABEL label[MAX_NUM_LABEL];
	GUI_RADIO_GROUP radioGroup[MAX_NUM_RADIO_GROUP];
	GUI_UPDOWN_BOX	udBox[MAX_NUM_UDBOX];
	GUI_CHART chart[MAX_NUM_CHART];
	int16_t xTouch;
	int16_t yTouch;

} GUI_ELEMENTS;

Адрес этой структуры передается в функцию инициализации соответствующего экрана. Кроме этого, весь процесс отображения и контроля также значительно упрощается — вся обработка в двух функциях — HMI_OnPaint и HMI_TouchCtrl, а обработка определяется свойством Visible. если объект невидим, он соответсвенно и не обрабатывается. Ну и по хорошему, для динамически менящихся данных надо еще функцию HMI_Refresh. Эту функцию приводить не стал, а то, боюсь, пример бы вообще не выложил :)
Структура GUI_ELEMENTS естественно может меняться в зависимости от требований проекта.

Схема MCU части с экраном на рисунке 2.
К сожалению, сама библиотека слабо документирована, со временем думаю этим заняться, особенно елси студенты летом на практике будут :)

Ну и в заключение демовидео данного проекта

ссылка на ютуб почему то не прикрепляется, поэтому так видео

Исходники приложены вроде так
  • +4
  • 29 мая 2013, 21:19
  • AVF
  • 2
Файлы в топике: sch.png, AFGUI_20130529.zip

Комментарии (23)

RSS свернуть / развернуть
Не понял. А де демо видео? А де исходники?
0
Да… чего-то там отвалилось у него… А интересно посмотреть((
0
ага, чего то туплю. вообще скомакно получилось, так что извиняйте
0
Норм=)) Как там — «чет», «нечет»… зачет вообщем)))
0
Не, ну, классно:)
А схему еще почитабельнее можно?
0
что-то не получается с картинкой :(, может <a href="">так
0
А почему не использовать github для кода и схем?
0
просто не успел еще, вообще использую, в первой статье была ссылка
0
собственно там Github только схему пока не добавил
0
Отлично!
0
А что за музычка к видео? СОрри за оффтоп.
0
да хз. когда выкладываешь, там можно наложить дорожку, можно сказать первая попавшаяся. а то получились левые разговоре на заднем фоне.
0
Повторно откройте редактор видео, там подписывается выбранная композиция. Если конечно они не переделали интерфейс снова :)
0
In The Dark Joi Vee
0
Благодарю. И angel5a также )))
0
А дисплей на каком контроллере?
0
этот на HX8347, 9320 тоже понимает
0
Обязательно попробую, у меня вот такая плата, там как раз ILI9320.
0
1) А сама библиотека кросплатформенная?
2) ОС сам писал?)
0
библиотека да, за исключением драйверов, касающегося мк — они платформенно зависимы (типа mkDriver.c,.
ось не моя, офиц сайт tnkernel, русскоязычное отписание там
0
Реализованы ли в библиотеке сглаженные шрифты?
0
нет
0
Спасибо за статью! Ждём описания библиотек
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.