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é

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 :

  1. 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
  2. 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 :

Pour plus d'informations sur Embedded, abonnez-vous à la newsletter hebdomadaire d'Embedded.


Embarqué

  1. Guide du cloud computing sous Linux
  2. Linux Cloud Hosting Vs Windows Cloud Hosting
  3. Classification des colorants par application
  4. ST lance la série de microprocesseurs STM32MP1 avec la distribution Linux
  5. IC de gestion de l'alimentation prend en charge la famille de processeurs d'application
  6. Télémétrie du capteur 2.0.1
  7. Java 10 - Partage de données de classe
  8. Qu'est-ce que Running Bond ?
  9. Gestion de cluster sur PLCnext ?