Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

Ejecutar Qt en MCU STM32 con Embox RTOS: Guía práctica de rendimiento

Los sistemas embebidos deben ofrecer cada vez más funcionalidades avanzadas. Linux brinda un vasto ecosistema de librerías y herramientas, pero sus requisitos de hardware —especialmente memoria— elevan coste y consumo. Los microcontroladores (MCU) modernos, como la serie STM32, proporcionan recursos suficientes para muchas aplicaciones inteligentes manteniendo bajo coste y alta eficiencia energética.

Contexto

Previamente demostramos el ejemplo "moveblocks" de Qt en una placa STM32F746-Discovery. Ahora ampliamos al ejemplo "animatedtiles", que ofrece gráficos interactivos estilo 3D y es apto para pantallas táctiles. El objetivo era evaluar si la CPU y memoria del MCU pueden sostener renderizado fluido en pantallas de 480×272 u 800×480.

Compilación de la aplicación

Primero compilamos el ejemplo de Qt para QEMU, emulador de código abierto. Ejecutar la app en QEMU elimina la necesidad de pre-asignar memoria, asegurando que todas las dependencias estén presentes. Una vez verificado, añadimos los componentes necesarios a los archivos de configuración del STM32.

Primer arranque en la placa objetivo

La aplicación arranca en la STM32F746G-Discovery, pero solo se puebla la mitad superior de la pantalla. La depuración directa en la placa es posible, aunque un enfoque más eficiente es usar el entorno host para la depuración inicial.

Depuración en el host

Para ejecutar y depurar el ejemplo, instale las librerías Qt y QVFB (Qt Virtual Framebuffer). QVFB provee una pantalla virtual donde Qt puede renderizar. Compile QVFB siguiendo las instrucciones oficiales.

Lance QVFB con la resolución de la placa:

./qvfb -width 480 -height 272 -nocursor

Compile Qt con el perfil embebido (sin X11) y desactive módulos innecesarios:

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

Compile y lance animatedtiles con QVFB:

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

La aplicación vuelve a ocupar solo la mitad superior. Al inspeccionar examples/animation/animatedtiles/main.cpp se ve que la vista se muestra en modo ventana. Añadir la bandera -fullscreen resuelve el problema.

Despliegue en STM32F746-Discovery

Tras modificar el fuente, recompilamos la aplicación para Embox y la ejecutamos en QEMU. Al lanzar en la placa física, un error "Out Of Memory" indica que el heap es insuficiente. Para determinar el tamaño requerido, usamos la herramienta Massif de Valgrind.

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

Massif reporta un requisito de heap de ~2,7 MB. Aumentar el heap a 3 MB en la configuración de Embox permite ejecutar la demo a pantalla completa.

Despliegue en STM32F769I-Discovery

La STM32F769I-Discovery tiene pantalla 800×480 y 16 MB de SDRAM externa. El framebuffer solo consume ~0,8 MB (800×480×2 bytes). Solo hay que ajustar el tamaño del heap.

Inicie QVFB para la mayor resolución:

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

Ejecute Massif de nuevo:

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

Massif reporta ~6 MB de heap. Configurar el heap a 6 MB habilita la operación a pantalla completa en la placa STM32F769I.

Ejecutar Qt en MCU STM32 con Embox RTOS: Guía práctica de rendimiento

Vea la demo en el vídeo a continuación o siga los pasos en nuestra wiki de GitHub para reproducir los resultados.

Notas

  1. https://habr.com/ru/company/embox/blog/459730/ (en ruso, también en inglés: 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

Ejecutar Qt en MCU STM32 con Embox RTOS: Guía práctica de rendimiento

Anton Bondarev es el fundador de Embox RTOS. Obtuvo máster en ingeniería eléctrica por la Universidad Electrotécnica de San Petersburgo (LETI) en 2003 y cursó posgrado en ingeniería de software en la Universidad Estatal de San Petersburgo. Con más de 20 años en programación embebida y de sistemas, lidera el proyecto Embox.

Ejecutar Qt en MCU STM32 con Embox RTOS: Guía práctica de rendimiento

Alexander Kalmuk es cofundador de Embox RTOS. Posee máster en matemáticas e ingeniería de software por la Universidad Estatal de San Petersburgo (2014) y estudios de posgrado en teoría de control. Con más de una década en programación de sistemas embebidos, es contribuyente clave al desarrollo de Embox.


Contenido relacionado

Para más contenido de Embedded, suscríbase al boletín semanal de Embedded.

Incrustado

  1. Sensor Telemetry 2.0.1 – Monitorización Avanzada de Temperatura con Azure IoT Hub
  2. Gestión de clústeres en PLCnext: Aprovechando Kubernetes para automatización industrial
  3. Optimiza aplicaciones Java 9 en PLCnext Control usando Jlink
  4. Junta corrida (running bond) explicada: La técnica esencial de albañilería
  5. ST lanza STM32MP1: MPU dual-core Arm Cortex con OpenSTLinux y bajo consumo
  6. ROHM lanza PMIC BD71850MWV para procesadores NXP i.MX 8M Nano
  7. Por qué Linux impulsa la nube: guía completa
  8. Linux Cloud Hosting vs Windows Cloud Hosting: ¿Cuál es el adecuado para tu negocio?
  9. Niobio en Medicina Dental: De Implantes a Blindaje Radiológico
  10. Java 10: Mejorar Rendimiento con Compartición de Datos de Clase de Aplicación (CDS)
  11. Clasificación de Colorantes por Aplicación: De Reactivos a Dispersos — Panorama Industrial