Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Qt auf STM32-Mikrocontrollern mit Embox RTOS starten: Ein praktischer Performance-Überblick

Eingebettete Systeme sollen zunehmend reichhaltigere Funktionalität bieten. Linux stellt ein riesiges Ökosystem an Bibliotheken und Tools bereit, doch seine Hardwareanforderungen – insbesondere der Speicherbedarf – treiben oft Kosten und Stromverbrauch in die Höhe. Moderne Mikrocontroller (MCUs), wie die STM32-Serie, bieten ausreichend Ressourcen für viele smarte Anwendungen und bleiben dabei kostengünstig und energieeffizient.

Die Nutzung eines Echtzeitbetriebssystems (RTOS), das Linux-Software hosten kann – beispielsweise Embox RTOS –, ermöglicht Entwicklern, Linux auf MCUs einzusetzen. In diesem Artikel zeigen wir, wie eine Qt-Anwendung auf zwei Cortex-M7-STM32-Boards (STM32F746G-Discovery und STM32F769I-Discovery) unter Embox ausgeführt wird.

Hintergrund

Zuvor demonstrierten wir das Qt-Beispiel „moveblocks“ auf einem STM32F746-Discovery-Board. Nun erweitern wir dies auf das Beispiel „animatedtiles“, das interaktive 3D-ähnliche Grafiken bietet und für Touchscreens geeignet ist. Wir wollten prüfen, ob CPU und Speicher des MCUs ein flüssiges Rendering auf einem 480×272- oder 800×480-Display ermöglichen.

Erstellen der Anwendung

Zunächst bauen wir das Qt-Beispiel für QEMU, einen Open-Source-Emulator. Die Ausführung der App in QEMU macht eine Vorab-Speicherallokation überflüssig und stellt sicher, dass alle Abhängigkeiten vorhanden sind. Nach der Verifizierung fügen wir die erforderlichen Komponenten den STM32-Konfigurationsdateien hinzu.

Erster Start auf dem Zielboard

Die Anwendung startet auf dem STM32F746G-Discovery, doch nur die obere Bildschirmhälfte wird befüllt. Debugging direkt auf dem Board ist möglich, doch ein effizienterer Ansatz ist die Nutzung der Host-Umgebung für das initiale Debugging.

Debugging auf dem Host

Um das Beispiel auszuführen und zu debuggen, installieren Sie die Qt-Bibliotheken und QVFB (Qt Virtual Framebuffer). QVFB stellt ein virtuelles Display bereit, in das Qt rendern kann. Bauen Sie QVFB gemäß der offiziellen Anleitung. Starten Sie QVFB mit der Board-Auflösung:

./qvfb -width 480 -height 272 -nocursor

Kompilieren Sie Qt mit dem eingebetteten Profil (ohne X11) und deaktivieren Sie unnötige Module:

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

Bauen und starten Sie animatedtiles mit QVFB:

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

Die Anwendung belegt wieder nur die obere Bildschirmhälfte. Eine Untersuchung von examples/animation/animatedtiles/main.cpp zeigt, dass die Ansicht im Fenstermodus angezeigt wird. Das Hinzufügen des Flags -fullscreen löst das Problem.

Bereitstellung auf STM32F746-Discovery

Nach der Quellcode-Änderung bauen wir die Anwendung für Embox neu und führen sie in QEMU aus. Beim Start auf dem physischen Board tritt ein „Out Of Memory“-Fehler auf, der auf einen zu kleinen Heap hinweist. Um die benötigte Größe zu ermitteln, nutzen wir Valgrinds Massif-Tool.

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

Massif meldet einen Heap-Bedarf von ca. 2,7 MB. Die Erhöhung des Heaps auf 3 MB in der Embox-Konfiguration ermöglicht den Vollbildbetrieb der Demo.

Bereitstellung auf STM32F769I-Discovery

Das STM32F769I-Discovery verfügt über ein 800×480-Display und 16 MB externes SDRAM. Der Framebuffer allein verbraucht ca. 0,8 MB (800×480×2 Byte). Es muss nur die Heap-Größe angepasst werden.

Starten Sie QVFB für die größere Auflösung:

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

Führen Sie Massif erneut aus:

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

Massif meldet ca. 6 MB Heap. Die Konfiguration des Heaps auf 6 MB ermöglicht den Vollbildbetrieb auf dem STM32F769I-Board.

Qt auf STM32-Mikrocontrollern mit Embox RTOS starten: Ein praktischer Performance-Überblick

Sehen Sie sich die Demo im Video unten an oder folgen Sie den Schritten auf unserem GitHub-Wiki, um die Ergebnisse zu reproduzieren.

Hinweise

  1. https://habr.com/ru/company/embox/blog/459730/ (auf Russisch, auch auf Englisch verfügbar: 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

Qt auf STM32-Mikrocontrollern mit Embox RTOS starten: Ein praktischer Performance-Überblick

Anton Bondarev ist der Gründer von Embox RTOS. Er erwarb 2003 einen Master in Elektrotechnik an der St. Petersburger Elektrotechnischen Universität (LETI) und absolvierte später Postgraduiertenkurse in Software Engineering an der Staatlichen Universität St. Petersburg. Mit über 20 Jahren Erfahrung in eingebetteter und systemnaher Programmierung leitet er das Embox-Projekt.

Qt auf STM32-Mikrocontrollern mit Embox RTOS starten: Ein praktischer Performance-Überblick

Alexander Kalmuk ist Mitgründer von Embox RTOS. Er hält einen Master in Mathematik und Software Engineering der Staatlichen Universität St. Petersburg (2014) und absolvierte postgraduale Studien in Steuerungstheorie. Mit mehr als einem Jahrzehnt Erfahrung in der Programmierung eingebetteter Systeme ist er ein wesentlicher Beitragender zur Embox-Entwicklung.


Verwandte Inhalte

Für mehr Embedded-Inhalte abonnieren Sie den wöchentlichen E-Mail-Newsletter von Embedded.

Eingebettet

  1. Warum Linux die Cloud antreibt: Ein umfassender Leitfaden
  2. Linux Cloud Hosting vs. Windows Cloud Hosting: Was passt zu Ihrem Business?
  3. Farbstoffklassifikation nach Anwendung: Von Reaktiv bis Disperse – Ein Branchenüberblick
  4. ST stellt STM32MP1 vor: Dual-Core Arm Cortex MP1 mit OpenSTLinux und Low-Power Performance
  5. ROHM bringt BD71850MWV PMIC für NXP i.MX 8M Nano Prozessoren
  6. Sensor Telemetrie 2.0.1 – Fortschrittliche Temperaturüberwachung mit Azure IoT Hub
  7. Java 10: Application Class-Data Sharing (AppCDS, JEP 310) – Schnellerer App-Start
  8. Laufender Verband (Running Bond): Die grundlegende Mauerwerks-Technik
  9. Cluster-Management auf PLCnext: Kubernetes für die industrielle Automatisierung nutzen
  10. Java 9 Apps auf PLCnext Control mit Jlink optimieren