Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Запуск Qt на микроконтроллерах STM32 с RTOS Embox: практическое руководство по производительности

Встраиваемые системы всё чаще должны обеспечивать расширенную функциональность. Linux предлагает обширную экосистему библиотек и инструментов, но его аппаратные требования — особенно к памяти — часто увеличивают стоимость и потребление энергии. Современные микроконтроллеры (MCU), такие как серия STM32, предоставляют достаточно ресурсов для множества умных приложений, оставаясь недорогими и энергоэффективными.

Контекст

Ранее мы демонстрировали пример Qt «moveblocks» на плате STM32F746-Discovery. Теперь мы расширяем это на пример «animatedtiles», который предлагает интерактивную 3D-графику и подходит для сенсорных экранов. Мы хотели оценить, может ли ЦПУ и память MCU обеспечить плавный рендеринг на дисплеях 480×272 или 800×480.

Сборка приложения

Сначала мы собираем пример Qt для QEMU — открытого эмулятора. Запуск приложения в QEMU устраняет необходимость предварительного выделения памяти, гарантируя наличие всех зависимостей. После проверки мы добавляем необходимые компоненты в конфигурационные файлы STM32.

Первый запуск на целевой плате

Приложение запускается на STM32F746G-Discovery, но заполняется только верхняя половина экрана. Отладка непосредственно на плате возможна, однако более эффективный подход — использовать хостовую среду для первичной отладки.

Отладка на хосте

Для запуска и отладки примера установите библиотеки Qt и QVFB (Qt Virtual Framebuffer). QVFB предоставляет виртуальный дисплей, в который Qt может рендерить. Соберите QVFB по официальной инструкции.

Запустите QVFB с разрешением платы:

./qvfb -width 480 -height 272 -nocursor

Скомпилируйте Qt с профилем embedded (без X11) и отключите ненужные модули:

./configure -opensource -confirm-license -debug \
 -embedded -qt-gfx-qvfb -qvfb \
 -no-javascript-jit -no-script -no-scripttools \
 -no-qt3support -no-webkit -nomake demos -nomake examples

Соберите и запустите animatedtiles с QVFB:

./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0

Приложение снова занимает только верхнюю половину экрана. Проверка examples/animation/animatedtiles/main.cpp показывает, что представление отображается в оконном режиме. Добавление флага -fullscreen решает проблему.

Развёртывание на STM32F746-Discovery

После изменения исходного кода мы пересобираем приложение для Embox и запускаем в QEMU. При запуске на физической плате возникает ошибка «Out Of Memory», указывающая на недостаточную кучу. Для определения требуемого размера используем инструмент Massif из Valgrind.

valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
ms_print animatedtiles.massif > animatedtiles.out

Massif сообщает о потребности в куче примерно 2,7 МБ. Увеличение кучи до 3 МБ в конфигурации Embox позволяет запустить демо в полноэкранном режиме.

Развёртывание на STM32F769I-Discovery

Плата STM32F769I-Discovery оснащена дисплеем 800×480 и 16 МБ внешней SDRAM. Кадрбуфер сам по себе потребляет ~0,8 МБ (800×480×2 байта). Нам нужно только скорректировать размер кучи.

Запустите QVFB для большего разрешения:

./qvfb -width 800 -height 480 -nocursor &

Запустите Massif снова:

valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
ms_print animatedtiles.massif > animatedtiles.out

Massif сообщает ~6 МБ кучи. Настройка кучи на 6 МБ обеспечивает полноэкранную работу на плате STM32F769I.

Запуск Qt на микроконтроллерах STM32 с RTOS Embox: практическое руководство по производительности

Посмотрите демо в видео ниже или воспроизведите шаги, следуя инструкциям на нашем GitHub wiki.

Примечания

  1. https://habr.com/ru/company/embox/blog/459730/ (на русском, также доступно на английском: https://sudonull.com/post/25508-Porting-Qt-to-STM32-Embox-Blog)
  2. https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a

Запуск Qt на микроконтроллерах STM32 с RTOS Embox: практическое руководство по производительности

Антон Бондарев — основатель Embox RTOS. Получил степень магистра электротехники в Санкт-Петербургском электротехническом университете (ЛЭТИ) в 2003 году, позже окончил аспирантуру по программной инженерии в СПбГУ. Более 20 лет опыта во встраиваемых и системных программах, руководит проектом Embox.

Запуск Qt на микроконтроллерах STM32 с RTOS Embox: практическое руководство по производительности

Александр Калмук — сооснователь Embox RTOS. Имеет степень магистра математики и программной инженерии в СПбГУ (2014), прошёл аспирантуру по теории управления. Более десяти лет занимается программированием встраиваемых систем, ключевой участник разработки Embox.


Связанный контент

Для получения большего контента по Embedded подпишитесь на еженедельную рассылку Embedded.

Встроенный

  1. Почему Linux движет облаком: исчерпывающее руководство
  2. Linux Cloud Hosting vs Windows Cloud Hosting: что выбрать для вашего бизнеса
  3. Классификация красителей по применению: от реактивных к дисперсным — обзор отрасли
  4. ST запустила STM32MP1: двухъядерный Arm Cortex MP1 с OpenSTLinux и низким потреблением
  5. ROHM запускает PMIC BD71850MWV для процессоров NXP i.MX 8M Nano
  6. Sensor Telemetry 2.0.1 — продвинутый мониторинг температуры с Azure IoT Hub
  7. Java 10: улучшение производительности через AppCDS (Application Class-Data Sharing)
  8. Бегущий шов: основная технология кладки кирпича
  9. Управление кластерами на PLCnext: Использование Kubernetes для промышленной автоматизации
  10. Оптимизация Java 9 приложений на PLCnext Control с помощью jlink