Ejecutando Qt en STM32. Parte 2. Ahora con pseudo 3d y pantalla táctil

En el proyecto Embox , hace algún tiempo lanzamos Qt en la plataforma STM32 . Un ejemplo fue la aplicación moveblocks, una animación con cuatro cuadrados azules que se mueven por la pantalla. Queríamos más, por ejemplo, para agregar interactividad, porque hay una pantalla táctil disponible en la pizarra. Elegimos la aplicación animatedtiles simplemente porque también se ve bien en una computadora. Al presionar los botones virtuales, muchos íconos se mueven suavemente por la pantalla, reuniéndose en varias formas. Además, se parece bastante a una animación 3D, e incluso teníamos dudas de que el microcontrolador pudiera hacer frente a tal tarea.



Montaje



En primer lugar, comenzamos con el montaje. La forma más sencilla de hacer esto es en el emulador QEMU. allí todo encaja exactamente desde la memoria y, por lo tanto, es fácil verificar si todos los componentes son suficientes para construir la aplicación. Después de comprobar que todos los mosaicos animados se ensamblaron correctamente, lo transferí fácilmente a la configuración de la placa que necesitaba.



Primera salida a bordo



El tamaño de pantalla para STM32F746G-Discovery es 480x272, cuando se inició la aplicación, se dibujó solo en la parte superior de la pantalla. Naturalmente, queríamos averiguar cuál era el problema. Por supuesto, puede realizar la depuración directamente en la placa, pero hay una solución más sencilla. ejecute la aplicación en Linux con las mismas dimensiones de 480x272 con el framebuffer virtual QVFB.



Lanzamiento en Linux



Para ejecutar en Linux, necesitamos tres partes de QVFB, la biblioteca Qt y la aplicación en sí.



QVFB es una aplicación normal que nos proporcionará una pantalla virtual para que Qt se ejecute. Lo recopilamos tal como está escrito en la documentación oficial .



Inicie con el tamaño de pantalla deseado:



./qvfb -width 480 -height 272 -nocursor
      
      





A continuación, construimos la biblioteca Qt como incrustada, es decir, Con la opción -embedded especificada. También desactivé varios módulos para acelerar la compilación, al final la configuración se veía así:



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





A continuación, construimos la aplicación animatedtiles (qmake + make). Y lanzamos la aplicación compilada, apuntándola a nuestro QVFB:



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





Después del lanzamiento, vi que en Linux también se dibuja solo en una parte de la pantalla. Modifiqué un poco los mosaicos animados agregando una opción "-pantalla completa", cuando se especifica, la aplicación se inicia en modo de pantalla completa.



Lanzar en Embox



Usaremos el código fuente modificado de la aplicación en Embox. Reconstruimos y corremos. La aplicación no se inició y Qt se quedó sin mensajes de memoria. Observamos la configuración de Embox y encontramos que el tamaño del montón está establecido en 2 MB y claramente no es suficiente. Nuevamente, puede intentar resolver este punto directamente en la placa, pero hagámoslo cómodamente en Linux.



Para hacer esto, inicie la aplicación de la siguiente manera:



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





En el archivo animatedtiles.out, vemos el valor máximo de ocupación del montón de aproximadamente 2,7 MB. Genial, ahora no tienes que adivinar, pero vuelve a Embox y establece el tamaño del montón en 3 MB.



Lanzamiento de Animatedtiles.



Inicie en STM32F769I-Discovery.



Intentemos complicar aún más la tarea y ejecutemos el mismo ejemplo en un microcontrolador similar, pero solo con una resolución de pantalla más alta: STM32F769I-Discovery (800x480). Es decir, ahora el framebuffer requerirá 1,7 veces más memoria (recuerde que el STM32F746G tiene una pantalla de 480x272), pero esto se compensa con el doble del tamaño de SDRAM (16 MB frente a 8 MB de SDRAM disponible para el STM32F746G).



Para estimar el tamaño del montón, como se indicó anteriormente, primero ejecute Qvfb y nuestra aplicación 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
      
      





Observamos el consumo de memoria en el montón: aproximadamente 6 MB (casi el doble que en el STM32F746G).



Queda por establecer el tamaño de pila deseado en mods.conf y reconstruir. La aplicación se inició de inmediato y sin problemas, como se demuestra en este breve video.





Tradicionalmente, puede reproducir los resultados usted mismo. Cómo hacer esto se describe en nuestra wiki .



Este artículo lo publicamos por primera vez en inglés en embedded.com .



All Articles