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.

Vea la demo en el vídeo a continuación o siga los pasos en nuestra wiki de GitHub para reproducir los resultados.
Notas
- 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)
- https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a
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.
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
- Usar Linux con aplicaciones críticas: ¿mezclar aceite y agua?
- ¿Por qué el Yocto Project para mi proyecto IoT?
- Anticipar la necesidad de experiencia en Automotive Grade Linux
- MCU habilita Linux para IoT industrial
- Plataforma open-source apunta a IoT con Linux embebido
- Drivers de dispositivos Linux embebido: entendiendo su rol
- Actualizaciones OTA para Linux embebido, parte 1 – Fundamentos e implementación
- Cómo instalar un servidor web embebido seguro en un dispositivo WiFi de $3
- Domina el ciclo de vida interminable del desarrollo de software de sistemas conectados —o él te dominará a ti
Para más contenido de Embedded, suscríbase al boletín semanal de Embedded.
Incrustado
- Sensor Telemetry 2.0.1 – Monitorización Avanzada de Temperatura con Azure IoT Hub
- Gestión de clústeres en PLCnext: Aprovechando Kubernetes para automatización industrial
- Optimiza aplicaciones Java 9 en PLCnext Control usando Jlink
- Junta corrida (running bond) explicada: La técnica esencial de albañilería
- ST lanza STM32MP1: MPU dual-core Arm Cortex con OpenSTLinux y bajo consumo
- ROHM lanza PMIC BD71850MWV para procesadores NXP i.MX 8M Nano
- Por qué Linux impulsa la nube: guía completa
- Linux Cloud Hosting vs Windows Cloud Hosting: ¿Cuál es el adecuado para tu negocio?
- Niobio en Medicina Dental: De Implantes a Blindaje Radiológico
- Java 10: Mejorar Rendimiento con Compartición de Datos de Clase de Aplicación (CDS)
- Clasificación de Colorantes por Aplicación: De Reactivos a Dispersos — Panorama Industrial