Anders ist es bei dem Arduino-Entwicklungssystem. Es basiert auf Java und kommt ohne herstellerspezifische Tools und Treiber aus. Die Verwaltung von Bibliotheken und Treibern für Programmieradapter ist integriert. Ebenfalls sind die unterschiedlichen Distributionen für die jeweiligen Betriebssysteme identisch – inklusive der Projektverwaltung. Bestenfalls sind die USB-Treiber für den auf dem Target verwendeten USB-Seriell-Adapter nachzuladen. Das macht diese Umgebung für ein »mal-eben«-Erstellen für Prototypen ideal.
Gegenüber konventioneller Programmierung abweichend ist der spezielle Arduino-Programmierframework, den man als Sketch bezeichnet. C-Programmierer sind es gewöhnt eine main()-Methode zu programmieren. Doch beim Arduino gibt es keine main. Statt dessen gibt es eine setup()-Methode, in welcher der gesamte Initialisierungscode ausgeführt werden soll. Hierzu gehört beispielsweise die Initialisierung der Ports und der verwendeten Variablen. In der zyklisch aufgerufenen loop()-Methode erfolgt dann die Bearbeitung des eigentlichen Programmflusses. Formal ist die loop() eine in einer Endlosschleife aufgerufene Methode. In Bild 4 ist der Unterschied zwischen einem Sketch und einer konventionellen C-Implementierung dargestellt.
Die Entwicklung von Embedded-Controllern mit Arduino als alleinige Lösung anzusehen ist sicherlich falsch. Die Debug-Möglichkeiten sind unzureichend, eine Versionsverwaltung für eigenen Code fehlt und die angebotenen Bibliotheken genügen bei weitem nicht professionellem Anspruch. Darüber hinaus ist der erzeugte Code alles andere als schlank und Laufzeit-optimiert. Für das RAD aber gibt es keine produktivere Lösung.
Gerade beim Umstieg von der klassischen Host-Programmierung auf die Entwicklung von Software für eingebettete Systeme sind die Hürden bei den klassischen Entwicklungsmodellen häufig so hoch, dass eine Systemlösung als schlanke, vom Betriebssystem freie Lösung, erst gar nicht in Betracht gezogen wird. Gerade bei IoT-Systemen spielt das eine dramatische Rolle. Der Griff zu einem Raspberry PI wird in aller Regel aufgrund der »gewohnten« Programmierung gemacht – nicht weil die Rechenleistung dieses Ein-Chip-Einplatinencomputers notwendig wäre. Hier bieten schlanke Systemlösungen ein erhebliches Reduktionspotential, so dass Kosten, Energieaufnahme und Footprint dramatisch reduziert werden können. Darüber hinaus ist eine schier unvorstellbar große Anzahl von Shields oder Modulen für Arduino mit funktionsfähiger Software verfügbar. Die Implementierung eines Wi-Fi-CAN-Adapters wird damit innerhalb eines Nachmittags möglich.
Doch wie so oft bekommt man nicht alles geschenkt. Üblicherweise ist der Bibliothekscode für reale Produkte nicht anwendbar. Es sind wirklich nur Prototypen. In Bild 5 wird ein kleiner Überblick gegeben, wie sich die Codegröße in einem Arduino-Sketch im Vergleich zu einem gut geschriebenen C-Code verhält. Der Faktor 7 ist hier nicht geschönt, komplexere Programme weisen häufig einen noch höheren Reduktionsfaktor auf. Auch sind die Lizenzbedingungen, wenn man nur vorgefertigten Code verwendet weder produktfreundlich noch produktfähig. Aber sie bieten eine extrem gute Basis für schnelle und effektive Machbarkeitsstudien, Funktionsmuster und Prototypen.
Zusammenfassung
Vor einigen Jahren waren eingebettete Systeme ausschließlich Spezialisten vorbehalten. Die Masse der Programmierer hat sich auf die universellen Windows- und Linux-Plattformen gestürzt. Das hat sich geändert. Mit vorgefertigten Embedded-Plattformen von Arduino, über Beaglebone bis Raspberry PI haben sich Communities etabliert, die eine stressfreie und einfache Embedded Programmierung ermöglichen. Im Besonderen bei der Arduino-Entwicklungsumgebung und der Vielfalt der Arduino-Systeme zeigt sich wie eine Multiplattformentwicklung für Embedded-
Systems möglich werden kann. Vorgefertigte Module und Bibliotheken mit einem reduzierten Framework ermöglichen effektives »Rapid Application Development«. Die Einstiegshürde für eingebettete Systeme wird dramatisch reduziert. Best Practices zeigen, dass die Entwicklung auch kleinster kostengünstiger Systeme möglich sind.
Über den Autor:
Prof. Dr.-Ing. Jörg Wollert ist Professor für eingebettete Systeme und Mechatronik an der FH Aachen. Berät Unternehmen zu verteilten Automatisierungssystemen, eingebetteten Systemen (im besonderen mit Funktechnik) und zu Industrie 4.0.