Rust begegnet mir immer wieder: Zum Beispiel wenn ich wieder einmal ein Memory-Leak suche oder einen Fehler habe weil ich eine Variable vom Stack zu lange verwende. Dann kommen unweigerlich Gespräche auf, die auf Rust hoffen, dass damit mal Schluss sein wird. Auch in unseren Blogbeiträgen gibts bereits Artikel zu Rust, zum Beispiel wie Rust für den Raspberry Pi Pico aufgesetzt wird. Doch direkte Berührungspunkte hatte ich bis jetzt noch keine. Um ein fundiertere Aussage über den Stand von Rust auf einem Microcontroller machen zu können, durfte ich mich 3 Tage mit Rust beschäftigen, mit dem Ziel, eine einfache Applikation mit digitalen In- und Outputs und Uart in Rust auf einem Microcontroller zu erstellen und den Start in die Rust-Welt auf einem Microcontroller zu wagen.
Glücklicherweise hatte ich bereits einen Link gespeichert, der perfekt dazu passt. Es gibt vom Google Android-Team einen öffentlich zugänglichen Kurs genau zu diesem Thema. Dieser ist für 3 Tage Grundlagen und 1 Tag Bare-Metal Entwicklung ausgelegt. Mit ein wenig Einsatz schafft man dies in 3 Tagen (im Selbststudium hat man ja leider keinen erfahrenen Kursleiter, der den Unterricht mit passenden Anekdoten ausschmückt).
Hier folgt also eher eine Linksammlung bereits bestehender guter Anleitungen statt einem weitern Versuch den Start zu erleichtern. Abschliessend gibts noch ein kurzer Erfahrungsbericht zum Kurs, respektive zum Start mit Rust auf dem micro:bit V2. Dazu noch ein paar Tipps.
Wie also starte ich auf einem Microcontroller. Dazu brauchen wir natürlich eine Entwicklungsumgebung und einen Evalboard. Als Entwicklungsumgebung eignet sich z.B. Visual Studio Code (auch VS Code oder nur Code genannt) und als Evalboard bietet es sich an den vom Kurs zu nehmen, den micro:bit V2.
Die Installationsschritte sind entweder von der Rust-Comunity oder von Microsoft so gut beschrieben, dass die Installation reibungslos verlief. Deshalb verzichte ich auf eine detaillierte Anleitung und verweise gerne auf die gut gewarteten Anleitungen.
Für ein Linux-Feeling unter Windows verwende ich die WSL-2 mit einem Ubuntu. Es gibt eine Anleitung von Microsoft wie man VS Code für die Verwendung von WSL einrichtet.
In der WSL kann Rust wie in einem Ubuntu installiert werden.
Damit der micro:bit in der WSL-Umgebung verwendet werden kann, muss das USB-Device in die WSL geroutet werden. Auch dazu gibt es bereits eine fix fertige Anleitung. Beachte die extra Note für Win10.
Der Kurs ist in einen Reader integriert. Die Codebeispiele können direkt darin verändert und getestet werden und erleichterte mir das Verständnis. Für grössere Änderungen lohnt es sich aber ein neues Projekt zu erstellen. Denn verlässt man die Seite, sind die Änderungen weg.
Das Kurs Git Repository enthält neben den Source-Files der Unterlagen auch die Beispiele. So hat man Theorie und Übungen fertig vorliegend für den Start in die Rust-Welt auf einem Microcontroller.
Den Kurs finde ich sehr gut strukturiert: Einmal durch die Theorie, kurz und kompakt, danach gibt es sehr gute Beispiele und saubere Lösungen. So sind auch die Übungen für das Selbststudium geeignet. Nebst einfachen Konsolen-Übungen gibt es auch eine Übung mit einem Arm in QEMU und natürlich auf dem bereits erwähnten micro:bit. Während dem Flashen stieg mein Puls an und als der darauf verbaute Beschleunigungssensor seine Werte ausspuckte konnte diese aufgebaute Energie in ein breites lächeln verwandelt werden.
Hier noch ein paar Anmerkungen zu Rust, nach Bearbeitung des Kurses. Mir ist natürlich bewusst, dass der micro:bit gut unterstützt ist und die Beispiele sehr gut vorbereitet sind. Ich bin zuversichtlich, dass andere Microcontroller ebenfalls bereits gut unterstützt sind und weitere folgen. Die Hardware-Abstraktion ist momentan noch vor allem synchron, doch diese wird sicher für asynchrone Ausführung verbessert und erweitert.
Es gibt im Wesentlichen 2 Aspekte, die mich besonders begeistert haben.
Erstens: Man fightet zwar sehr lange mit dem Compiler, bis er zufrieden ist und alle Typen stimmen, danach ist aber die Wahrscheinlichkeit sehr hoch, dass das Programm läuft. Das ist gegensätzlich zu meinen Erfahrungen mit Python, wo ich zwar sehr schnell den Code zusammen habe, aber das Programm x-mal starten muss, bis ich alle Konvertierungen korrekt umgesetzt habe.
Zweitens: Die Differenzierung zwischen Interface und Implementation. Es scheint einfach zu sein ein Modul für ein Interface zu erstellen und danach das, was darunter liegt und das Modul zu «verknüpfen». Das geht auch bei beiden Beispielen hervor: Die Interfaces existieren und können einfach gelinkt werden.
Es gibt auch Aspekte, die mir noch Mühe bereiten mit Rust. Dazu gehört natürlich das Memorymanagement. Das wird wohl einige Zeit gehen, bis ich das intus habe und Funktionen im Vorherein auch richtig designe und nicht erst aufgrund von Compiler-Warnungen etwas anpasse. Nebst diesem Hauptpunkt gibt es noch 2 Punkte:
Erstens: Das Result-Handling von Funktionen, wie genau verwende ich das Some/None Konstrukt am besten und gibt es Fälle wo das Ok() / Err() Konstrukt mit einem Enum besser geeignet ist. Das nachfolgende matching auf die Ergebnisse macht dann natürlich ebenfalls noch ein wenig Mühe. Daran muss ich mich erst noch gewöhnen.
Zweitens: Sobald Interrupts vom Microcontroller verwendet werden, wurde es für mich unübersichtlich. Wie werden Interrupts korrekt definiert und angewendet: Wie genau werden critical sections definiert. Dieses Thema muss ich definitiv noch vertiefen.
Wer also noch eine Beschäftigung für über die Weihnachtsferien sucht, ein kleines Projekt mit Rust auf dem micro:bit bietet sich sehr gut an. Der hier erwähnte Kurs gibt einen sehr guten Start.
Ansonsten freue ich mich, mal ein industrielles Embedded-Rust Projekt (zuerst mal im kleinen Rahmen) umzusetzen und mich damit weiter zu vertiefen, denn der Start in die Rust-Welt auf einem Microcontroller ist gelungen.
Was sind deine Erfahrungen mit Rust? Hast du diesen Kurs ebenfalls durchgearbeitet? Gibt es andere Materialien die du empfehlen kannst? Lass uns gerne unten in den Kommentaren darüber austauschen.
Schreiben Sie einen Kommentar