Tutorial Qt für den Mikrocontroller, Teil 1: Minimalismus
Mit Qt for MCUs lassen sich komfortabel C++-Anwendungen auf Mikrocontrollern umsetzen.
- Tam Hanna
Die wachsende Leistung von Mikrocontrollern öffnet neue Einsatzbereiche. Während für Python MicroPython und für Java MicroEJ zur Verfügung stehen, dürfen C++-Entwickler für die Entwicklung grafischer User Interfaces seit einiger Zeit auf eine (stark funktionsreduzierte) Version des Cross-Plattform-Frameworks Qt zurückgreifen.
Als Grundlage für dieses zweiteilige Tutorial dient das vergleichsweise preiswerte Evaluations-Board STM32F769 Discovery Kit. Das auf einem mit bis zu 216 MHz Takt arbeitenden, STM32F769-Controller basierende Board bringt ein Display mit und stattet Entwickler außerdem mit externem Flash und RAM aus. Für die Kommunikation mit dem Rechner bietet die bei Distributoren um rund 100 Euro erhältliche Platine ein ST/LINK-Interface an, was den Kauf eines seperaten Geräts unnötig macht.
Der Fokus liegt auf der praktischen Umsetzung, nicht auf der kompletten Vorstellung des Qt-Frameworks oder des Design-out einer auf dem Mikrocontroller basierenden Platine.
Eine Frage der Zielauswahl
Qt for MCUs läuft auf zahlreichen Mikrocontrollern. Die Liste der kompatiblen Geräte umfasst Controller von Infineon, NXP, Renesas und STMicroelectronics.
STMicroelectronics zeigt sich im Bereich der hauseigenen Entwicklungsumgebung plattformagnostisch. Das Zusammenspiel mit Qt funktioniert unter Windows und Linux. Der Autor setzt hier auf Windows 10. Qt ist grundsätzlich quelloffen verfügbar, aber das Entwickeln für Mikrocontroller erfordert die kommerzielle Variante. Zum Ausprobieren existiert eine Testversion auf der Download-Seite, die sich über den Button Try Qt in der gleichnamigen Rubrik herunterladen lässt.
Im Qt-Setup-Assistenten gilt es nun, im Dialog Select components das passende Paket aus der Kategorie Qt for MCUs auszuwählen.
Für das Tutorial sind in der Rubrik Third Party Tools der STM Cube Programmer und das vollwertige SDK für den F7 relevant. Wer einen anderen Controller verwendet, sollte sich die Dokumentation zu den jeweiligen Voraussetzungen anschauen.
Neben den Mikrocontroller-spezifischen Elementen ist die Installation der Desktop-Komponente sinnvoll. Die Entwicklungsumgebung Qt Creator ist ebenso Pflichtprogramm.
Zu beachten ist, dass das Bereitstellen des Cube-Programmes über den ST-eigenen Installer erfolgt, der als Pop-up-Fenster am Bildschirm erscheint. Die Voreinstellungen des Installationsassistenten reichen aus: Die Trusted-Komponente ist nicht erforderlich.
Die erste Anwendung
Nach der erfolgreichen Installation steht der Start von Qt Creator an, für den die Qt Company nur zehn Tage Testphase gewährt. Das Tool zum Erzeugen neuer Projekte zeigt eine neue Projektgruppe, die das Erstellen von Qt-Anwendungen für Mikrocontroller erlaubt.
Nach der Auswahl der Vorlage und der Angabe des Namens "HeiseMCU1" bietet Qt Creator eine Gruppe von Kits an. Ein Kit ist in der Welt von Qt Creator eine Ausführungskonfiguration, die einen (Cross)-Compiler, eine Toolchain, ein SDK und häufig ein Debugging-Werkzeug zur Verfügung stellt.
Wer sich für die vom Autor vorgegebenen Optionen entschieden hat, findet drei auf den gewählten Mikrocontroller bezogene Varianten.
Neben der als DISCOVERY-BAREMETAL bezeichneten Variante, die Qt direkt auf dem darunter befindlichen Mikrocontroller ausführt, steht mit DISCOVERY-FREERTOS eine Version zur Verfügung, die das Task-Scheduling über das Echtzeitbetriebssystem FreeRTOS erledigt. Der Einfachheit halber dient für die Beispielanwendung die Bare-Metal-Variante als Grundlage. Daneben ist es sinnvoll, die Option "Qt for MCUs 1.9 – Desktop 32bpp" zu wählen, um die Qt-Mikro-Varianten zusätzlich am Desktop kompilieren und ausführen zu können.
Bei der Qt-Entwicklung empfiehlt es sich, die grundlegenden Funktionen einer Applikation immer auf einer möglichst komfortablen Plattform zu testen und die anderen lediglich für plattformspezifische Besonderheiten und den unbedingt erforderlichen finalen Integrationstest auszuwählen.
Nachdem Qt Creator das Projektgerüst erstellt hat, fällt für das Ziel erneut die Auswahl auf "Qt for MCUs 1.9 – Desktop". Nach dem Kompilieren sollte die Projektstruktur wie in Abbildung 3 gezeigt aussehen.