Im Embox- Projekt
haben wir vor einiger Zeit Qt auf der STM32-Plattform gestartet
. Ein Beispiel war die Moveblocks-App, eine Animation mit vier blauen Quadraten, die sich über den Bildschirm bewegen. Wir wollten zum Beispiel mehr, um Interaktivität hinzuzufügen, da auf der Platine ein Touchscreen verfügbar ist. Wir haben uns für die animierte Kacheln-App entschieden, weil sie auch auf einem Computer cool aussieht. Durch Drücken virtueller Tasten bewegen sich viele Symbole reibungslos auf dem Bildschirm und sammeln sich in verschiedenen Formen. Außerdem sieht es ganz nach 3D-Animation aus, und wir hatten sogar Zweifel, ob der Mikrocontroller eine solche Aufgabe bewältigen würde.
Versammlung
Zunächst beginnen wir mit der Montage. Der einfachste Weg, dies zu tun, ist der QEMU-Emulator. Dort passt alles genau aus dem Speicher, und daher ist es einfach zu überprüfen, ob alle Komponenten ausreichen, um die Anwendung zu erstellen. Nachdem ich überprüft hatte, ob alle animierten Kacheln erfolgreich zusammengesetzt wurden, übertrug ich sie einfach in die Konfiguration für die Karte, die ich benötigte.
Zuerst an Bord starten
Die Bildschirmgröße für STM32F746G-Discovery beträgt 480 x 272. Als die Anwendung gestartet wurde, wurde sie nur am oberen Bildschirmrand gezeichnet. Wir wollten natürlich herausfinden, was los war. Natürlich können Sie direkt am Board mit dem Debuggen beginnen, aber es gibt eine einfachere Lösung. Führen Sie die Anwendung unter Linux mit denselben 480 x 272 Dimensionen mit dem virtuellen QVFB-Framebuffer aus.
Starten unter Linux
Für die Ausführung unter Linux benötigen wir drei Teile von QVFB, die Qt-Bibliothek und die Anwendung selbst.
QVFB ist eine reguläre Anwendung, die uns einen virtuellen Bildschirm zur Ausführung von Qt zur Verfügung stellt. Wir sammeln es wie in der offiziellen Dokumentation angegeben .
Starten Sie mit der gewünschten Bildschirmgröße:
./qvfb -width 480 -height 272 -nocursor
Als nächstes bauen wir die Qt-Bibliothek als eingebettet auf, d.h. Mit der angegebenen Option -embedded. Ich habe auch verschiedene Module deaktiviert, um den Build zu beschleunigen. Am Ende sah die Konfiguration folgendermaßen aus:
./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
Als nächstes erstellen wir die animierte Kacheln-Anwendung (qmake + make). Und wir starten die kompilierte Anwendung und verweisen auf unseren QVFB:
./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0
Nach dem Start habe ich gesehen, dass unter Linux auch nur ein Teil des Bildschirms gezeichnet wird. Ich habe animierte Kacheln ein wenig geändert, indem ich die Option "-vollbild" hinzugefügt habe. Wenn angegeben, startet die Anwendung im Vollbildmodus.
Starten Sie auf Embox
Wir werden den geänderten Quellcode der Anwendung in Embox verwenden. Wir bauen wieder auf und rennen. Die Anwendung wurde nicht gestartet und Qt hat keine Speichermeldungen mehr. Wir sehen uns die Embox-Konfiguration an und stellen fest, dass die Heap-Größe auf 2 MB festgelegt ist und eindeutig nicht ausreicht. Auch hier können Sie versuchen, diesen Punkt direkt auf der Platine herauszufinden, aber lassen Sie es uns bequem unter Linux tun.
Starten Sie dazu die Anwendung wie folgt:
$ valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen $ ms_print animatedtiles.massif > animatedtiles.out
In der Datei animiert.iles.out sehen wir den Maximalwert der Heap-Belegung von ca. 2,7 MB. Großartig, jetzt müssen Sie nicht mehr raten, sondern kehren zu Embox zurück und stellen die Heap-Größe auf 3 MB ein.
Animatedtiles gestartet.
Starten Sie auf STM32F769I-Discovery.
Versuchen wir, die Aufgabe noch komplizierter zu gestalten und dasselbe Beispiel auf einem ähnlichen Mikrocontroller auszuführen, jedoch nur mit einer höheren Bildschirmauflösung - STM32F769I-Discovery (800 x 480). Das heißt, der Framebuffer benötigt jetzt 1,7-mal mehr Speicher (denken Sie daran, dass der STM32F746G einen 480x272-Bildschirm hat), dies wird jedoch durch die doppelte Größe des SDRAM kompensiert (16 MB gegenüber 8 MB verfügbarem SDRAM für den STM32F746G).
Um die Größe des Heaps wie oben zu schätzen, führen Sie zuerst Qvfb und unsere Linux-Anwendung aus:
$ ./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
Wir betrachten den Speicherverbrauch im Heap - ungefähr 6 MB (fast doppelt so viel wie beim STM32F746G).
Es bleibt, die gewünschte Heap-Größe in mods.conf festzulegen und neu zu erstellen. Die Anwendung wurde sofort und ohne Probleme gestartet, wie in diesem kurzen Video gezeigt
Traditionell können Sie die Ergebnisse selbst reproduzieren. Wie das geht, erfahren Sie in unserem Wiki .
Dieser Artikel wurde zuerst von uns in englischer Sprache auf embedded.com veröffentlicht .