Exécution d'une application Linux sur des microcontrôleurs STM32
De plus en plus de fonctionnalités sont attendues des systèmes embarqués pour les produits intelligents. Cela peut être facilement réalisé avec Linux, qui propose des logiciels pour chaque cas que vous souhaitez. Mais Linux nécessite des ressources matérielles assez importantes, notamment de la mémoire, de sorte que la plate-forme cible sera généralement assez chère et aura une consommation d'énergie élevée. D'autre part, les microcontrôleurs (MCU) modernes disposent de nombreuses ressources suffisantes pour de nombreuses tâches intelligentes. À l'aide d'un système d'exploitation en temps réel (RTOS) tel qu'Embox RTOS, qui permet l'utilisation de logiciels Linux partout, y compris les microcontrôleurs, les développeurs peuvent développer plus facilement des appareils intelligents moins chers et moins énergivores.
Dans cet article, nous discutons du lancement d'une application Qt de base sur un MCU embarqué exécutant l'Embox RTOS. Nous utilisons deux cartes monocœur à base de Cortex-M7 (216 MHz) :STM32F746g-Discovery et STM32F769i-Discovery, qui ont des écrans tactiles avec une résolution d'écran de 480 x 272 et 800 x 480, respectivement.
Il y a quelque temps, nous avons réussi à lancer un exemple Qt standard de « moveblocks » sur STM32F746-Discovery [Note 1]. Cependant nous avons voulu aller plus loin et lancer un exemple avec un écran tactile. Nous avons choisi un autre exemple standard, les ‘animatedtiles’. C'est un exemple plutôt sympa qui a l'air cool même sur les ordinateurs de bureau. C'est interactif donc on peut utiliser un écran tactile et ça ressemble aussi à une animation 3D.
Nous voulions savoir si le MCU STM32 peut fournir suffisamment de performances. Nous ne savions pas si la vitesse du processeur serait suffisante pour que cette scène de rendu soit fluide, car comme nous l'avons découvert, même le rafraîchissement de l'écran pour un affichage 800 × 480 est une opération coûteuse [Remarque 2].
Bâtiment
Tout d'abord, construisons notre application dans le cadre d'Embox. La façon la plus simple de le faire est de créer l'application pour QEMU, qui est un émulateur open source. L'utilisation de QEMU signifie que nous n'avons pas à nous soucier de la consommation de mémoire dans ce cas. Cela nous aidera à nous assurer que tous les composants nécessaires sont disponibles. Lorsque « animatedtiles » a démarré sur QEMU, nous avons facilement ajouté les composants nécessaires aux fichiers de configuration pour le STM32.
Premier lancement sur le tableau cible
Nous avons démarré avec succès les « animatedtiles » sur notre carte cible STM32F746G-Discovery, mais nous avons remarqué que seule la moitié supérieure de l'écran était dessinée. Bien sûr, nous pourrions essayer de résoudre le problème en déboguant immédiatement sur la carte, mais il existe un moyen plus simple :nous pouvons d'abord démarrer et déboguer l'exemple dans l'environnement Linux.
Débogage sur l'hôte
Pour exécuter cet exemple et déboguer votre application, vous avez besoin de la bibliothèque Qt elle-même ainsi que de QVFB, qui est une application Qt fournissant un écran virtuel. Vous pouvez construire QVFB comme décrit dans la documentation officielle.
Ensuite, vous pouvez lancer QVFB avec les résolutions d'écran requises (480×272 pour STM32F746G-Discovery) :
./qvfb -width 480 -height 272 -nocursor
Vous devez également créer une bibliothèque Qt avec un profil intégré, à savoir avec l'option « - embedded ». Cette option est conçue pour exécuter Qt sans X11 ou les environnements graphiques existants, QWS (Qt Windowing System) sera utilisé à la place. Nous avons également désactivé d'autres options et modules inutiles. La ligne de configuration résultante était la suivante :
./configure -opensource -confirm-license -debug \ -embedded -qt-gfx-qvfb -qvfb \ -no-javascript-jit -no-script -no-scripttools \ -no-qt3support -no -webkit -démos de nomake -exemples de nomake
Enfin, construisons et commençons des « tuiles animées ». L'étape de construction est comme d'habitude pour Qt (qmake; make; ). Vous devez spécifier QVFB comme affichage lors du démarrage de l'application :
./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0
Nous avons la même image dans la moitié supérieure de l'écran. Nous avons trouvé dans le code source (examples/animation/animatedtiles/main.cpp) que l'application démarre avec « view->show() », c'est-à-dire pas en mode plein écran. Après cela, nous étions entièrement convaincus que la seule moitié supérieure de l'écran servait à afficher l'application. Nous avons légèrement modifié le code des « animatedtiles », en ajoutant l'option « -fullscreen ».
Lancement sur STM32F746-discovery
Nous avons construit notre application modifiée dans Embox et vérifié qu'elle s'exécutait avec succès sur QEMU. Mais lorsque nous avons lancé l'application sur la carte cible, nous avons reçu l'erreur « Out Of Memory ». Cela signifie que la taille du tas dans notre config n'est pas suffisante pour l'application. Nous avons décidé d'utiliser des outils de développement riches sous Linux pour résoudre le problème, c'est-à-dire estimer la taille de tas requise.
Nous avions commencé notre application avec valgrind. Valgrind est un outil de débogage et de profilage de la mémoire, Massif est un profileur de tas (il fait partie de Valgrind).
$ valgrind --tool=massif --massif-out-file=animatedtiles.massif./examples/animation/animatedtiles/animatedtiles -qws -fullscreen $ ms_print tuiles animées.massif> tuiles animées.out
Et j'ai découvert que l'application avait besoin d'une taille de tas d'environ 2,7 Mo.
Nous avons configuré la taille du tas à 3 Mo dans la configuration d'Embox et avons recommencé notre démo. Il fonctionnait avec succès en mode plein écran.
Lancement sur STM32F769I-Discovery.
Nous voulions également essayer l'exemple sur une carte similaire mais avec un écran plus grand. Cet exemple a utilisé le STM32F769I-Discovery avec des résolutions d'affichage de 800 × 480. Dans ce cas, il faut presque 1Mo seulement pour le framebuffer en mode couleur 16bits (800x480x2=768000), mais il y a assez (16Mo) de SDRAM externe sur cette carte. Il suffit donc d'estimer la taille du tas.
Nous avons démarré QVFb avec les nouvelles résolutions (800×480) :
$./qvfb -width 800 -height 480 -nocursor &
Et utilisez valgrind comme la fois précédente :
$ valgrind --tool=massif --massif-out-file=animatedtiles.massif./examples/animation/animatedtiles/animatedtiles -qws -fullscreen$ ms_printanimatedtiles.massif>animatedtiles.out
Nous avions découvert qu'il avait besoin d'environ 6 Mo. Nous avions configuré une taille de tas de 6 Mo et lancé avec succès « animatedtimes » sur la carte STM32F769I.
Figure 1 :Exemple de tuiles animées QT sur la carte STM32F769I-DISCOVERY sous Embox RTOS. (Source :Embox)
Vous pouvez voir comment cela fonctionne dans cette vidéo (ci-dessous) et vous pouvez reproduire les résultats vous-même comme décrit sur notre wiki github.
Remarques :
- https://habr.com/ru/company/embox/blog/459730/] (en russe, mais également disponible dans une traduction anglaise tierce :https://sudonull.com/ post/25508-Porting-Qt-to-STM32-Embox-Blog
- https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a
Anton Bondarev est le fondateur d'Embox RTOS. Anton est diplômé de l'Université électrotechnique de Saint-Pétersbourg (LETI) en 2003 avec une maîtrise en génie électrique et a suivi des cours de troisième cycle à l'Université d'État de Saint-Pétersbourg, spécialisés en génie logiciel. Il a plus de 20 ans d'expérience dans la programmation embarquée et système. Alexandre Kalmouk est le cofondateur d'Embox RTOS. Alexander est diplômé de l'Université d'État de Saint-Pétersbourg en 2014 avec une maîtrise en mathématiques et en génie logiciel et a suivi des cours de troisième cycle à l'Université d'État de Saint-Pétersbourg, spécialisés dans la théorie du contrôle. Il a plus de 10 ans d'expérience dans la programmation de systèmes embarqués.
Contenus associés :
- Utiliser Linux avec des applications critiques :comme mélanger de l'huile et de l'eau ?
- Pourquoi le projet Yocto pour mon projet IoT ?
- Anticiper le besoin d'expertise Linux de qualité automobile
- MCU active Linux pour l'IoT industriel
- La plate-forme open source cible l'IoT avec Linux intégré
- Pilotes de périphériques Linux intégrés :Comprendre leur rôle
- Mises à jour OTA pour Linux embarqué, partie 1 - Principes de base et mise en œuvre
- Comment installer un serveur Web intégré sécurisé sur un appareil Wi-Fi à 3 $
- Maîtrisez le cycle de vie de développement logiciel sans fin des systèmes connectés, ou il vous maîtrisera
Pour plus d'informations sur Embedded, abonnez-vous à la newsletter hebdomadaire d'Embedded.
Embarqué
- Guide du cloud computing sous Linux
- Linux Cloud Hosting Vs Windows Cloud Hosting
- Classification des colorants par application
- ST lance la série de microprocesseurs STM32MP1 avec la distribution Linux
- IC de gestion de l'alimentation prend en charge la famille de processeurs d'application
- Télémétrie du capteur 2.0.1
- Java 10 - Partage de données de classe
- Qu'est-ce que Running Bond ?
- Gestion de cluster sur PLCnext ?