Nachdem die Benchmarks interessante Ergebnisse geliefert hatten, wollte ich erste Anwendungsprogramme ausprobieren.
Auf der Linux-Seite habe ich mit dem CPU-Clock experimentiert und auf der Arduino-Seite sollte der DHT11 Daten liefern, die später zum MQTT-Broker gesendet werden sollten. Zu diesem Zweck habe ich Mosquitto installiert.
Linux-Anwendungen
Clock Control
Linux bietet die Möglichkeit, die Taktfrequenz des Prozessors (CPU) auszulesen und wenn notwendig, auch zu modifizieren bzw. den aktuellen Bedürfnissen an Rechenleistung und Stromverbrauch anzupassen. Dies wird normalerweise vollautomatisch erledigt.
Während die Taktfrequenzstufen und -grenzen durch die Hardware vorgegeben sind, entscheidet ein sogenannter „(Scaling-)Governor“, wie die Taktfrequenz automatisch geregelt bzw. konkret angepasst wird.
Verfügbare Governors
- ondemand – Standard bei den meisten Systemen. Die CPU-Frequenz wird den aktuellen Bedürfnissen an die Rechenleistung angepasst. Dabei wird die CPU-Frequenz u.U. sprunghaft angehoben oder abgesenkt.
- conservative – Die CPU-Frequenz wird den aktuellen Bedürfnissen an die Rechenleistung angepasst. Die Taktfrequenz wird aber Schritt-für-Schritt angehoben bzw. abgesenkt.
- performance – CPU läuft permanent auf der höchsten erlaubten Taktfrequenz.
- powersave – CPU läuft permanent auf der niedrigsten erlaubten Taktfrequenz.
- userspace – Dies ist kein kernel-eigener Governor. Vielmehr wird ein eigenes Governor-Programm verwendet
Der folgende Shell-Script zeigt, wie der ondemand-Governor aktiviert wird.
#!/bin/bash
i=0 # there is one CPU on UDOO NEO only
echo "Set CPU frequency of UDOO NEO ondemand"
echo ondemand > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
echo -n "CPU0 Frequency = "
cat /sys/devices/system/cpu/cpu$i/cpufreq/cpuinfo_cur_freq
MQTT
Die Installation von Mosquitto auf dem UDOO NEO erfolgt durch den folgenden Aufruf
sudo apt-get install mosquitto mosquitto-clients
Es werden der Mosquitto Server sowie Publish und Subscribe Clients installiert.
Für einen ersten Test kann man die Systemmitteilungen des auf dem UDOO NEO installierten Mosquitto-Brokers abonnieren. Durch Aufruf des Kommandos
mosquitto_sub -h localhost -v -t "\$SYS/#"
und unmittelbares Beenden mit Ctrl-C erhält man die in der folgenden Abbildung gezeigte Ausgabe.
Neben der Versionsangabe sind eine Menge statistischer Daten zu sehen, die hier aber nicht weiter vertieft werden sollen. Wenn der Subscriber diese Messages erhält, dann arbeiten der lokale Mosquitto-Broker (localhost) und der Subscriber-Client auf dem UDOO NEO einwandfrei.
Arduino-Anwendungen
Sieve of Eratosthenes
Als Arduino Benchmark verwende ich das „Sieve of Eratosthenes„, um die CPU-Performance verschiedener Arduinos auszuweisen.
Die Ergebnisse für die von mir untersuchten Arduinos sowie Links zu den Quelltexten sind unter http://www.ckuehnel.ch/arduino_benchmarks.html zusammengestellt.
DHT11
Zur Unterstützung der DHTxx Temperatur- und Feuchtigkeitssensoren sind verschiedene Libraries verfügbar. Ich habe mit der Library von Rob Tillaart gearbeitet, die sowohl AVR als auch ARM unterstützt.
Da der Cortex-M4 auf dem UDOO NEO mit 200 MHz getaktet wird, habe im File dht.h den Eintrag
#define F_CPU 200000000UL
ergänzt. Die folgenden Bilder zeigen Quelltextauszug und Ergebnisausgabe des Testprogramms dht11_test.ino.