Das Programmbeispiel da_ad_test.ino hat zwar Daten an das Linux-Device gesendet, aber keine von diesem empfangen. Für die Kopplung beider CPUs ist auch der umgekehrte Weg erforderlich, was durch eine sehr einfache Programmerweiterung hier vorgenommen werdebildn soll. Vom Linux-Device wird ein String an das Arduino-Device gesendet, welcher nach Umwandlung in ein Byte die PWM zur Ausgabe eines Analogwertes einstellt. Daran schließt sich eine periodische AD-Umsetzung an, bis ein neues PWM-Byte empfangen und die PWM angepasst wurde. Dieser Vorgang wiederholt sich permanent. Listing 2 zeigt den Quelltext des Programmbeispiels pwm_ctrl.ino, während Bild 4 die Ausgaben des Programms im Monitor zeigt.
Nach dem Start des Programms ist die PWM zunächst auf Null gesetzt. Nach Eingabe eines Zahlenwertes (hier 128) und Abschluss durch Enter wird dieser Wert von der PWM übernommen und nach einer Einschwingzeit auch vom AD-Umsetzer so zurückgeliefert.
Eigenständiger Linux-Computer dank i.MX6
Der i.MX6 stellt einen unabhängigen Linux-Computer auf dem Udoo-Board dar. So können beispielsweise C-Programme bzw. Shell-, Lua- oder Python-Scripte auf dem i.MX6 erstellt werden, die ihrerseits mit dem Arduino kommunizieren. Hier sollen Linux-Anwendungen betrachtet werden, die die Performance des i.MX6 verdeutlichen.
Zum Erstellen eigener Anwendungsprogramme hat der UDOO mit der Ubuntu-Distribution bereits mächtige Tools an Bord. Neben der Bash-Shell sind hier vor allem C/C++ und Python zu nennen, die von vielen Nutzern bevorzugt werden. Lua soll ebenfalls kurz erwähnt werden.
Das eingesetzte Linux stellt eine Menge von Informationen über das Gesamtsystem zur Verfügung, die z.B. mit Hilfe von Shell-Kommandos abgefragt werden können. Listing 3 zeigt ein Shell-Script, das die Anzeige zahlreicher Systeminformationen auslöst: Informationen zur eingesetzten CPU, zur Linux-Version sowie die Laufzeit des Systems nach dem letzten Bootvorgang (uptime), der freie Speicher des Prozessors (free) und der Flash Card (df) sowie der angeschlossenen USB-Geräte (lsusb).
Bild 5 zeigt Aufruf und Ausgabe des Shell-Scripts boardinfo.sh. Die Angaben besagen, dass das UDOO einen i.MX6-Prozessor mit Quad-Core aufweist. Interessant ist die Angabe BogoMIPS: 1988.28, die nicht zu falschen Schlussfolgerungen verleiten sollte. BogoMIPS ist ein im Linux-Kernel verwendetes Maß für die CPU-Geschwindigkeit. Der Wert wird beim Booten ermittelt. In einer Kalibrierungsschleife wird die NOP-Instruktion der CPU vermessen, um im Kernel klassische Busy-Wait-Verzögerungsschleifen im Nanosekundenbereich korrekt realisieren zu können.
Der von Linus Torvalds eingeführte Test zeigt schon im Namen, der vom englischen bogus (gefälscht, scheinbar) und dem Maß Millionen Instruktionen pro Sekunde (MIPS) abgeleitet wurde, dass es sich dabei nicht um ein wissenschaftlich klar definiertes Maß handelt. Eine oft zitierte Definition ist „Die Anzahl der Millionen Wiederholungen pro Sekunde, die ein Prozessor in der Lage ist, absolut nichts zu tun“. Mittels BogoMIPS können also keine Leistungsvergleiche zwischen Prozessoren durchgeführt werden; dennoch sind solche Aussagen immer wieder im Netz zu finden. Neben dem UDOO konnte der Autor diese Information noch von einigen anderen Geräten (Raspberry Pi, Smartphones, Tablets) abfragen. Die Ergebnisse zeigt die Tabelle.
Beim hier vorliegenden UDOO ist auf dem i.MX6 ein Linux-Kernel der Version 3.0.35 installiert. Das Kommando uptime zeigt, dass das System mehr als einen Tag nach dem letzten Reboot läuft. Mit uptime kann man deshalb sehr gut auf die Stabilität eines Systems rückschließen. Mit load average bekommt man einen Hinweis auf die durchschnittliche CPU-Last des Systems. Die mittlere Last der letzten 1, 5 bzw. 15 min liegt bei 21 %, 34 % bzw. 33 %. Im nächsten Block werden der freie und benutzte Speicher des Systems gelistet, wie auch die vom Kernel verwendeten Pufferbereiche. Die Belegung der SD-Speicherkarte wird anschließend gelistet. Den Abschluss bildet die Anzeige über den USB und die angeschlossenen USB-Geräte. Mit top oder htop hat man weitere Tools, die die Eigenschaften des Systems aufzeigen.