Подробное объяснение графической системы Quanzhi R128GUI — глава LVGL
Подробное объяснение графической системы Quanzhi R128GUI — глава LVGL

Графическая система с графическим интерфейсом

Для платформы R128 в качестве графической системы предусмотрена LVGL.

Описание ЛВГЛ

LVGL — это бесплатная графическая библиотека с открытым исходным кодом, которая предоставляет все необходимое для создания встроенных графических интерфейсов. Она имеет простые в использовании графические элементы, красивые визуальные эффекты и низкое использование памяти. Она соответствует лицензионному соглашению MIT. Вы можете посетить официальный сайт LittlevGL. больше информации.

  • Мощные строительные блоки: кнопки、диаграмма、список、ползунок、изображениеждать。
  • Расширенный графический движок: анимация, сглаживание, непрозрачность, плавная прокрутка, режимы наложения и многое другое.
  • Поддерживает различные устройства ввода: сенсорный экран, мышь, клавиатуру, энкодер, кнопки и т. д.
  • Поддерживает несколько мониторов.
  • Аппаратно независим и работает с любым микроконтроллером и дисплеем.
  • Ее можно расширить, используя небольшой объем памяти (64 КБ Flash-памяти, 16 КБ ROM).
  • Многоязычная поддержка, поддерживает UTF-8. Обработка, CJK, 2-сторонняя арабская.
  • через класс стили CSS полностью настраиваемые из графических элементов.
  • Под влиянием CSS Вдохновленный мощным макетом: Flexbox иGrid。
  • Операционная система, внешний графический процессор поддерживается, но не требуется.
  • Плавный рендеринг также возможен с использованием одного кадрового буфера.
  • Написан на C и совместим с C++.
  • Micropython Binding существоватьMicropython Публичный LVGL в Китае API。
  • МожетсуществоватьPC Развивайтесь с помощью симулятора.
  • 100+ простых примеров.
  • существовать ПроволокаиPDF Формат документации и API ссылка.

В настоящее время основные компоненты LVGL 8.1.0 и демонстрационная версия перенесены в RTOS. В следующей таблице приведены описания библиотек, связанных с LVGL:

имя пакета

иллюстрировать

lv_demos

официальная демо-версия lvgl

lv_drivers

Официальный драйвер устройства lvgl, объединяющий sunxifb, sunxig2d и sunximem

lv_examples

Тестовый пример lvgl в конечном итоге вызывает функцию в lv_demos.

lvgl

основная библиотека lvgl

lv_g2d_test

Тестовый пример g2d, в частности тестирование подключенного интерфейса g2d

lv_monitor

Программное обеспечение для стресс-тестирования и мониторинга состояния

sunxifb.mk

Публичный файл конфигурации, который необходимо включить при написании Makefile приложения.

Конфигурация LVGL

mrtos_menuconfig Конфигурация следующая

Язык кода:javascript
копировать
System components --->
    thirdparty components --->
        [*] Littlevgl-8 --->
        [*] lvgl examples (официальная демо-версия lvgl)
        [ ] lvgl g2d test (g2d тестовый пример интерфейса)
        [*] lvgl-8.1.0 use sunxifb double buffer (Включите двойную буферизацию, чтобы решить проблему разрыва)
        [*] lvgl-8.1.0 use sunxifb cache (включить ФБ cache)
        [ ] lvgl-8.1.0 use sunxifb g2d (Включить аппаратное ускорение G2D)
        [ ] lvgl-8.1.0 use sunxifb g2d rotate (Включить ротацию оборудования G2D)
        [ ] lvgl-8.1.0 use freetype (включить произвольный тип)

Структура LVGL

LVGL Исходный код находится по адресу lichee/rtos-components/thirdparty/littlevgl-8, Его каркас такой, как показано на рисунке:

существование Вставьте сюда описание изображения
существование Вставьте сюда описание изображения
SunxiFB

существовать sunxifb , мы предоставляем набор интерфейсов дисплея, а именно:

интерфейс

иллюстрировать

sunxifb_init

Основная функция этой функции — инициализация механизма отображения. С параметром вращения, если вращение g2d включено, используйте этот параметр, чтобы указать направление вращения.

sunxifb_exit

Эта функция относительно проста: она закрывает кеш, закрывает g2d, освобождает буфер вращения и закрывает fb0.

sunxifb_flush

Эта функция более важна, она отвечает за копирование буфера отрисовки в задний буфер и замену переднего и заднего буферов после отрисовки последнего кадра. Приложение не должно вызывать эту функцию

sunxifb_get_sizes

Эта функция получает разрешение экрана, поэтому приложению не нужно жестко запрограммировать разрешение инициализации.

sunxifb_alloc

Эта функция в основном используется для использования системной памяти для чертежей. После включения некоторых функций g2d она будет применяться для непрерывной физической памяти.

sunxifb_free

Эта функция используется для освобождения памяти, запрошенной sunxifb_alloc.

Расположение кода следующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/display/sunxifb.c

существоватьsunxifb_init(rotated),серединаrotatedизвращатьценить Можетдля:

LV_DISP_ROT_NONE,LV_DISP_ROT_90,LV_DISP_ROT_180,LV_DISP_ROT_270

Наконец, есть задание disp_drv.rotated = rotated . Без вращения g2d,также Можетобозначениеdisp_drv.sw_rotate = 1 Используйте ротацию программного обеспечения.

sunxig2d

существовать sunxig2d середина,осозналg2d ioctlизинкапсуляция,Этифункция ВсеНет необходимости в звонках через приложение,Но это может углубить понимание всей кадриз.,Сопутствующие интерфейсы следующие:

интерфейс

иллюстрировать

sunxifb_g2d_init

функцию инициализации модуля g2d, откройте узел /dev/g2d и установите g_format. Во время инициализации соответствующий журнал печатается в соответствии с включенным макросом.

sunxifb_g2d_deinit

Эта функция закрывает устройство g2d.

sunxifb_g2d_get_limit

Эта функция получает порог использования g2d.

sunxifb_g2d_blit_to_fb

Эта функция используется для копирования переднего и заднего буферов fb0. Она также может вращать буфер поворота в задний буфер.

sunxifb_g2d_fill

Эта функция использует g2d для заполнения цветового прямоугольника, и цвет может иметь прозрачность.

sunxifb_g2d_blit

Эта функция используется для копирования изображений и не позволяет смешивать изображения.

sunxifb_g2d_blend

Эта функция может выполнять смешивание изображений.

sunxifb_g2d_scale

Эта функция используется для масштабирования изображения.

Расположение кода следующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/display/sunxig2d.c

Вот и все g2d Функции были подключены lvgl Схема построения, использование lvgl из lv_draw_maplv_img_set_zoom и lv_canvas_draw_img Функцию можно использовать.

lv_g2d_test Полный пример использования из можно найти в приложении.

sunximem

существоватьsunximemсередина,Реализовано управление физической инкапсуляцией Памятьиз.,Этифункция ВсеНет необходимости в звонках через приложение,Но это может углубить понимание всей кадриз.,следующее:

интерфейс

иллюстрировать

sunxifb_mem_init

Функция будет вызываться в существующем sunxifb_init.,Инициализировать физику Интерфейс приложения Память,Использование из libuapi промежуточное программное обеспечение

sunxifb_mem_deinit

Эту функцию вызывает SunxiMemClose,выпускать Применятьинтерфейсресурс

sunxifb_mem_alloc

Функция важнее,Используется во многих местах,Нужно передать Применять Количество байтовииспользоватьиллюстрировать

sunxifb_mem_free

Эта функция используется для завершения вызова sunxifb_mem_alloc Применять Память

sunxifb_mem_get_phyaddr

Эта функция принимает sunxifb_mem_alloc Применить виртуальный адрес Памятьиз к физическому адресу, g2d Водитель принимает только buffer изфизический адрес или FD

sunxifb_mem_flush_cache

Эта функция используется для чистки sunxifb_mem_alloc Подать заявку на буфер из cache

Расположение кода следующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/display/sunxigmem.c

потому чтоg2dВодитель может толькоиспользоватьфизическая непрерывность Память,Итак, при расшифровке картинки,должен пройти sunxifb_mem_alloc применить на память.

В настоящее время реализованы только приложения bmp и png, gif и з Память, а изображения jpeg еще не реализованы.

при использовании lv_canvas_set_buffer Когда, пройди из buffer должно быть sunxifb_alloc Применять buffer,sunxifb_alloc Будет решено, необходимо ли претендовать на физическую непрерывную память.

Пользовательский холст lv_canvas еще не подключен к функции масштабирования g2d.

evdev

прикоснись к намиздаlvglчиновникизevdev

Расположение кода следующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/indev/evdev.c

lvgl Чтобы использовать сенсорную функцию, вам необходимо существовать Применить lv_drv_conf.h Конфигурация в файле:

Язык кода:javascript
копировать
# define USE_EVDEV 1

приложениеlv_drv_conf.h серединаизEVDEV_NAME Он должен соответствовать используемому драйверу сенсорного экрана, например lv_examples из файла конфигурации:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_examples/src/lv_drv_conf.h

Если в disp_drv.rotated указан поворот на 90 или 180 градусов, lvgl будет вращать координаты касания внутри себя без необходимости поворачивать координаты касания внутри драйвера сенсорного экрана.

color depth

существоватьприложение lv_conf.h Документация о глубине цвета LV_COLOR_DEPTH из Конфигурация, например. lv_examples из файла конфигурации:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_examples/src/lv_conf.h
Язык кода:javascript
копировать
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 32

Использование SPI экран, приложение LV_COLOR_DEPTH должени Экран поддерживаетсяиз Соответствие формата пикселей;в то время как другие типыизэкран,приложениеLV_COLOR_DEPTH выбирать 16 или 32 может отображаться нормально.

LV_COLOR_DEPTH выбирать16 бит по сравнению с 32 бит, объем памяти меньше, частота кадров выше, но общее количество цветов меньше, а градиентный переход цвета может быть не плавным.

Новое приложение LVGL

Рекомендуется lv_g2d_test В качестве шаблона скопируйте новый проект:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test

существовать Makefile , нужно включить sunxifb.mk общественный Конфигурация,существоватькомпилироватьприложениепередаст макрос。Способследующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test/Makefile
Язык кода:javascript
копировать
include components/common/thirdparty/littlevgl-8/sunxifb.mk

Кроме того, можно отметить, что имеются следующие Конфигурации.,Эти конфигурации необходимы по требованию, включая,существоватьна некоторых чипахда Не поддерживается G2D_BLEND Для других операций поддерживаются только простые функции вращения:

Язык кода:javascript
копировать
ifeq ($(CONFIG_LVGL8_USE_SUNXIFB_G2D),y)
CFLAGS+=-DLV_USE_SUNXIFB_G2D_FILL \
        -DLV_USE_SUNXIFB_G2D_BLEND \
        -DLV_USE_SUNXIFB_G2D_BLIT \
        -DLV_USE_SUNXIFB_G2D_SCALE
endif

существоватьприложениекомпилироватьиздействительный Makefile середина,Вы можете скомпилировать только необходимые файлы,Уменьшите размер исполняемого файла.

О лвгл Также рекомендуется использовать файл конфигурации. lv_g2d_test серединаиз,Можно сравнить с оригинальной немодифицированной конфигурацией.,Затем переключитесь соответственно в соответствии с реальной сценой.Конфигурация。Конфигурациядокументследующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test/src/lv_conf.h
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test/src/lv_drv_conf.h

Исходный файл:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lvgl/lv_conf_template.h
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/lv_drv_conf_template.h.h

Наконец, приложениеиз инициализируется, существует lv_g2d_test , существует относительно понятный процесс вызова. Следует отметить, что из есть. sunxifb_init Вам необходимо передать параметры вращения sunxifb_alloc Просто подайте заявку на память.

LVGL-запуск

Мы предоставляем несколько тестовых случаев, команды выполнения следующие:

Язык кода:javascript
копировать
lv_examples 0, is lv_demo_widgets
lv_examples 1, is lv_demo_music
lv_examples 2, is lv_demo_benchmark
lv_examples 3, is lv_demo_keypad_encoder
lv_examples 4, is lv_demo_stress

существоватьпри инициализации,Следующее будет напечатано,Будут различия в зависимости от конфигурации.,Указывает, что что-то открыто:

Язык кода:javascript
копировать
wh=800x480, vwh=800x960, bpp=32, rotated=0
Turn on double buffering.
Turn on 2d hardware acceleration.
Turn on 2d hardware acceleration fill.
Turn on 2d hardware acceleration blit.
Turn on 2d hardware acceleration blend.
Turn on 2d hardware acceleration scale.
Turn on 2d hardware acceleration rotate.

LVGL включает сенсорную функцию

lvgl Для использования сенсорной функции необходимо существованиеприложения. lv_drv_conf.h Включить макросы в файлах USE_EVDEV。Обязательным условием является подтверждение прикосновенияэкран Модуль драйвера можно загрузить нормальноиспользовать,и сделать lv_drv_conf.h серединаиз EVDEV_NAME Соответствует используемому драйверу сенсорного экрана:

Язык кода:javascript
копировать
# define USE_EVDEV 1
# define EVDEV_NAME "touchscreen"

lvgl Док-драйвер сенсорного экрана из Расположение кода следующее:

Язык кода:javascript
копировать
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/indev/evdev.c

LVGL включать LOG Отладка журнала

lvgl Поставляется с журналом Отладка журнала Функция,существоватьприложение lv_conf.h Макрос включения файла LV_USE_LOG и связанные конфигурации:

Язык кода:javascript
копировать
#define LV_USE_LOG 1
#define LV_LOG_LEVEL LV_LOG_LEVEL_INFO
#define LV_LOG_PRINTF 1

кроме тогосуществовать sunxifb.c файл или Makefile Определить макрос в LV_USE_SUNXIFB_DEBUG,Может Log Распечатать LVGL Фактическая чистка показывает частоту кадров.

На экране SPI отображается аномальное изображение LVGL.

приложение lv_conf.h документсерединаизLV_COLOR_DEPTH СПИ Экран поддерживает соответствие формата пикселей:

Язык кода:javascript
копировать
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 32
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose