Virtuelle Maschine »Java« mit 28 KByte

Bild 1: Blockschaltbild der 28 KByte großen virtuellen Java-Maschine »MicroJVM«
Blockschaltbild der 28 KByte großen virtuellen Java-Maschine »MicroJVM«

Der Vorteil von virtuellen Maschinen mit »Java« ist die Portier- und Skalierbarkeit. Bislang hatten typische Java-Laufumgebungen einen Speicherumfang von etwa 5 MByte und verlangten nach Prozessoren mit über 400 MHz. Somit war der Einsatz Javas für ressourcenarme eingebettete Systemen bislang ausgeschlossen.

Das gegen Mitte der 1990er Jahre bekannt gewordene »Java« ist seit langem schon die bevorzugte Plattform für die Entwicklung grafischer Benutzerschnittstellen (GUI), des »Internet der Dinge« (IOT), serviceorientierter Architekturen (SOA) und von Applikationen für das Web und mobile Geräte. Java besteht aus zwei Komponenten: der objektorientierten Java-Sprache und einem 32-Bit-Prozessor mit 204 Befehlen und eigenem Speichermodellverwalter.

Durch das Zusammenspiel von Javas - objektorientiertem Programmieran-satz und der unabhängigen virtuellen Maschine wird das als »programmiere einmal, führe überall aus« bezeichnete Ziel für Portierbarkeit und Skalierbarkeit von SW-Anwendungen erreicht. Dank Virtualisierung und Simulation lassen sich Entwicklungszyklen von Hard- und Software zudem entkoppeln.

Bislang hatten Java-Laufzeitumgebungen einen Speicherumfang von etwa 5 MByte und verlangten nach Prozessoren, die über 400 MHz getaktet waren. Somit war der Einsatz Javas für ressourcenarme eingebettete Syste-me ausgeschlossen. Embedded-Entwickler, die fortschrittliche Mensch-Maschine-Schnittstellen entwickelten, mussten auf teure, dedizierte GUI-Prozessoren zurückgreifen. Deren Einsatz war mühsam und benötigte Entwicklungswerkzeuge, die in speicherintensiven Anwendungen mündeten; oder sie versuchten, grafische Komponenten direkt in C-Routinen zu konvertieren, wodurch sie potenziell die Systemsicherheit gefährdeten und die Gesamtperformance und Wartbarkeit der Applikationen aufs Spiel setzten.

Mit »MicroEJ« hat IS2T nun eine Java-Plattform vorgestellt, welche die Entwicklung und Integration Java-basierter Funktionen für in C und C++ geschriebene Anwendungen unterstützt, die für preiswerte und speicherarme auf Cortex M basierende Mikrocontrol-ler bestimmt sind. MicroEJ stellt eine Java-Laufzeitumgebung zur Verfügung, welche die nur mehr 28 KByte große virtuelle Java-Maschine »MicroJVM« beinhaltet, sowie ein optionales Echtzeitbetriebssystem (RTOS) mit etwa 10 KByte mit allen notwendigen Bibliotheken, um anspruchsvolle grafische HMIs zu unterstützen.

Zusätzlich beinhaltet sie noch eine voll funktionsfähige Simulationsplattform, um die von Fehlern befreite und getestete Anwendung in Form binären Codes direkt auf alle unterstützten Mikrocontrollertypen übertragen zu können. MicroJVM benötigt als virtuelle Java-Maschine dabei 28 KByte Flash-Speicher, weniger als 1,5 KByte RAM und fährt bei 120 MHz in lediglich 2 ms hoch (Boot-Zeit).

Ein voll ausgeprägtes und im Design fortschrittliches grafisches HMI-Programm benötigt insgesamt zwischen 90 KByte und 140 KByte Speicher. Eine eingebettete MicroEJ-Plattform umfasst neben der virtuellen Maschine MicroJVM noch Standardbibliotheken wie »B-ON« und »CLDC«, das »MWT« (eingebettetes Widgets-Framework), das »NLS« (eingebetteter Ländersupport), den Laufzeit-PNG-Bilddekoder sowie grafische Werkzeuge für das Design von Schriftarten und HMI-Storyboards.

Einfache Entwicklung

Eine MicroEJ-Simulationsplattform ermöglicht die voll funktionstüchtige Simulation einer eingebetteten Java-Plattform, da sich erweiterbare Hardware- oder Software-Attrappen (»mocks«) integrieren lassen, die sich wie ein Zielsystem mit dessen Eingabeschnittstellen wie Sensoren und Aktoren verhalten. Applikationen lassen sich als Java-Prototyp entwickeln und in der MicroEJ-Entwicklungsumgebung für eine Zielplattform simulieren, unabhängig von der Existenz der Zielplattform selbst.

Dies vereinfacht die Test- und Integrationsphase und vermeidet aufwendige Entwicklungszyklen. Wenn der Prototyp abgenommen ist, kann die Entwicklung in Java fortgesetzt werden. Abschließend lassen sich die Funktionen der Anwendung anhand der Simulation und der im MicroEJ-SDK (Software Development Kit) zur Verfügung stehenden Testwerkzeugen vollständig prüfen.

Die fertiggestellte Anwendung gelangt als Binärdatei per JTAG-Sonde oder anderen Chip-Programmiersystemen auf das Zielsystem. Die simulierte Plattform benutzt die gleichen SW-Bibliotheken, bildet die gleichen Thread-Scheduling-Schemata ab und stellt die gleichen Speicherverwaltungsmodelle zur Verfügung wie die Plattform auf dem eingebetteten Zielsystem. Somit wissen die auf dem PC arbeitenden Entwickler im Voraus, wie viel Speicher sie benötigen werden, und können den kosteneffektivsten Mikrocontroller auswählen.

C/ASM-Treiber und existierende Anwendungen lassen sich einfach in die MicroEJ-Plattform einbinden und aus dem Java-Code heraus nutzen; bestehender C-Code kann neben der Java-Anwendung weiterlaufen. Die native SNI-Bibliothek erlaubt Aufrufe von C-Funktionen aus der Java-Applikation heraus und umgekehrt, wobei sich die Parameter der Basistypen Integer, Float und Tabelle nutzen lassen.

SNI kann somit einen effizienten Weg bieten, auf Daten aus beiden Welten zuzugreifen, wobei Zwischenpuffer und aufwendige Kopiervorgänge von Datenfeldern vermieden werden. Für eine noch stärkere Entkopplung von Daten und Tasks verwen-den MicroEJ-Entwickler die »ShieldedPlug«-Schnittstelle. Ein Publish-Subscribe-Mechanismus verbunden mit einem ereignisbasierten System ermöglicht eine Raum-Zeit-Entkopplung zwischen den C- und Java-Welten.

Die MicroEJ-Plattformen sind für auf Cortex-M3/M4 basierende Mikrokontroller erhältlich. Die Evaluierungsversion kann kostenlos von der Website heruntergeladen werden. Voll konfigurierbare Micro-EJ-Entwicklungsumgebungen sind für die Mikrocontroller von STMicrolectronics erhältlich. Unterstützung für Bausteine anderer Hersteller soll in den nächsten Monaten folgen.