Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Embarqué

Lancement de Qt sur les MCU STM32 avec Embox RTOS : Une analyse pratique des performances

Les systèmes embarqués doivent désormais offrir des fonctionnalités plus riches. Linux fournit un vaste écosystème de bibliothèques et d'outils, mais ses exigences matérielles — notamment en mémoire — font souvent grimper les coûts et la consommation d'énergie. Les microcontrôleurs (MCU) modernes, comme la série STM32, offrent des ressources suffisantes pour de nombreuses applications intelligentes tout en restant peu coûteux et économes en énergie.

L'utilisation d'un système d'exploitation temps réel (RTOS) capable d'héberger des logiciels Linux — Embox RTOS, par exemple — permet aux développeurs de tirer parti de Linux sur des MCU. Dans cet article, nous parcourons l'exécution d'une application Qt sur deux cartes Cortex‑M7 STM32 (STM32F746G‑Discovery et STM32F769I‑Discovery) sous Embox.

Contexte

Auparavant, nous avions démontré l'exemple Qt « moveblocks » sur une carte STM32F746‑Discovery. Nous étendons désormais cette démonstration à l'exemple « animatedtiles », qui propose des graphismes 3D interactifs et convient aux écrans tactiles. Nous souhaitions évaluer si le CPU et la mémoire du MCU peuvent assurer un rendu fluide sur des affichages 480×272 ou 800×480.

Construction de l'application

Nous compilons d'abord l'exemple Qt pour QEMU, un émulateur open source. L'exécution de l'application dans QEMU évite la pré-allocation mémoire et garantit la présence de toutes les dépendances. Une fois validé, nous ajoutons les composants requis aux fichiers de configuration STM32.

Premier lancement sur la carte cible

L'application démarre sur la STM32F746G‑Discovery, mais seule la moitié supérieure de l'écran est affichée. Le débogage direct sur la carte est possible, mais une approche plus efficace consiste à utiliser l'environnement hôte pour le débogage initial.

Débogage sur l'hôte

Pour exécuter et déboguer l'exemple, installez les bibliothèques Qt et QVFB (Qt Virtual Framebuffer). QVFB fournit un affichage virtuel vers lequel Qt peut rendre. Compilez QVFB en suivant les instructions officielles.
Lancez QVFB avec la résolution de la carte :

./qvfb -width 480 -height 272 -nocursor

Compilez Qt avec le profil embarqué (sans X11) et désactivez les modules inutiles :

./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

Compilez et lancez animatedtiles avec QVFB :

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

L'application n'occupe à nouveau que la moitié supérieure de l'écran. L'inspection de examples/animation/animatedtiles/main.cpp révèle que la vue est affichée en mode fenêtré. L'ajout de l'option -fullscreen résout le problème.

Déploiement sur STM32F746‑Discovery

Après modification du code, nous recompilons l'application pour Embox et l'exécutons dans QEMU. Au lancement sur la carte physique, une erreur « Out Of Memory » indique que le tas (heap) est insuffisant. Pour déterminer la taille nécessaire, nous utilisons l'outil Massif de Valgrind.

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

Massif rapporte un besoin de tas d'environ 2,7 Mo. L'augmentation du tas à 3 Mo dans la configuration Embox permet à la démo de s'exécuter en plein écran.

Déploiement sur STM32F769I‑Discovery

La STM32F769I‑Discovery dispose d'un affichage 800×480 et de 16 Mo de SDRAM externe. Le framebuffer seul consomme ~0,8 Mo (800×480×2 octets). Il suffit d'ajuster la taille du tas.

Démarrez QVFB pour la résolution supérieure :

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

Relancez Massif :

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

Massif rapporte ~6 Mo de tas. La configuration du tas à 6 Mo permet le fonctionnement en plein écran sur la carte STM32F769I.

Lancement de Qt sur les MCU STM32 avec Embox RTOS : Une analyse pratique des performances

Regardez la démonstration dans la vidéo ci-dessous ou suivez les étapes sur notre wiki GitHub pour reproduire les résultats.

Notes

  1. https://habr.com/ru/company/embox/blog/459730/ (en russe, également disponible en anglais : 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

Lancement de Qt sur les MCU STM32 avec Embox RTOS : Une analyse pratique des performances

Anton Bondarev est le fondateur d'Embox RTOS. Il a obtenu un master en génie électrique à l'Université électrotechnique de Saint-Pétersbourg (LETI) en 2003 et a poursuivi des études postdoctorales en génie logiciel à l'Université d'État de Saint-Pétersbourg. Fort de plus de 20 ans d'expérience en programmation embarquée et système, il dirige le projet Embox.

Lancement de Qt sur les MCU STM32 avec Embox RTOS : Une analyse pratique des performances

Alexander Kalmuk est cofondateur d'Embox RTOS. Il détient un master en mathématiques et génie logiciel de l'Université d'État de Saint-Pétersbourg (2014) et a suivi des études postdoctorales en théorie du contrôle. Avec plus d'une décennie d'expérience en programmation de systèmes embarqués, il est un contributeur clé au développement d'Embox.


Contenus connexes

Pour plus d'actualités Embedded, abonnez-vous à la newsletter hebdomadaire d'Embedded.

Embarqué

  1. Pourquoi Linux propulse le cloud : guide complet
  2. Hébergement Cloud Linux vs Windows : Lequel choisir pour votre entreprise ?
  3. Classification des teintures par application : des réactives aux disperses, panorama industriel
  4. ST Lance STM32MP1 : MPU Dual-Core Arm Cortex avec OpenSTLinux et Performance Basse Consommation
  5. ROHM lance le PMIC BD71850MWV pour processeurs NXP i.MX 8M Nano
  6. Télémétrie de capteur 2.0.1 – Surveillance avancée de température avec Azure IoT Hub
  7. Java 10 : Améliorer les performances avec le partage de données de classe (AppCDS)
  8. Joints bout à bout expliqués : la technique essentielle de maçonnerie
  9. Gestion de cluster sur PLCnext : exploiter Kubernetes pour l'automatisation industrielle