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

Ausführen einer Linux-Anwendung auf STM32-MCUs

Von eingebetteten Systemen für smarte Produkte wird immer mehr Funktionalität erwartet. Dies lässt sich leicht mit Linux erreichen, das Software für jeden gewünschten Fall bietet. Aber Linux erfordert ziemlich große Hardware-Ressourcen, vor allem Speicher, so dass die Zielplattform normalerweise ziemlich teuer ist und einen hohen Stromverbrauch hat. Andererseits verfügen moderne Mikrocontroller (MCUs) über viele Ressourcen, die für viele smarte Aufgaben ausreichen. Mit einem Echtzeit-Betriebssystem (RTOS) wie Embox RTOS, das die Verwendung von Linux-Software überall einschließlich MCUs ermöglicht, können Entwickler einfacher intelligente Geräte entwickeln, die weniger teuer sind und weniger Strom verbrauchen.

In diesem Artikel besprechen wir das Starten einer grundlegenden Qt-Anwendung auf einer eingebetteten MCU, auf der das Embox RTOS ausgeführt wird. Wir verwenden zwei Single-Core-Cortex-M7-basierte Boards (216MHz):STM32F746g-Discovery und STM32F769i-Discovery, die über Touchscreens mit einer Bildschirmauflösung von 480×272 bzw. 800×480 verfügen.

Vor einiger Zeit ist es uns gelungen, ein Standard-Qt-Beispiel ‚moveblocks‘ auf STM32F746-Discovery [Anmerkung 1] zu starten. Wir wollten jedoch noch weiter gehen und ein Beispiel mit einem Touchscreen starten. Wir wählen ein anderes Standardbeispiel, „animatedtiles“. Es ist ein ziemlich schönes Beispiel, das sogar auf Desktops cool aussieht. Es ist interaktiv, daher können wir einen Touchscreen verwenden und es sieht auch wie eine 3D-Animation aus.

Wir wollten wissen, ob die STM32-MCU genügend Leistung bieten kann. Wir waren uns nicht sicher, ob die CPU-Geschwindigkeit für ein flüssiges Rendern der Szene ausreicht, da, wie wir herausgefunden haben, selbst die Bildschirmaktualisierung für ein 800×480-Display ein teurer Vorgang ist [Hinweis 2].

Gebäude

Lassen Sie uns zunächst unsere Anwendung als Teil von Embox erstellen. Der einfachste Weg, dies zu tun, besteht darin, die Anwendung für QEMU zu erstellen, einen Open-Source-Emulator. Die Verwendung von QEMU bedeutet, dass wir uns in diesem Fall nicht um den Speicherverbrauch kümmern müssen. Dies hilft uns sicherzustellen, dass alle notwendigen Komponenten verfügbar sind. Als ‚animatedtiles‘ auf QEMU gestartet war, fügten wir den Konfigurationsdateien für den STM32 einfach die erforderlichen Komponenten hinzu.

Erster Start auf der Zieltafel

Wir haben auf unserem Zielboard STM32F746G-Discovery erfolgreich ‚animatedtiles‘ gestartet, aber wir haben festgestellt, dass nur die obere Hälfte des Bildschirms gezeichnet wurde. Natürlich könnten wir versuchen, das Problem durch Debuggen sofort auf dem Board zu lösen, aber es gibt einen einfacheren Weg:Wir können das Beispiel zuerst in der Linux-Umgebung starten und debuggen.

Debugging auf dem Host

Um dieses Beispiel auszuführen und Ihre Anwendung zu debuggen, benötigen Sie die Qt-Bibliothek selbst sowie QVFB, eine Qt-Anwendung, die einen virtuellen Bildschirm bereitstellt. Sie können QVFB wie in der offiziellen Dokumentation beschrieben erstellen.

Dann können Sie QVFB mit den erforderlichen Bildschirmauflösungen (480×272 für STM32F746G-Discovery) starten:

./qvfb -width 480 -height 272 -nocursor  

Sie sollten auch die Qt-Bibliothek mit einem eingebetteten Profil erstellen, nämlich mit der Option „-embedded“. Diese Option wurde entwickelt, um Qt ohne X11 oder vorhandene grafische Umgebungen auszuführen, stattdessen wird QWS (Qt Windowing System) verwendet. Außerdem haben wir einige andere unnötige Optionen und Module deaktiviert. Die resultierende Konfigurationszeile war die folgende:

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

Lassen Sie uns zum Schluss „animatedtiles“ erstellen und starten. Die Build-Phase ist wie bei Qt üblich (qmake; make; ). Sie sollten QVFB als Anzeige beim Starten der Anwendung angeben:

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

Wir haben das gleiche Bild in der oberen Hälfte des Bildschirms. Im Quellcode (examples/animation/animatedtiles/main.cpp) haben wir festgestellt, dass die Anwendung mit „view->show()“ startet, also nicht im Vollbildmodus. Danach waren wir der festen Überzeugung, dass nur die obere Hälfte des Bildschirms für die Darstellung der Anwendung genutzt wird. Wir haben den Code von „animatedtiles“ ein wenig modifiziert und die Option „-fullscreen“ hinzugefügt.

Start auf STM32F746-Erkennung

Wir haben unsere modifizierte Anwendung in Embox erstellt und überprüft, ob sie erfolgreich auf QEMU ausgeführt wurde. Aber als wir die Anwendung auf dem Zielboard starteten, erhielten wir den Fehler „Out of Memory“. Dies bedeutet, dass die Größe des Heaps in unserer Konfiguration für die Anwendung nicht ausreicht. Wir haben uns entschieden, umfangreiche Entwicklungstools in Linux zu verwenden, um das Problem zu lösen, d. h. die erforderliche Heap-Größe zu schätzen.

Wir hatten unsere Anwendung mit valgrind gestartet. Valgrind ist ein Tool für Speicher-Debugging und Profiling, Massif ist ein Heap-Profiler (es ist ein Teil von Valgrind).

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

Und fand heraus, dass die Anwendung eine Heap-Größe von etwa 2,7 MB benötigt.

Wir haben die Heap-Größe in der Embox-Konfiguration auf 3 MB eingestellt und unsere Demo erneut gestartet. Es wurde erfolgreich im Vollbildmodus ausgeführt.

Start auf STM32F769I-Discovery.

Wir wollten das Beispiel auch auf einem ähnlichen Board ausprobieren, jedoch mit einem größeren Display. In diesem Beispiel wurde der STM32F769I-Discovery mit 800×480 Displayauflösungen verwendet. In diesem Fall benötigt es nur für den Framebuffer im 16bit Farbmodus (800x480x2=768000) knapp 1MB, dafür ist aber genügend (16MB) externes SDRAM auf diesem Board vorhanden. Wir müssen also nur die Größe des Haufens schätzen.

Wir haben QVFb mit den neuen Auflösungen (800×480) gestartet:

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

Und benutze Valgrind wie beim vorherigen Mal:

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

Wir hatten herausgefunden, dass es ca. 6 MB benötigt. Wir hatten 6 MB Heap-Größe eingerichtet und "animatedtimes" erfolgreich auf dem STM32F769I-Board gestartet.


Abbildung 1:Beispiel für QT-animierte Kacheln auf der STM32F769I-DISCOVERY-Platine unter Embox RTOS. (Quelle:Embox)

Wie es funktioniert, seht ihr in diesem Video (unten) und könnt die Ergebnisse wie in unserem Github-Wiki beschrieben selbst reproduzieren.

Hinweise:

  1. https://habr.com/ru/company/embox/blog/459730/] (auf Russisch, aber auch in einer englischen Übersetzung eines Drittanbieters verfügbar:https://sudonull.com/ post/25508-Portierung-Qt-auf-STM32-Embox-Blog
  2. https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a

Anton Bondarew ist der Gründer von Embox RTOS. Anton schloss sein Studium der Elektrotechnik an der Elektrotechnischen Universität Sankt Petersburg (LETI) im Jahr 2003 mit einem Master-Abschluss ab und besuchte postgraduale Kurse an der Staatlichen Universität Sankt Petersburg, die sich auf Softwaretechnik spezialisierten. Er hat über 20 Jahre Erfahrung in der Embedded- und Systemprogrammierung. Alexander Kalmuk ist Mitbegründer von Embox RTOS. Alexander schloss 2014 sein Masterstudium in Mathematik und Softwaretechnik an der Staatlichen Universität Sankt Petersburg ab und besuchte postgraduale Kurse an der Staatlichen Universität Sankt Petersburg mit dem Schwerpunkt Regelungstheorie. Er hat über 10 Jahre Erfahrung in der Programmierung eingebetteter Systeme.

Verwandte Inhalte:

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


Eingebettet

  1. Ein Leitfaden für Cloud Computing unter Linux
  2. Linux-Cloud-Hosting vs. Windows-Cloud-Hosting
  3. Klassifizierung von Farbstoffen nach Anwendung
  4. ST führt STM32MP1-Mikroprozessorserie mit Linux-Distribution ein
  5. Power Management IC unterstützt die Anwendungsprozessorfamilie
  6. Sensortelemetrie 2.0.1
  7. Java 10 - Teilen von Klassendaten
  8. Was ist Running Bond?
  9. Clusterverwaltung auf PLCnext?
  10. Java-Anwendung auf PLCnext Control