Eine Java VM für Mikrocontroller

HaikuVM

Bob Genom


HaikuVM ist eine Java Virtual Machine für Mikrocontroller und wurde zuerst auf AVRs – dabei handelt es sich um die 8-Bit-Mikrocontroller-Familie von Atmel – und der Arduino-Plattform entwickelt. Es ist Open Source, wird auf SourceForge gehostet und zielt insbesondere auf Mikrocontroller mit wenig Ressourcen an Flash- und RAM-Speicher ab. HaikuVM steht in der Tradition und wurde inspiriert von vielen anderen Java VMs für Mikrocontroller, beispielsweise leJOS (mit TinyVM), TakaTuka, Toba, bajos, Darjeeling, JC, SlimVM und NanoVM.

Insbesondere NanoVM zeigt, dass es möglich ist, eine Java VM auch für Mikrocontroller mit sehr wenigen Ressourcen zu implementieren. So laufen NanoVM und HaikuVM auch auf einem ATmega8 Mikrocontroller mit nur 8K Flash und 1K RAM – das ist selbst im Vergleich zum LEGO MINDSTORMS NXT Controller eher winzig. Im Unterschied zu NanoVM implementiert HaikuVM aber ausnahmslos alle Bytecode-Instruktionen von Java in der Version 6. Spannende Features wie Threads (inklusive synchronized), Exceptions und Garbage Collection werden unterstützt.

Haikufy your World!

Wie funktioniert nun HaikuVM? Es analysiert den Java-Bytecode und übersetzt diesen in C-Datenstrukturen. Diese werden zusammen mit der Java VM (HaikuVM selbst ist in C geschrieben) durch einen C-Crosscompiler (hier: avr-gcc) für die Zielplattform kompiliert. Dieser Prozess wird „Haikufying“ genannt und ist als Framework in Java implementiert (Abb. 1).

Abb. 1: Haikufying

Um gleich einem naheliegenden Missverständnis vorzubeugen: Es wird hier kein Java-Bytecode (also class-Dateien) direkt auf den Mikrocontroller geladen und dort dann von einer vorinstallierten Java VM (hier: HaikuVM) interpretiert. Denn eine vollständige Java VM, eventuell noch inklusive einer vollständigen Laufzeitumgebung, ist viel zu groß für einen kleinen Mikrocontroller.

Die Kunst, also das Haikufying, besteht darin, im Vorfeld die Java-Anwendung zu analysieren und danach die Java VM so zu reduzieren, dass sie nur das enthält, was von der Anwendung auch wirklich gebraucht wird. Wird beispielsweise kein double- bzw. float-Typ gebraucht – diese Datentypen nutzen Programmierer von Mikrocontrollern eher ungern –, dann wird die Java VM von Haus aus ohne die Bytecode-Implementierungen für double- bzw. float-Operationen erzeugt. Wenn kein Threading genutzt wird, entfallen automatisch Implementierungen für den entsprechenden Bytecode usw. Aber auch auf Methoden- und Klassenebene wird alles eingespart, was nicht aufgerufen bzw...

Eine Java VM für Mikrocontroller

HaikuVM

Bob Genom


HaikuVM ist eine Java Virtual Machine für Mikrocontroller und wurde zuerst auf AVRs – dabei handelt es sich um die 8-Bit-Mikrocontroller-Familie von Atmel – und der Arduino-Plattform entwickelt. Es ist Open Source, wird auf SourceForge gehostet und zielt insbesondere auf Mikrocontroller mit wenig Ressourcen an Flash- und RAM-Speicher ab. HaikuVM steht in der Tradition und wurde inspiriert von vielen anderen Java VMs für Mikrocontroller, beispielsweise leJOS (mit TinyVM), TakaTuka, Toba, bajos, Darjeeling, JC, SlimVM und NanoVM.

Insbesondere NanoVM zeigt, dass es möglich ist, eine Java VM auch für Mikrocontroller mit sehr wenigen Ressourcen zu implementieren. So laufen NanoVM und HaikuVM auch auf einem ATmega8 Mikrocontroller mit nur 8K Flash und 1K RAM – das ist selbst im Vergleich zum LEGO MINDSTORMS NXT Controller eher winzig. Im Unterschied zu NanoVM implementiert HaikuVM aber ausnahmslos alle Bytecode-Instruktionen von Java in der Version 6. Spannende Features wie Threads (inklusive synchronized), Exceptions und Garbage Collection werden unterstützt.

Haikufy your World!

Wie funktioniert nun HaikuVM? Es analysiert den Java-Bytecode und übersetzt diesen in C-Datenstrukturen. Diese werden zusammen mit der Java VM (HaikuVM selbst ist in C geschrieben) durch einen C-Crosscompiler (hier: avr-gcc) für die Zielplattform kompiliert. Dieser Prozess wird „Haikufying“ genannt und ist als Framework in Java implementiert (Abb. 1).

Abb. 1: Haikufying

Um gleich einem naheliegenden Missverständnis vorzubeugen: Es wird hier kein Java-Bytecode (also class-Dateien) direkt auf den Mikrocontroller geladen und dort dann von einer vorinstallierten Java VM (hier: HaikuVM) interpretiert. Denn eine vollständige Java VM, eventuell noch inklusive einer vollständigen Laufzeitumgebung, ist viel zu groß für einen kleinen Mikrocontroller.

Die Kunst, also das Haikufying, besteht darin, im Vorfeld die Java-Anwendung zu analysieren und danach die Java VM so zu reduzieren, dass sie nur das enthält, was von der Anwendung auch wirklich gebraucht wird. Wird beispielsweise kein double- bzw. float-Typ gebraucht – diese Datentypen nutzen Programmierer von Mikrocontrollern eher ungern –, dann wird die Java VM von Haus aus ohne die Bytecode-Implementierungen für double- bzw. float-Operationen erzeugt. Wenn kein Threading genutzt wird, entfallen automatisch Implementierungen für den entsprechenden Bytecode usw. Aber auch auf Methoden- und Klassenebene wird alles eingespart, was nicht aufgerufen bzw...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang