Ich denke so:
Beim Programmieren von Robotern hat der Beginner zwei Probleme.
Erstens muss er sich in die Hardware des Roboters und besonders des Mikrocontrollers hineindenken. Dazu muss man das Handbuch studieren, um beispielsweise zu erfahren wie man ein Bit in Port-Register B setzt, weil damit z.B. die LED verbunden ist, die man zum Leuchten bringen will. In C/C++, aber eben auch in HaikuVM, kann man dies dann durch eine einfache Zuweisung umsetzten:
Die Arduino Community geht einen leicht anderen Weg und versucht durch das Bereitstellen einer Arduino Lib von der konkreten (Mikrocontroller-)Hardware zu abstrahieren beispielsweise indem Pins einfach durchnummeriert werden. Diese Lib wird von HaikuVM transparent unterstützt. Durch diese Lib läßt sich die selbe Aufgabe in C/C++, aber eben auch in HaikuVM, wie folgt umgesetzt:Code:PORTB |= 1 << 5;
Zweitens ist man bei der Programmierung von Roboteren schnell mit dem Problem der Parallelität konfrontiert. Beispielsweise, wie lasse ich eine LED blinken wärend der Robotor fährt bzw. seine Aufgabe erfüllt? Zur Lösung bieten sich viele Programmiertechniken für C/C++ und Java an (z.B. Zustandsautomaten). Java, und damit auch HaikuVM, bietet darüber hinaus auch das Sprachmittel Threads mit dem sich Parallelität auf "natürliche" Weise abbilden läßt.Code:digitalWrite(13, HIGH);
Klar, gibt es dann immer wieder die Kritik an die Performance von interpretierendem Java. Aber, so ein 8 MHz AVR ist viel viel schneller als man denkt. Mein ASURO (natürlich in Java/HaikuVM programmiert) folgt locker und zügig einer Linie, erkennt Kollision und läßt in einem parallelen Thread seine LEDs blinken. Wäre er in C/C++ programmiert, wäre kein Verhaltensunterschied zu erkennen. (Intern müsste man evtl. das LED-Blinken trickreicher programmieren.)
Bei einem 16 MHz Arduino ist für Java/HaikuVM sogar noch so viel mehr (Performance-)Luft, dass man getrost alle - für Anfänger und Profis komfortablen - Exceptions wie zum Beispiel NullPointerException und ArrayIndexOutOfBoundsException einschalten kann ohne, dass der Robotor überhaupt was davon "merkt"![]()
Lesezeichen