Projekt Beschreibung

PreonVM – Java VM für eingebettete Systeme
Anwendungen in Java™ programmierbar
Alle Java Datentypen inkl. long und double
Unbegrenzte Anzahl von Threads
Synchronisierung von Threads (synchronized)
Garbage Collection mit Speicherdefragmentierung
Exception-Behandlung für mehr Sicherheit
Große Klassenbibliothek inkl. vieler Treiber
System-Properties zur Konfigurierung von Anwendungen
Event System zur Behandlung von synchronen und asynchronen Events
Laufzeitbibliothek (Core, Utilities, Collections, IO, …)
Treiber für Funk-Transceiver nach IEEE 802.15.4
Treiber für Zugriff auf Flash oder FRAM Datenspeicher
Treiber für Datenerfassung (ADC, DAC,…)
Treiber für Bussysteme (I2C, SPI, USART, …)
Treiber für Timer und PWM
Treiber für weitere Peripherie (IRQ, RTC, GPIO, WatchDog, LED, Button, …)
Routing API (AODV, 6LowPan, …)
Treiber für verschiedene Sensoren und Geräte (SHT21, ADT7410, BH1710FVC, ITG3200, …)
Beschreibung
Die PreonVM ist eine virtuelle Maschine (VM) von VIRTENIO für den Einsatz in eingebetteten Systemen mit sehr geringen Ressourcen wie dem Funkmodul Preon32von VIRTENIO. Die virtuelle Maschine ist hoch optimiert, benötigt kein zusätzliches Betriebssystem und wird direkt auf dem verwendeten Mikrocontroller betrieben. Der Ansatz sieht vor, dass Anwendungen in Java™über einen Transformationsprozess für das Funkmodul Preon32 nutzbar werden. Im diesem Zusammenhang bietet VIRTENIO entsprechende Software-Bibliotheken für verschiedene Schnittstellen an. Damit wird die Programmierung von Anwendungen, die Sensordaten erfassen und Aktorensteuern,elegant möglich. Darüber hinaus sind die Funkschnittstelle für IEEE802.15.4 und eine AES-Verschlüsselung in Hardware als innovative Bestandteile genannt, die in der virtuellen Maschine einfach nutzbar sind
Vorteile der PreonVM
Eingebettete Systeme mit minimalen Ressourcen wurden bisher in speziellen und wenig komfortablen Sprachen programmiert. Komplexe Anwendungen sind deshalbzeitaufwendig und mit einem hohen Fehlerpotential umzusetzen. Der Ansatz von VIRTENIObringt den Komfort, die Sprachkomplexität und die Sicherheit einer virtuellen Maschine in Kombination mit einer objektorientierten Programmiersprache in die Welt der eingebetteten Systeme. Aktuell bietet VIRTENIO für sein Funkmodul Preon32 für drahtlose Netzwerke nach IEEE 802.15.4 die virtuelle Maschine als innovative Betriebssoftware an.
Durch die Verwendung einer virtuellen Maschine wird das Anwendungsprogramm für das Funkmodul unabhängig von der tatsächlich verwendeten Architektur. Das hat den Vorteil, dass Anwendungsprogramme unverändert und ohne einen manuellen Anpassungsprozess ausgeführt werden können, auch wenn bspw. der Prozessor oder Funktransceiver durch einen anderen Typ ausgetauscht werden.

Gleichzeitig werden der Entwicklungsprozess der Hardware und des Anwendungsprogramms entkoppelt. Das Anwendungsprogramm wird gegen eine virtuelle Architektur mit entsprechenden Schnittstellen entwickelt, die über die Zeit unverändert bleibt.
Zudem wurde die virtuelle Maschine derart optimiert, dass Anwendungen auf einem 8/32-Bit-Mikrocontroller ab 8 KByte RAM und ab 128 KBtye Flash performant ausgeführt werden können. Die komplette virtuelle Maschine mit Anbindung der Peripherie wie dem Funk-Transceiver nach IEEE 802.15.4 hat daher einen Speicherplatzbedarf von weniger als 60KByte Flash.
ClassLinker zum linken von Java Klassen
Auf den drahtlosen Sensorknoten vom Typ „Preon32” wird die von Virtenio entwickelte virtuelle Maschine als Betriebssoftware eingesetzt. Mit dieser Betriebssoftware ist es möglich, dass Anwendungen, die als Quellcode in Java™ geschrieben sind, auf dem Preon32 genutzt werden können, nachdem Sie den folgenden Transformationsprozess durchlaufen haben.

Zunächst müssen alle Bestandteile der Anwendung im einfachsten Fall als Java™-Quellcode oder auch Jar-Archiven vorliegen. Dann werden Sie vom Java™-Compiler in Java™-Byte-Code übersetzt, der für jede Klasse eine Datei mit dem Klassennamen und der Dateiendung „.class“ erzeugt. Die Java™-Class-Dateien enthalten die Methoden der Klasse und viele zusätzliche Informationen, die jedoch auch einen zusätzlichen Speicherplatz belegen. Dieser ist im drahtlosen Sensorknoten nur sehr begrenzt verfügbar. Aus diesem Grund erfolgt als nächster notwendiger Schritt eine Informationsreduzierung und Bündelung von Java™-Class-Dateien mittels des VIRTENIO ClassLinkers zu einer einzigen Datei mit der Endung *.vmm. Diese enthält alle Informationen, die zur Programmausführung auf der virtuellen Maschine im Sensorknoten benötigt werden. Die Dateigröße der „prog.vmm” ist durch entsprechende Verfahren deutlich geringer als die Summe der einzelnen Java-Class-Dateien. Die „prog.vmm” kann mit dem NodeTool auf den Sensorknoten geladen und dort ausgeführt werden.
Bibliotheken
Um dem Entwickler für komplexe Anwendungen in verteilten eingebetteten Systemen wie drahtlose Netzwerken einen idealen Ausgangspunkt zu bieten, wurde die virtuelle Maschine durch viele Softwarekomponenten ergänzt. Mit dieser Voraussetzung können Anwendungen wie aus einem Baukasten schnell zusammengesetzt werden. Eigene Softwareteile aus vorhandenen Java™-Anwendungen für den Desktop können so ohne Anpassung der Quelldaten integriert werden. Mit den gewohnten Entwicklungswerkzeugen für Java™ können nun Anwendungen für drahtlose Sensornetzwerke umgesetzt werden.
Technische Daten
Unterstützung für Anwendungen (Auszug) | |
---|---|
Basistypen | char, byte, short, int, long, float, double |
Strukturen | Arrays, ArrayList, Collection, Hashtable, Set, Vector |
Streams | Input, Output |
Exceptions | try, catch, Exception, RuntimeException |
StringBuffer / StringBuilder | Ja / Ja |
Thread | Ja, unbegrenzt in der Anzahl |
Sprachkonstrukt synchronized | Ja |
System-Properties | Ja |
Unterstützung für Funkmodul Preon32 (interne Ressourcen) | |
CPU-Power-Modes | Ja, (Active, Idle, Sleep, Shutdown) |
CPU-WatchDog | Ja |
CPU-IRQs | Ja |
CPU-RTC | Ja |
CPU-Timer | Ja |
CPU-FLASH | Ja |
CPU-BACKUP-Register | Ja |
CPU-ADC | Ja, 2 × 12-Bit, 1 MSPS, 16 Kanäle |
CPU-DAC | Ja, 2 × 12-Bit |
CPU-I2C | Ja, 1x Kanal bis 400 kBit/s |
CPU-SPI | Ja, 3x Kanäle bis 18 Mbit/s |
CPU-USART | Ja, 3x Kanäle synch./asynch. bis 4.5 Mbit/s |
CPU-PWM | Ja |
CPU-CAN | Ja |
Unterstützung für Funkmodul Preon32 (externe Ressourcen) | |
Serial Flash über SPI | Ja, read/write/erase, block mode |
Funkchip über SPI | Ja, IEEE 802.15.4, Datenraten 256 KBit/s bis 2 MBit/s, Frames: Data, Beacon, Command |
AES-Verschlüsselung in Hardware | Ja, 128-Bit EBC/CBC |
Software-Unterstützung für Evaluationsmodul „Preon32 Shuttle“ | |
Auslesen des Tasters (Benutzer) | Ja |
Ansteuerung der LEDs | Ja, (grün, gelb, rot, amber) |
RS232 über USB | Ja, bis 931.6 KBaud zum PC |
Software-Unterstützung für Sensor-Modul „VariSen“ | |
Treiber für Sensor „Temperatur“ | Ja |
Treiber für Sensor „Beleuchtungsstärke“ | Ja |
Treiber für Sensor „Luftfeuchtigkeit“ | Ja |
Treiber für Sensor „Magnetfeld“ | Ja |
Treiber für Sensor „Luftdruck“ | Ja |
Treiber für Sensor „Beschleunigung“ | Ja |
Treiber für Sensor „Rotationsgeschwindigkeit“ | Ja |
Codebeispiele
Codebeispiel: Kompression und Dekompression per GZIP
In diesem Beispiel wird ein Datenblock mit einer Länge von 1024 Byte komprimiert. Für die Kompression der Textnachricht (Lorem_ipsum_1024) wird der Gzip-Algorithmus aus der im Internet verfügbaren Bibliothek "compress_j2me" verwendet. Diese Bibliothek wurde ursprünglich für Mobiltelefone mit Java ME [...]
Codebeispiel: Extrahieren von Sensordaten aus XML
In diesem Beispiel für die PreonVM werden auf dem Funkmodul Preon32 gespeicherte Messdaten, die in einer XML-Beschreibung (eXtensible Markup Language) vorliegen, ausgewertet. Die Umsetzung zeigt die Leistungsfähigkeit des Funkmoduls Preon32. Für das Parsen der XML-Beschreibung wird die im Internet verfügbare [...]
Codebeispiel: Transformation von Sensordaten nach XML
In diesem Beispiel für die PreonVM werden auf dem Funkmodul Preon32 eingelesene Meßdaten der Sensor-Erweiterung VariSen in eine XML-Beschreibung (eXtensible Markup Language) transformiert. Die Umsetzung zeigt die Leistungsfähigkeit des Funkmoduls Preon32. Für die Erzeugung der XML-Beschreibung wird die im [...]
Codebeispiel: AES Verschlüsselung des AT86RF231 nutzen
Eine verschlüsselte Datenübertragung ist bei drahtloser Kommunikation von besonderer Bedeutung. Mit einer Verschlüsselung kann ein unberechtigtes Abhören der Funkschnittstelle und Auswerten der Daten verhindert werden. Ein für die höchste Geheimhaltungsstufe zugelassenes Verfahren ist der Advanced Encryption Standard (AES). Der [...]
Codebeispiel: Daten per IEEE 802.15.4 empfangen
Das Funkmodul Preon32 setzt einen 2.4 GHz Transceiver ein, um Daten im Rahmenformat IEEE 802.15.4 zu senden und zu empfangen. Dieses Rahmenformat ermöglicht die Umsetzung von höheren Protokollschichten wie Zigbee oder 6loWPAN, um nur zwei Möglichkeiten zu nennen. In [...]
Codebeispiel: Daten per IEEE 802.15.4 senden
Das Funkmodul Preon32 setzt einen 2.4 GHz Transceiver ein, um Daten im Rahmenformat IEEE 802.15.4 zu senden und zu empfangen. Dieses Rahmenformat ermöglicht die Umsetzung von höheren Protokollschichten wie Zigbee oder 6loWPAN, um nur zwei Möglichkeiten zu nennen. In [...]
Codebeispiel: Bewegung in 3-Achsen des ITG-3200 über I2C auslesen
Der auf dem Funkmodul Preon32 eingesetzte Mikrocontroller verfügt über eine Vielzahl von Schnittstellen. Über diese lassen sich sowohl Sensoren als auch Aktoren mit unterschiedlichen Protokollen ansteuern. Für das Funkmodul passend entwickelt, bietet VIRTENIO ein Sensormodul VariSen für das Preon32 [...]