Exécution de Qt sur STM32. Partie 2. Maintenant avec pseudo 3d et écran tactile

Dans le projet Embox , nous avons lancé il y a quelque temps Qt sur la plate-forme STM32 . Un exemple était l'application moveblocks, une animation avec quatre carrés bleus qui se déplacent sur l'écran. Nous voulions plus, par exemple, ajouter de l'interactivité, car un écran tactile est disponible sur le tableau. Nous avons choisi l'application animatedtiles simplement parce qu'elle a l'air cool sur un ordinateur aussi. En appuyant sur les boutons virtuels, de nombreuses icônes se déplacent en douceur sur l'écran, se rassemblant sous différentes formes. De plus, cela ressemble assez à une animation 3D, et nous avions même des doutes sur le fait que le microcontrôleur puisse faire face à une telle tâche.



Assemblée



Tout d'abord, nous commençons par l'assemblage. Le moyen le plus simple de le faire est d'utiliser l'émulateur QEMU. là, tout tient exactement de la mémoire, et par conséquent, il est facile de vérifier si tous les composants sont suffisants pour construire l'application. Après avoir vérifié que toutes les tuiles animées étaient assemblées avec succès, je les ai facilement transférées dans la configuration de la carte dont j'avais besoin.



Premier départ à bord



La taille de l'écran pour STM32F746G-Discovery est de 480x272, lorsque l'application a été lancée, elle n'était dessinée qu'en haut de l'écran. Nous voulions naturellement savoir quel était le problème. Bien sûr, vous pouvez effectuer le débogage directement sur la carte, mais il existe une solution plus simple. exécutez l'application sous Linux avec les mêmes dimensions 480x272 avec le framebuffer virtuel QVFB.



Lancement sous Linux



Pour fonctionner sous Linux, nous avons besoin de trois parties de QVFB, de la bibliothèque Qt et de l'application elle-même.



QVFB est une application régulière qui nous fournira un écran virtuel pour que Qt s'exécute. Nous les collectons comme indiqué dans la documentation officielle .



Lancer avec la taille d'écran souhaitée:



./qvfb -width 480 -height 272 -nocursor
      
      





Ensuite, nous construisons la bibliothèque Qt comme intégrée, c'est-à-dire Avec l'option -embedded spécifiée. J'ai également désactivé divers modules pour accélérer la construction, à la fin la configuration ressemblait à ceci:



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





Ensuite, nous construisons l'application animatedtiles (qmake + make). Et nous lançons l'application compilée en la pointant vers notre QVFB:



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





Après le lancement, j'ai vu que sous Linux, il ne dessine également que sur une partie de l'écran. J'ai un peu modifié les tuiles animées en ajoutant une option «-fullscreen», lorsque spécifié, l'application démarre en mode plein écran.



Lancer sur Embox



Nous utiliserons le code source modifié de l'application dans Embox. Nous reconstruisons et courons. L'application n'a pas démarré et Qt a manqué de messages de mémoire. Nous examinons la configuration d'Embox et constatons que la taille du tas est fixée à 2 Mo et n'est clairement pas suffisante. Encore une fois, vous pouvez essayer de comprendre ce point directement sur le tableau, mais faisons-le confortablement sous Linux.



Pour ce faire, lancez l'application comme suit:



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





Dans le fichier animatedtiles.out, nous voyons la valeur maximale de l'occupation du tas d'environ 2,7 Mo. Génial, maintenant vous n'avez pas à deviner, mais revenez à Embox et définissez la taille du tas sur 3MB.



Animatedtiles lancé.



Lancer sur STM32F769I-Discovery.



Essayons de compliquer encore plus la tâche et exécutons le même exemple sur un microcontrôleur similaire, mais uniquement avec une résolution d'écran plus élevée - STM32F769I-Discovery (800x480). Autrement dit, maintenant le framebuffer nécessitera 1,7 fois plus de mémoire (rappelez-vous que le STM32F746G a un écran 480x272), mais cela est compensé par deux fois la taille de la SDRAM (16 Mo contre 8 Mo de SDRAM disponible pour le STM32F746G).



Pour estimer la taille du tas, comme ci-dessus, lancez d'abord Qvfb et notre application Linux:



$ ./qvfb -width 800 -height 480 -nocursor &
$ valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
$ ms_print animatedtiles.massif > animatedtiles.out
      
      





Nous regardons la consommation de mémoire dans le tas - environ 6 Mo (presque deux fois plus que sur le STM32F746G).



Il reste à définir la taille de tas souhaitée dans mods.conf et à reconstruire. L'application a démarré immédiatement et sans problème, comme le montre cette courte vidéo





Traditionnellement, vous pouvez reproduire vous-même les résultats. Comment faire cela est décrit sur notre wiki .



Cet article a été publié pour la première fois par nous en anglais sur Embedded.com .



All Articles