Hands-On mit Qt for MCUs – QML-Parser ohne Komfortfunktionen

Nach Nokias Übernahme von Trolltech erlebte das C++-Framework eine Hochblüte: im Vergleich zu “klassischem C++” ist Qt zugegebenermaßen bequemer. Die Microcontroller-Variante hat mit der Vollversion außer dem Namen nichts gemein.
von Tam HANNA

Worum geht es hier?

Qt ist ein nach dem in Abbildung eins gezeigten Schema aufgebautes Cross-Plattform-Framework, das im Zusammenspiel mit Erweiterungen des nativen Compilers der Plattform native Applikationen erzeugt.

Für Qt spricht neben dem immensen Funktionsumfang der Bibliotheken und den leistungsstarken GUI-Stacks vor allem die Erweiterung von C++ um Komfortfunktionen. Feature Nummero eins ist das Signal-Slot-System, das “eventorientierte” Verbindungen zwischen Klassen erlaubt:

1QPushButton *button = new QPushButton;
2QObject::connect(button, &QPushButton::clicked, someFunction);

Zudem implementieren von QObject abgeleitete Klassen ein Parent-Child-System, das grundlegende Garbage Collection realisiert.

Exkurs: QML

Qt’s für die Desktopentwicklung vorgesehener GUI-Stack erfuhr mit Qt 4.7 eine Erweiterung: eine als QML bezeichnete und auf einem JavaScript-JSON-Parser basierende Sprache sollte Entwicklern die Erzeugung von “animationsintensiven Applikationen” für Smartphones ermöglichen.

1Rectangle {
2 width: 200
3 height: 100
4 color: “red”
5
6 Text {
7 anchors.centerIn: parent
8 text: “Hello, World!”
9 }
10}

QML erlaubt das Einbinden von JavaScript-Ausdrücken, um auf von Steuerelementen erzeugte Ereignisse zu reagieren:

1 menuBar: MenuBar {
2 Menu {
3 title: qsTr(“File”)
4 MenuItem {
5 text: qsTr(“&Open”)
6 onTriggered: console.log(“Open action triggered”);
7 }

Im Hintergrund bietet die Engine Integration mit selbst erzeugten C++-Klassen:Nach der initialen Umstellung liess sich mit dem Produkt, insbesondere nach der Finalisierung der Steuerelementebibliothek, bequem arbeiten.

Qt für Microcontroller: nur QML

Im Microcontrollerbereich kommt eine als Qt Ultralight bezeichnete Plattform zum Einsatz, die auf die in Modulen wie Qt Core und Qt Gui enthaltene Unterstützung verzichten muss – daraus folgt unter Anderem das Fehlen des weiter oben beschriebenen Signal-Slot-Systems.
Die Bereitstellung von QML im Microcontrollersystem erfolgt zudem nicht durch einen auf dem Embeddedsystem lebenden Parser. Qt Creator wandelt die QML-Dateien stattdessen am Desktop in C++-Dateien um, und kompiliert diese:

1 // height: 290
2 // line 5 “C:/Users/tamha/Documents/MyMCU/MyMCU.qml”
3 height.setValue(290);
4 // width: 480
5 // line 4 “C:/Users/tamha/Documents/MyMCU/MyMCU.qml”
6 width.setValue(480);

Qt-Applikationen lassen sich per Qt for MCUs 1.9 nur eingeschränkt debuggen: Das von anderen Zielsystemen bekannte direkte Debugging aus der IDE Qt Creator heraus funktioniert nicht. Stattdessen ist entweder manuelle Aktivierung (Stichwort GDB) oder der Umweg auf die hauseigene IDE des Herstellers (Renesas) erforderlich.
Beachten Sie zudem, dass Qt im Mikrocontrollerbereich unbedingt die Kompilation unter Nutzung von CMake voraussetzt: die Arbeit mit .pro-Dateien ist nicht möglich. Dafür ist die Hardwareunterstützung vergleichsweise breit – laut https://doc.qt.io/QtForMCUs/qtul-supported-platforms.html kommen MCUs von Infineion, NXP, Renesas und STM gleichermaßen zum Einsatz.

Lohnt es sich?

Qt ist auf keinen Fall billig, da die quelloffene Version nicht für die Arbeit mit Microcontrollern zugelassen ist. Möchten Sie für Microcontroller entwickeln, so ist auf jeden Fall eine kommerzielle Version erforderlich.
Die Small Business-Lizenz um 499USD / Jahr setzt bei der Entwicklung von Embeddedsystemen pro Runtime Zusatzkosten voraus – die Qt Company veröffentlicht diese zum Zeitpunkt der Drucklegung nicht einmal, sondern nennt sie nur auf Anfrage (siehe https://www.qt.io/pricing#packages).

Da der Gutteil der vom Desktop bekannten Support-Infrastruktur in Qt for MCUs fehlt, ist die “Value Proposition” weniger klar. Enthält Ihr Code (wie die meisten Qt-Applikationen) Qt Core-basierte Klassen, so müssen Sie diese auf gewöhnliches C++ umschreiben. Qt hält sich zudem aus dem Thema Hardwarezugriff heraus, was den bei Portierungen anfallenden “Gewinn” durch Aufwandsreduktion einschränkt.
Zu guter Letzt bieten Anbieter von Mikrocontrollern bieten heute hauseigene, durchaus komfortable GUI-Stacks an. Behalten Sie diese bei der Kaufentscheidung für und gegen Qt auf jeden Fall im Hinterkopf…

Zuerst erschienen bei Mikrocontroller.net News

Quelle: Read More