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

Ejecución de una aplicación Linux en MCU STM32

Se espera cada vez más funcionalidad de los sistemas integrados para productos inteligentes. Esto se puede lograr fácilmente con Linux, que ofrece software para cada caso que desee. Pero Linux requiere recursos de hardware bastante grandes, sobre todo memoria, por lo que la plataforma de destino normalmente será bastante cara y tendrá un alto consumo de energía. Por otro lado, los microcontroladores modernos (MCU) tienen muchos recursos que son suficientes para muchas tareas inteligentes. Al utilizar un sistema operativo en tiempo real (RTOS) como Embox RTOS, que permite el uso de software Linux en todas partes, incluidas las MCU, los desarrolladores pueden desarrollar más fácilmente dispositivos inteligentes que son menos costosos y consumen menos energía.

En este artículo, discutimos el lanzamiento de una aplicación Qt básica en una MCU incorporada que ejecuta Embox RTOS. Usamos dos placas basadas en Cortex-M7 de un solo núcleo (216MHz):STM32F746g-Discovery y STM32F769i-Discovery, que tienen pantallas táctiles con resolución de pantalla de 480 × 272 y 800 × 480, respectivamente.

Hace algún tiempo logramos lanzar un ejemplo estándar de Qt "moveblocks" en STM32F746-Discovery [Nota 1]. Sin embargo, queríamos ir más allá y lanzar un ejemplo con una pantalla táctil. Elegimos otro ejemplo estándar, "mosaicos animados". Es un ejemplo bastante bueno que se ve genial incluso en computadoras de escritorio. Es interactivo, por lo tanto, podemos usar una pantalla táctil y también parece una animación 3D.

Queríamos saber si la MCU STM32 puede proporcionar un rendimiento suficiente. No estábamos seguros de si la velocidad de la CPU sería suficiente para que la escena de renderizado fuera fluida, ya que, como descubrimos, incluso la actualización de la pantalla para una pantalla de 800 × 480 es una operación costosa [Nota 2].

Edificio

En primer lugar, creemos nuestra aplicación como parte de Embox. La forma más sencilla de hacer esto es compilar la aplicación para QEMU, que es un emulador de código abierto. Usar QEMU significa que no necesitamos ocuparnos del consumo de memoria en este caso. Esto nos ayudará a asegurarnos de que todos los componentes necesarios estén disponibles. Cuando los "mosaicos animados" comenzaron en QEMU, agregamos fácilmente los componentes necesarios a los archivos de configuración para STM32.

Primer lanzamiento en el tablero de destino

Comenzamos con éxito los "mosaicos animados" en nuestra placa de destino STM32F746G-Discovery, pero notamos que solo se dibujó la mitad superior de la pantalla. Por supuesto, podríamos intentar resolver el problema depurando inmediatamente en la placa, pero hay una manera más fácil:primero podemos iniciar y depurar el ejemplo en el entorno Linux.

Depurando en el host

Para ejecutar este ejemplo y depurar su aplicación, necesita la propia biblioteca Qt, así como QVFB, que es una aplicación Qt que proporciona una pantalla virtual. Puede compilar QVFB como se describe en la documentación oficial.

Luego, puede iniciar QVFB con las resoluciones de pantalla requeridas (480 × 272 para STM32F746G-Discovery):

   ./qvfb -ancho 480 -altura 272 -nocursor   

También debe crear la biblioteca Qt con un perfil incrustado, es decir, con la opción "-embedded". Esta opción está diseñada para ejecutar Qt sin X11 o entornos gráficos existentes, en su lugar se utilizará QWS (Qt Windowing System). También deshabilitamos algunas otras opciones y módulos innecesarios. La línea de configuración resultante fue la siguiente:

  ./configure -opensource -confirm-license -debug \ -embedded -qt-gfx-qvfb -qvfb \ -no-javascript-jit -no-script -no-scripttools \ -no-qt3support -no -webkit -nomake demos -nomake ejemplos  

Finalmente, construyamos y comencemos con "mosaicos animados". La etapa de compilación es la habitual para Qt ( qmake; make; ). Debe especificar QVFB como pantalla al iniciar la aplicación:

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

Tenemos la misma imagen en la mitad superior de la pantalla. Encontramos en el código fuente (examples / animation / animatedtiles / main.cpp) que la aplicación comienza con “view-> show ()”, eso significa que no está en el modo de pantalla completa. Después de eso, estábamos completamente convencidos de que la única mitad superior de la pantalla se usaba para mostrar la aplicación. Modificamos un poco el código de los "mosaicos animados", agregando la opción "-pantalla completa".

Lanzamiento en STM32F746-discovery

Construimos nuestra aplicación modificada en Embox y verificamos que se ejecutara correctamente en QEMU. Pero cuando estábamos lanzando la aplicación en la placa de destino, recibimos el error "Memoria insuficiente". Significa que el tamaño del montón en nuestra configuración no es suficiente para la aplicación. Decidimos utilizar herramientas de desarrollo enriquecidas en Linux para resolver el problema, es decir, estimar el tamaño de pila requerido.

Habíamos comenzado nuestra aplicación con valgrind. Valgrind es una herramienta para depurar y generar perfiles de memoria, Massif es un generador de perfiles de montón (es parte de Valgrind).

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

Y descubrió que la aplicación necesitaba un tamaño de pila de aproximadamente 2,7 MB.

Configuramos el tamaño del montón en 3 MB en la configuración de Embox y comenzamos nuestra demostración nuevamente. Se estaba ejecutando con éxito en el modo de pantalla completa.

Lanzamiento en STM32F769I-Discovery.

También queríamos probar el ejemplo en una placa similar pero con una pantalla más grande. Este ejemplo utilizó el STM32F769I-Discovery con resoluciones de pantalla de 800 × 480. En este caso, requiere casi 1 MB solo para el framebuffer en modo de color de 16 bits (800x480x2 =768000), pero hay suficiente SDRAM externa (16 MB) en esta placa. Entonces solo tenemos que estimar el tamaño del montón.

Comenzamos QVFb con las nuevas resoluciones (800 × 480):

  $. / qvfb -ancho 800 -altura 480 -nocursor & 

Y usa valgrind como la vez anterior:

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

Descubrimos que necesita unos 6 MB. Habíamos configurado un tamaño de pila de 6 MB y los "tiempos animados" se lanzaron con éxito en la placa STM32F769I.


Figura 1:Ejemplo de mosaicos animados QT en el tablero STM32F769I-DISCOVERY bajo Embox RTOS. (Fuente:Embox)

Puede ver cómo funciona en este video (a continuación) y puede reproducir los resultados usted mismo como se describe en nuestra wiki de github.

Notas:

  1. https://habr.com/ru/company/embox/blog/459730/] (en ruso, pero también disponible en una traducción al inglés de terceros: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 es el fundador de Embox RTOS. Anton se graduó de la Universidad Electrotécnica de San Petersburgo (LETI) en 2003 con una maestría en ingeniería eléctrica y asistió a cursos de posgrado en la Universidad Estatal de San Petersburgo especializándose en ingeniería de software. Tiene más de 20 años en programación embebida y de sistemas. Alexander Kalmuk es el cofundador de Embox RTOS. Alexander se graduó de la Universidad Estatal de San Petersburgo en 2014 con una maestría en matemáticas e ingeniería de software y asistió a cursos de posgrado en la Universidad Estatal de San Petersburgo especializados en teoría de control. Tiene más de 10 años en programación de sistemas embebidos.

Contenidos relacionados:

Para obtener más información sobre Embedded, suscríbase al boletín informativo semanal por correo electrónico de Embedded.


Incrustado

  1. Aplicación del niobio en estomatología
  2. Una guía para la computación en la nube en Linux
  3. Alojamiento en la nube de Linux Vs Alojamiento en la nube de Windows
  4. Clasificación de tintes por aplicación
  5. ST lanza la serie de microprocesadores STM32MP1 con distribución de Linux
  6. El IC de administración de energía es compatible con la familia de procesadores de aplicaciones
  7. Telemetría del sensor 2.0.1
  8. Java 10 - Intercambio de datos de clase
  9. ¿Qué es Running Bond?
  10. ¿Gestión de clústeres en PLCnext?
  11. Aplicación Java en PLCnext Control