uGFX — графическая библиотека
для микроконтроллеров
Андрей КУРНИЦ
kurnits@stim.by
Статья знакомит читателя с графической библиотекой uGFX, рассчитанной на использование в микроконтроллерных устройствах. Показаны преимущества и недостатки применения библиотеки uGFX, даны общие сведения о ее внутренней систематизации. Приведены результаты работы библиотеки uGFX на примере демонстрационных проектов. Показано, как настроить настольный компьютер для запуска демонстрационных проектов с помощью библиотеки uGFX.
Введение
При разработке микроконтроллерного устройства, одной из функций которого является отображение графической информации, приходится решать задачу выбора графического индикатора для собственно отображения информации, а также задачу написания программного обеспечения для взаимодействия с выбранным индикатором.
Если техническое задание на разрабатываемое устройство ограничивается выводом числовой или текстовой информации, разумным решением станет использование либо сегментных, либо знакосинтезирую-щих дисплеев (например, текстовых ЖКИ на контроллере HD44780). В этом случае написание программы для вывода информации на такие дисплеи становится тривиальной задачей.
Однако в последнее время от встраиваемых устройств все чаще требуется вывод не только текстовой, но и графической информации (изображения, графики, диаграммы). Более того, нередко нужно обеспечить взаимодействие пользователя с устройством посредством полноценного графического интерфейса (GUI).
Такие требования подразумевают использование графического, зачастую цветного
дисплея и указательного (координатного) устройства ввода информации (например, сенсорной панели поверх дисплея).
В этом случае выбор дисплея сводится к двум вариантам:
• дисплей ЖКИ (или выполненный по другой технологии) без встроенного контроллера;
• дисплей со встроенным контроллером.
К преимуществам первого варианта можно отнести:
• большое разнообразие дисплеев (технология производства, диагональ, подсветка и др.);
• возможность безболезненной замены дисплея (например, в случае снятия с производства) за счет применения в таких дисплеях унифицированных интерфейсов RGB и LVDS.
Недостатками использования дисплея без контроллера в микроконтроллерном устройстве станут:
• необходимость реализовывать развертку изображения на дисплее силами микроконтроллера;
• необходимость постоянно хранить все изображение в ОЗУ, размер которого для микроконтроллеров обычно ограничен. Высокие требования к быстродействию
и объему ОЗУ микроконтроллера делают решение использовать дисплей без встроенного
контроллера малоперспективным. Хотя справедливости ради следует отметить, что эта задача успешно реализована на базе контроллера общего назначения [1]. Проблему недостаточного объема памяти микроконтроллера можно устранить подключением внешнего ОЗУ, если микроконтроллер предоставляет такую возможность [2]. Также следует упомянуть, что некоторые фирмы выпускают микроконтроллеры со встроенным контроллером графического ЖКИ-дисплея (например, STM32F429 от STMicroelectronics) [3].
Контроллеры графического дисплея обычно содержат встроенную ОЗУ (видеопамять), логическую схему для развертки изображения и интерфейс для подключения к управляющему микроконтроллеру (параллельный или последовательный). Возможно наличие ПЗУ со знакогенератором. Применение контроллера графического дисплея позволяет разгрузить основной микроконтроллер от рутинной работы по постоянной перерисовке изображения.
Поэтому использование дисплея со встроенным контроллером предпочтительно в микроконтроллерном устройстве. В таком случае упрощенная схема подключения дисплея будет такой, как на рис. 1.
Программное обеспечение
Рис. 1. Структурная схема подключения дисплея со встроенным контроллером
Контроллер графического дисплея в состоянии выполнять лишь самые низкоуровневые операции. По большому счету его функция сводится к предоставлению основному микроконтроллеру достаточного объема видеопамяти и рисованию изображения на матрице, которое хранится в этой видеопамяти.
Основной микроконтроллер же должен «позаботиться» о том, какое изображение будет выведено на дисплей. Его задача — наполнить видеопамять содержимым.
Реализовывать с нуля сложный графический интерфейс далеко не оптимальное решение. Гораздо рациональнее использовать готовую графическую библиотеку.
выбор графической библиотеки
Существует целый ряд графических библиотек, распространяемых на коммерческой основе [4]:
• цС/GUI от компании Micrium Embedded Software;
• Portable Embedded GUI Toolkit (PEG) от компании Swell Software;
• Prism GUI Toolkit от компании Blue Water Embedded;
• emWin от компании SEGGER Microcontroller;
• easyGUI от компании IBIS SOLUTIONS;
• VisualTFT от компании MikroElektronika;
• SpectraWorks GUI Toolkit от компании Monotype Imaging. Зачастую они поставляются с полноценной интегрированной
средой разработки. Однако большим недостатком все-таки остается необходимость покупки библиотеки, а в некоторых случаях — недоступность исходных кодов.
Альтернативой полностью платным продуктам является графическая библиотека uGFX [5]. Она предоставляется в виде исходных кодов и может быть скомпилирована под любой микроконтроллер. Однако uGFX не принадлежит к полностью бесплатным предложениям и распространяется под лицензией, разрешающей бесплатное использование лишь в некоммерческих продуктах.
Обзор библиотеки uGFX
Библиотека uGFX предназначена для взаимодействия с различными типами дисплеев и сенсорными панелями во встраиваемых микроконтроллерных системах. Главная цель, преследуемая библиотекой uGFX, — предоставить богатый набор возможностей, таких как инструментарий для создания полностью законченного графического интерфейса пользователя (GUI), но сохранить при этом требования к аппаратной платформе на минимальном уровне.
Ранее библиотека была частью операционной системы реального времени для микроконтроллеров ChibiOS/RT и называлась ChibiOS/GFX. Сейчас она предоставляется как отдельный продукт с поддержкой помимо ChibiOS/RT и других операционных систем, в том числе FreeRTOS. Также библиотека uGFX может работать на микроконтроллерах без операционной системы вообще.
Библиотека uGFX полностью написана на языке C, что не препятствует ее использованию без каких-либо модификаций в приложениях, написанных на языке C++.
Что касается применения в реальных проектах, можно ознакомиться с видеоматериалом [9], в котором представлена панель управления «Измеритель уровня У1500М». В описании [9] утверждается, что для создания этого устройства использовалась графическая библиотека uGFX совместно с операционной системой ChibiOS/RT. Показана работа панели, можно видеть, что uGFX позволяет выводить русскоязычный текст (поддержка кириллицы). Ключевые особенности библиотеки uGFX:
• Поставляется в виде исходных файлов.
• Полностью написана на языке C. Библиотека может быть использована в проекте, написанном на языке C++, без изменений.
• Не зависит от платформы, нет привязки к типу микроконтроллера.
• Поддерживает множество контроллеров дисплея (около 15) и сенсорного экрана.
• Нетребовательна к ресурсам микроконтроллера.
• Библиотека uGFX активно разрабатывается и поддерживается. Постоянно обновляемая информация на официальной странице в Интернете [5].
• Весь исходный код библиотеки документирован с помощью системы автоматического документирования Doxygen [7].
Другие особенности uGFX:
• Богатые возможности отображения шрифтов:
- поддержка кодировки Unicode — отображение любых букв любых алфавитов;
- кернинг и сглаживание (anti-aliasing) шрифтов;
- поддержка шрифтов TrueType.
• Поддержка нескольких дисплеев одновременно.
• Поддержка функции удаленного дисплея через протокол TCP/IP.
• Поддержка портретной и альбомной ориентации дисплея, возможность инверсии.
• Полностью законченный инструментарий для создания оконного графического интерфейса пользователя.
• Опциональное использование кадрового буфера (framebuffer).
• Поддержка аппаратного ускорения вывода графики.
• Простой доступ к файлам с помощью различных файловых систем, встроенная реализация файловой системы FAT (FatFS от ChaN [6]).
• Позволяет проигрывать и записывать звуковые файлы с помощью встроенного или внешнего кодека.
• Не существует никаких ограничений для некоммерческого использования библиотеки uGFX, в том числе и в проектах с открытым аппаратным обеспечением. Для коммерческого применения существует отдельная лицензия.
Поддерживаемые платформы
целевая операционная система
Программа с использованием библиотеки uGFX может выполняться на следующих операционных системах:
• ChibiOS/RT (поддерживаются версии ChibiOS/RT 2.x и 3.x).
• FreeRTOS (дополнительно поддержка пакета FreeRTOS+Trace).
• Без операционной системы (примитивный планировщик включен в состав uGFX).
• eCOS.
• Linux (для одноплатных компьютеров наподобие RaspberryPi или BeagleBone).
• Win32, Mac OS X (для оценки возможностей библиотеки и отладки частей программы на настольном компьютере). Возможность скомпилировать программу, использующую uGFX,
на настольных операционных системах (Linux, Windows, Mac OS) открывает перспективу для удобной отладки графической части приложения прямо на персональном компьютере.
контроллер графического дисплея
Список поддерживаемых графических контроллеров и их интерфейсов подключения к основному микроконтроллеру сведен в таблицу 1.
Можно отметить, что для каждого графического контроллера, указанного в таблице 1, на рынке представлен целый ряд дисплеев, различающихся разрешением и конструктивными особенностями, а также компанией-производителем.
Следует обратить внимание на поддержку такого экзотического для микроконтроллерных устройств дисплея, как ED060SC4 — дисплея на электронных чернилах (e-ink или e-paper). Для управления дисплеем ED060SC4 нет необходимости в отдельном графическом контроллере.
Таблица 1. Поддерживаемые типы графических контроллеров
Производитель Название Интерфейс Технология дисплея Максимальное разрешение, точек/ глубина цвета, бит
Ilitek ILI9320 параллельный TFT 320x240/18
ILI9325 параллельный TFT 320x240/18
ILI9481 параллельный TFT 480x320/18
ILI9341 SPI TFT 320x240/18
LG LGDP4532 параллельный TFT 320x240/18
Solomon Systech SSD1289 параллельный TFT 320x240/18
SSD1306 12С^Р1 OLED/PLED 128x64/1
SSD1963 параллельный TFT 864x480/24
SSD2119 параллельный TFT 320x240/18
Samsung S6D1121 параллельный TFT 320x240/18
Sitronix ST7565 12С^Р1 Монохромный LCD 132x65/1
RAiO RA8875 параллельный TFT 800x480/18/16
Himax HX8347D SPI TFT 320x240/18
Philips PCF8833 SPI TFT 132x132/12
PCF8812 SPI Монохромный LCD 102x65/1
PCD8544 SPI Монохромный LCD 84x48/1
Prime view ED060SC4 параллельный E-ink Vizplex 800x600/1
контроллер сенсорного экрана
Список поддерживаемых контроллеров приведен в таблице 2.
Таблица 2. Поддерживаемые типы контроллеров сенсорного экрана
Производитель Название Интерфейс Технология панели
ST STMPE811 I2C Резистивная
FocalTech FT5x06 I2C Емкостная
Texas Instruments и др. ADS7843 (аналоги: XPT2046, TSC2046,UH7843) SPI Резистивная
- Встроенный АЦП микроконтроллера - Резистивная
микроконтроллер (процессор)
Библиотека uGFX не привязана ни к какой процессорной архитектуре, ни к разрядности процессора. Она представлена в виде исходного кода на языке С. Поэтому единственное необходимое и достаточное условие для использования uGFX на каком-либо конкретном микроконтроллере — наличие компилятора языка С (стандарта ANSI C [8]) для данного микроконтроллера.
Поддержка оценочных плат
Такая свобода в выборе процессора, операционной системы, графического контроллера и контроллера сенсорного дисплея подразумевает требование к программисту обеспечить работу своего приложения и библиотеки uGFX на выбранной аппаратной и программной платформе. Это значит, программисту придется написать реализацию нескольких низкоуровневых функций языка С.
Однако чтобы предоставить возможность опробовать uGFX без ее подробного изучения, прямо «из коробки», в состав библиотеки включена поддержка ряда оценочных плат разработчика (evaluation kit, starter kit), выпускаемых такими известными фирмами, как Olimex, Mikromedia, Embest. Список плат приведен в таблице 3.
Таблица 3. Поддерживаемые платы разработчика
Произво- Название Микро- Графический
дитель контроллер контроллер
Olimex STM32-LCD STM32F103ZE ILI9325
Olimex SAM7EX256 AT91SAM7X256 PCF8833
Mikromedia STM32-M4 STM32F407VGT6 ILI9341
Embest STM32-DM-STF4BB STM32F407VGT6 SSD2119
FireBull FB-STM32F103 STM32F103VET6 SSD1289
К сожалению, для всех плат, упомянутых выше, подразумевается выполнение библиотеки uGFX только на операционной системе ChibiOS/RT.
Структура uGFX
Автор использовал последнюю версию uGFX на момент написания статьи — версию 2.1 от 19 июня 2014 года. При использовании другой версии структура каталогов может отличаться.
Структура каталогов, файлы
Структура каталогов в дистрибутиве uGFX показана на рис. 2. Здесь и далее подразумевается, что архив с библиотекой был распакован в каталог /ugfx/, все пути указаны относительно этого каталога.
Файлы в каталогах на рис. 2 имеют следующие расширения:
• *. c — файлы с исходным кодом частей библиотеки на языке С, демонстрационных примеров и др.
• *.h — заголовочные файлы языка С, могут содержать различные константы, макросы, исходный код, настройки компиляции и др.
• *. o — объектные файлы, результат компиляции исходных файлов. Созданы неизвестным компилятором с неизвестными настройками, поэтому для беспрепятственного использования uGFX на выбранной платформе их следует удалить.
• *. mk — специальные make-файлы, используемые утилитой make, входящей в состав компилятора. Make-файлы содержат указания компилятору, какие файлы с исходным кодом компилировать и какие заголовочные файлы при этом использовать. Следует обратить внимание на использование make-файлов. При создании своего приложения с помощью библиотеки uGFX это предполагает применение компилятора, работающего с make-файлами, например gcc из набора GNU Compiler Collection.
Как видно из рис. 2, структура файлов библиотеки uGFX довольно сложна. Для упрощения ее компиляции по всем каталогам «разбросаны» make-файлы, содержащие указания к компиляции той или иной части библиотеки. Чтобы использовать библиотеку uGFX в своем проекте, главный make-файл проекта должен содержать инструкции подключения (include) тех или иных make-файлов библиотеки. Подробнее об этом сказано ниже.
модули
Библиотека uGFX разделена на несколько модулей. Каждый модуль выполняет свою задачу: например, модуль GDISP — управление дисплеем, GFILE — работа с файлами.
Название модуля начинается с буквы «G», за которой следует имя, определяющее его назначение. Реализация всех модулей находится в каталоге \src\, для каждого модуля существует свой каталог, совпадающий по названию с модулем (рис. 2).
Всего в состав uGFX входит 12 модулей, однако прикладная программа обычно взаимодействует с uGFX посредством лишь пяти модулей:
• GDISP — реализует интерфейс с графическим дисплеем, содержит богатый набор функций для рисования графических примитивов. Кроме этого, отвечает за рисование шрифтов и кадрирование (clipping).
• GINPUT — обеспечивает взаимодействие различных периферийных устройств, например сенсорной панели и аппаратных
-l.pflhl ■ bjbo*!*]
• QPM1
. |F rmKKtsi м:и [jMKTMiiH) |F НЫЧН1 si4:h/j mi ni|
лакни)
|M|ltl(upihS> МНПГ МЧИ !SMP|
_ j[*ww-SAM re of nj
lübnei SAM JTX3» w I7|
. ¡rftrvn -STM3Í 4 r;t'i|
.Dldmq
Jiaan^l
* - ■
: |П1.1лаы*|
_'[ЬЙКЬНА^
IIS**)
..J.M'íWj - JÜíffl
-.(»anl
.,¡ГОЛИ I
JlmulhfJci ruptapl
ijripiKimpI
4ртп|
..1ршл| ^JviHKÍI |[HbÚI|
Лнлклд][
l|H Пйп) .jjll
цинпэч ариям«
.Ji|rlrtf|| Jll.(líM!i535 ■ IHCHHOOIOGÍB] .ihto^HHHOOfUl :1HABS?4 l[3№jt}l¡ ]|S3DiaB ;]550150в] .iSSfHWjJ .JS30ÍN1(4 ЦЕГПеч Si |Л||
>
. :(ADSJM31
..¡I v.inr,] - hCul
-¿llmdlvfal
cm
VJTJLÍ|
шиит
фНЧ ||№?с]
j|loiKt._<lnvw tntl
Рис. 2. Структура каталогов uGFX
кнопок — с остальной частью библиотеки uGFX.
GWIN — объединяет другие модули библиотеки для построения законченного графического пользовательского интерфейса (GUI). Предоставляет средства для создания графических окон, кнопок, флажков и даже диаграмм.
Прикладное приложение
I
_Î_
Графическая библиотека uGFX
GWIN. Менеджер виджетов
1 г г
GDISP. Вывод графики GINPUT. Ввсщ информации
i 1 ' 1 :
Сенсорная Цифровые Аналоговые панель входы входы
1 i
GOS. Взаимодействие с операционной системой
¿i
_Ï_
Операционная система (ChibiOS, FreeRTOS, STDperiph и др.)
• GEVENT — модуль отвечает за механизм сообщений, объединяющий модули GINPUT и GWIN.
• GAUDIO — модуль предоставляет средства для записи и проигрывания звуков.
На рис. 3 показано типовое взаимодействие прикладного приложения, библиотеки uGFX и операционной системы.
Остальные модули применяются самой библиотекой uGFX, однако некоторые из них программист может использовать в своем приложении:
• GFILE — обеспечивает взаимодействие с различными файловыми системами через единый API-интерфейс.
• GTIMER — содержит реализацию программных таймеров. Используется только самой uGFX.
• GQUEUE — содержит реализацию таких структур данных, как синхронные/асинхронные очереди, реализацию буферов.
• GOS — слой взаимодействия библиотеки uGFX с операционной системой.
• GADC — общий API для получения аналоговых величин, только внутреннее использование.
• GMISC — модуль содержит различные функции, которые не вошли в остальные модули, например, здесь реализован табличный метод вычисления тригонометрических функций. Используется только внутри uGFX.
демонстрационные проекты
Примеры проектов, выполненных с применением библиотеки uGFX, находятся в каталоге \demos\. В каталоге \demos\modules\ содержатся проекты для демонстрации возможностей того или иного модуля, например в каталоге \demos\modules\gwin\graph\ имеется проект, демонстрирующий возможности рисования графиков средствами модуля GWIN.
В каталоге \demos\applications\ представлены примитивные, но все же законченные проекты — так, в \demos\applications\notepad\ содержится исходный код простейшей программы для рисования на экране (аналог Paint из Microsoft Windows).
В каталоге \demos\3rdparty\ содержатся проекты, созданные энтузиастами, например клон старой компьютерной игры Doom.
драйверы и файлы поддержки платформы (Board file)
Следующие модули uGFX нуждаются во взаимодействии с периферией микроконтроллера: GDISP, GINPUT, GAUDIO. Такие модули взаимодействуют с периферией через драйвер. Драйверы для каждого модуля находятся в каталоге \drivers\. Например, в каталоге \drivers\gdisp\ILI9341\ есть драйвер для управления дисплеем на основе контроллера ILI9341.
Каждый драйвер нуждается в файле поддержки платформы, чтобы взаимодействовать с периферией. Программист должен написать
Рис. 3. Взаимодействие приложения с библиотекой uGFX
файл поддержки платформы, так как порядок взаимодействия с периферией определяется не только наличием, например, того или иного графического контроллера, но и способом его подключения к главному микроконтроллеру.
Программисту не нужно писать файл поддержки платформы с чистого листа. Каждый драйвер, входящий в состав uGFX, содержит шаблон требуемого файла поддержки платформы. Используя этот шаблон, программисту следует реализовать несколько функций языка С для взаимодействия с выбранным периферийным устройством. Так, шаблон для драйвера графического контроллера ILI9341 — это файл \drivers\ gdisp\ILI9341\board_ILI9341_template. h.
Для каждой поддерживаемой оценочной платы поставляются готовые файлы поддержки платформы — для каждого физического устройства, размещенного на данной плате. Так что можно позаимствовать готовый файл поддержки платформы.
конфигурация uGFX
Для экономии памяти программ некоторые модули предлагается исключить или добавить в свой проект. Кроме этого, для каждого модуля предусмотрена тонкая настройка его возможностей.
Все это не трудно сделать, создав конфигурационный файл gfxconf.h, который обязательно должен находиться в проекте, использующем uGFX.
Опять-таки, в состав uGFX включен шаблон конфигурационного файла, он называется gfxconf.example.h и находится в корневом каталоге библиотеки uGFX.
Сборка демонстрационного приложения на Windows
Как уже говорилось, uGFX может выполняться на настольных операционных системах, в том числе Windows. Это позволяет разработчику оценить библиотеку uGFX прямо на рабочем компьютере.
Рассмотрим шаги, которые необходимо выполнить для сборки любого демонстрационного проекта из состава uGFX на настольной версии Windows. Автор работал на 64-битной Windows 7. Версия библиотеки uGFX — release 2.1 от 19 июня 2014.
Библиотека uGFX оптимизирована для сборки с помощью компилятора, поддерживающего make-файлы. Для Windows рекомендуется использовать порт GNU GCC компилятора — MinGW [10]. На сайте, посвященном библиотеке uGFX [11], указано, что необходим еще пакет Cygwin, однако автору удалось собрать все демонстрационные приложения без этого пакета.
установка MinGW
Установку MinGW можно выполнить несколькими путями, автор загрузил с официального сайта [12] установщик с графическим интерфейсом MinGW Installation Manager (рис. 4).
С помощью установщика нужно установить следующие составные части MinGW:
• mingw32-base;
• mingw32-gcc;
• mingw32-binutils;
• mingw32-libgcc;
• mingw32-w32api.
GFXLIB = e:/ugfx
• задает путь к установленной библиотеке uGFX;
SRC =
• определяет файлы с исходным кодом приложения;
UINCDIR = /.
• задает месторасположение подключаемых заголовочных файлов в данном случае Рис. 4. Установщик составных частей компилятора MinGW тот же каталог, где ШХОДЯТСЯ Шкйк и шт^
include $(GFXLIB)/boards/base/Win32/board.mk
Каталог для установки: c:\MinGW\. Для проверки, установлен ли компилятор, в командной строке Windows можно набрать:
C:\MinGW\bin>mingw32-make
Компилятор должен дать примерно следующий ответ:
mingw32-make: *** No targets specified and no makefile found. Stop.
установка uGFX
Для установки uGFX достаточно из раздела Downloads на официальном сайте [5] скачать архив с последней на дату написания статьи версией uGFX. В нашем случае это файл ugfx_release_21_140619.zip. Архив содержит ка-талог\ugfx\, его можно распаковать в корень какого-либо диска, например так: e:\ugfx\.
Сразу же следует удалить все объектные файлы с расширением *.o из каталога e:\ugfx\ и его подкаталогов. Это удобно сделать с помощью файлового менеджера Total Commander.
демонстрационный проект. Создание make-файла
В качестве демонстрационного проекта выберем проект, находящийся в каталоге e:\ugfx\demos\modules\gwin\widgets\. Проект демонстрирует создание законченного графического интерфейса со ставшими привычными элементами, такими как:
• графические кнопки (Button),
• метки (Label),
• Progress Bar,
• Radio button и др.
Для сборки демонстрационного проекта необходимо создать главный make-файл в каталоге e:\ugfx\demos\modules\gwin\widgets\. Make-файл содержит указания компилятору, какие файлы надо компилировать, его имя должно быть Makefile без расширения. Рекомендуемый образец make-файла для сборки под Windows можно найти на сайте [11].
Содержимое make-файла, который использовал автор:
# Compiler, optimizer and uGFX library location GFXLIB = e:/ugfx
CC = mingw32-gcc
CCOPT = -g -ggdb -OO -fomit-frame-pointer -Wall -Wextra -Wstrict-
prototypes
LDOPT = -g
# »»»»»»» Start: Your Project Settings **************
# Your project directories UINCDIR = /. ULIBDIR =
# Your project definitions and libraries UDEFS =
ULIBS =
# Your project executable PROJECT = uGFX.exe
# Your project C source files SRC =
# Your project uGFX drivers
include $(GFXLffi)/boards/base/Wm32/board.mk include demo.mk
# ******* End: Your Project Settings **************
# The default directories, libraries and source include $(GFXLIB)/gfx.mk
DSRC = $(GFXSRC) $(MYCSRC)
DINCDIR = $(GFXINC) $(MYFILES)
DLIBDIR =
DLIBS = ws2_32 gdi32
DDEFS =
# Putting it all together - Object files and compiler flags OBJS = $(DSRC:.c=.o) $(SRC:.c=.o)
LDFLAGS = $(LDOPT) $(patsubst %,-L%, $(ULIBDIR) $(DLIBDIR)) $(patsubst %,-l%, $(ULIBS) $(DLIBS))
CCFLAGS = $(CCOPT) $(patsubst %,-D%, $(UDEFS) $(DDEFS)) $(patsubst %,-I%, . $(UINCDIR) $(DINCDIR))
# Makefile rules
all: $(OBJS) $(PROJECT)
%.o : %.c
$(CC) -DGFX_USE_OS_WIN32=TRUE -c $(CCFLAGS) $< -o $@
%.exe: $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) -o $@
run: $(PROJECT) ./$(PROJECT)
clean:
-rm -f $(OBJS) -rm -f $(PROJECT)
Обратить внимание следует на строки, которые, возможно, придется редактировать:
• указывает применить дополнительный make-файл board.mk, входящий в состав uGFX. Этот make-файл в свою очередь определяет, что будет использоваться файл поддержки платформы для операционной системы Windows;
include demo.mk
• указывает использовать еще один make-файл demo.mk, он находится в каталоге с демонстрационным приложением e:\ugfx\demos\modules\gwin\widgets\ и предписывает включить в сборку исходные файлы демонстрационного проекта.
Сборка проекта и запуск
Автор выбрал способ сборки самым примитивным способом — через командную строку. Для этого необходимо выполнить «Обработчик команд Windows» — файл cmd.exe и перейти в каталог с демонстрационным проектом. Приглашение командной строки должно выглядеть приблизительно так:
e:\ugfx\demos\modules\gwin\widgets>
Следует убедиться, что make-файл Makefile находится в данном каталоге.
Далее нужно добавить в переменную среды окружения path путь к компилятору, в нашем случае C:\MinGW\bin\:
e:\ugfx\demos\modules\gwin\widgets>set path=C:\MinGW\bin\
После чего можно приступить к сборке проекта с помощью утилиты make, входящей в состав MinGW:
e:\ugfx\demos\modules\gwin\widgets>mingw32-make all
Рис. 5. Работа демонстрационного приложения uGFX.
Пример графического интерфейса пользователя Рис. 6. Приложение Bubbles. 3D-график, меняющий свою форму
Далее должен последовать процесс сборки, в результате которого в каталоге проекта появится исполняемый файл uGFX.exe, запустив который можно видеть демонстрацию работы библиотеки uGFX (рис. 5).
С помощью мыши следует проверить реакцию элементов на действия пользователя.
Таким же способом можно запустить и другие демонстрационные проекты из состава uGFX. Для этого надо:
• скопировать make-файл Makefile в каталог с проектом;
• удалить все ранее созданные объектные файлы *.o из каталога с uGFX и всех подкаталогов;
• выполнить сборку с помощью команды mingw32-make all.
Примеры изображений, созданных uGFX
Приведем примеры изображений, полученных с помощью демонстрационных программ, входящих в состав uGFX.
На рис. 6 виден результат работы демонстрационного приложения Bubbles. Используется модуль GDISP для отображения множества разноцветных окружностей с заданными координатами.
На рис. 7 приведен результат работы демонстрационного приложения Mandelbrot. Используется модуль GDISP для построения изображения по отдельным точкам.
На рис. 8 показан результат работы демонстрационного приложения Circles. Используется модуль GDISP для рисования графических примитивов: окружностей, эллипсов, дуг, секторов.
На рис. 9 представлены различные вкладки приложения Widgets (демонстрация полноценного графического интерфейса пользователя). На рис. 9в показан пример смены палитры оконного интерфейса. Используются модули GWIN, GDISP, GEVENT, GTIMER, GQUEUE, GINPUT и GFILE.
На рис. 10 представлена работа демонстрационного приложения, находящегося в каталоге \ugfx\demos\modules\gwin\graph\. Показаны возможности uGFX в выводе двумерных графиков функций, используются модули GWIN, GDISP.
На рис. 11 приведен результат работы демонстрационного приложения, находящегося в каталоге \ugfx\demos\modules\gwin\console\. Показана возможность uGFX выводить несколько консолей на одном экране. Есть возможность задания цветов текста и фона. Используются модули GWIN, GDISP.
На рис. 12 приведен результат работы демонстрационного приложения, находящегося в каталоге \ugfx\demos\modules\gdisp\fonts\. Показана возможность выводить текст одновременно несколькими разными шрифтами и несколькими размерами (на рис. 12 использо-
Рис. 7. Приложение Mandelbrot. Динамическое фрактальное изображение
Рис. 8. Приложение Circles. Рисование графических примитивов
feitïùni lUitri >«Lkbai J ■.adoSi ugÇi | LaùiJii "ii]ii | Рг-7-rcibér
MwL 1 luttw: J klicl 1 lui ton« 1 ■мм *r«a 1чниаг>| 1-1 LaJ
■<НЧ VJIjO 4>4tfCHM 4*il3 -Ir-sup l-ihprfcfcr"
ÎKitklrtji ta«ÉhrtirJ
yy
и
Caaùl* «I
'ми m
АМй l*Chirtlnx . Г 111-tri Al-UnChfcÇfcki
-Voup iJ Ч*ЛП >-U1 ДО*« ■*iij Sr-зцз
С de«-S г Мл» froid J-ai=i.l
СЫъг
Util- <>1UI : ■ !!=!.k
:ri*-14* LNIV [rhnè
^«çtÇwwSrhm* М*4к<>-Jiu
ц» r.tiir :rh«M
•*in t*,3iX3 ftectattfau
«.Çr-MpMbijri a OrouA É4bï|l
Ъляц
4«!м ->iiiB l-Usïi L„tl,! )<«EcfeM
L-iï L2 iïm 2 ¡riiirti
" iup Л-чЧЬ?«
iiii> IflMA»
Q*
Qnhii
lïtînSiï S йвьпЯ*4
Miriii'inSUiirnd "•¿к «Au i-Lïbtii
"aiu 'V-3UJ ï—nrjiiis
Voir 1-fl*iHi a«n V iud ?RVtl«w С KL" jiln—w
11*J|J -Ш f-n«jCI
Н*1И i-м JHliK. CKonff Crier Schtmc
-V--3U1 ЕтЭгвдгрясЬлг P*4u Сг-ни I-L-3^1
Рис. 9. Приложение Widgets: а) графические кнопки;
б) элементы интерфейса checkbox; в) элементы интерфейса radio button;
г) элементы интерфейса «списки»; д) вывод растрового изображения
Рис. 12. Пример вывода шрифтов
вано два разных шрифта с размером 10 и 11 пикселей). Для вывода шрифта необходим только модуль GDISP.
В состав uGFX включено также простейшее демонстрационное приложение для рисования на экране — аналог программы Paint для Windows. Оно находится в каталоге \ugfx\demos\applications\notepad\, пример работы показан на рис. 13.
В приложении Notepad с помощью мыши можно выбирать цвет кисти, ее размер и далее рисовать на экране. Приложение использует следующие модули uGFX: GDISP, GEVENT, GTIMER, GINPUT.
В видеоматериале [13] можно посмотреть на работу приложения Notepad непосредственно на плате разработчика STM32F429I-Disco под управлением FreeRTOS.
Выводы
Подводя итог, можно назвать следующие достоинства библиотеки uGFX:
• богатые возможности;
• независимость от аппаратной части и операционной системы;
• большой список поддерживаемых контроллеров дисплеев и сенсорных панелей;
• открытый исходный код.
К недостаткам следует отнести относительную сложность в изучении и отсутствие русскоязычных материалов, однако эта и последующие статьи призваны скомпенсировать данный недостаток.
Темой следующей статьи станет настройка и запуск библиотеки uGFX на реальном микроконтроллере с реальным, подключенным к микроконтроллеру дисплеем. ■
литература
1. Ягов Д. И невозможное станет возможным. RGB-интерфейс, реализованный на микроконтроллере за $1 // Компоненты и технологии. 2012. № 2.
2. Подключение цветного LCD с сенсорным экраном к микроконтроллеру. http:// habrahabr.ru/post/140415/
3. Гавриков В. Мастера графики: новое поколение STM32F4 с поддержкой контроллера TFT // Новости электроники. 2013. № 8.
4. http://makesystem.net/?p=457
5. http://ugfx.org/
6. http://elm-chan.org/fsw/ff/00index_e.html
Рис. 13. Работа приложения Notepad
7. http://ru.wikipedia.org/wiki/Doxygen
8. http://ru.wikipedia.org/wiki/ANSI_C
9. http://www.youtube.com/watch?v=GWIHuUHDxAc
10. www.mingw.org
11. http://ugfx.org/get-ugfx/11-documentation/ 60-get-ugfx-win32
12. http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/ download
13. https://www.youtube.com/watch?v=ZP_QPXTheLM
/-■'- U
С -!_п_
Щ430421.008ТУ
pc улучшенными техни характеристиками
Неси.
Рабочий так нэ контакт
ИРЯР^f^p. I
mm . т
/-~>Им| (V fcdi
Я J
J
г
Максимальный тон из контакт