|
|
SJCEs existiert ein experimenteller Java-Compiler namens SJC (siehe Link unten), der direkt nativen Code für diverse Plattformen erzeugt, wobei die Syntax abgesehen von Enums und Generics der von Java 1.5 entspricht und keine Bibliotheken oder virtuelle Maschinen vorausgesetzt werden. Neben nativem ia32 und x86_64 kann auch Code für die ATmega-Reihe und ARM7-Controller wie z.B. LPC2103 erzeugt werden.
[Bearbeiten] Übersicht über SJCDer Compiler wird für Forschung und Lehre sowie diverse private Projekte eingesetzt, ist vollständig in Java geschrieben und steht unter GPL. Da er sich selbst übersetzen kann und entsprechende Konfigurationen für Linux- und Windows-Ausgaben existieren, können statt der Java-Class-Files auch einzeln ausführbare Versionen verwendet werden, für die keine SunJava-Umgebung und keine Bibliotheken erforderlich sind. Derzeit ist der Optimierer noch sehr rudimentär, so dass derzeit gegenüber einer vergleichbaren Implementierung in C und voll optimierendem avrgcc mit etwa mit Faktor 2 Flashbedarf gerechnet werden muss. Der Autor freut sich über Mithilfe beim Optimierer... ;-) [Bearbeiten] Systemprogrammierung mit SJCHardwarezugriff Um den Zugriff auf die Hardware auch in Java zu ermöglichen, existieren drei Spezial-Klassen:
Laufzeitumgebung Die Laufzeitumgebung wird immer mitübersetzt, es kann also gezielt auf Bestandteile verzichtet werden, die nicht benötigt werden, es muss aber auch alles vorhanden sein, was verwendet wird. Wird zum Beispiel "new" verwendet, muss die Methode rte.DynamicRuntime.newInstance(.) implementiert werden, bei einem Cast zwischen Objekten isInstance(.) etc. Beispielumgebungen sind unter untenstehendem Link auf SJC vorhanden, das Handbuch beschreibt die erforderlichen und optionalen Klassen und Methoden. Kurzanleitung 1. Benötigte Dateien und angenommene Verzeichnisstruktur
Der Compiler kann entweder aus den jeweils aktuellen "executables" der offiziellen Version von http://www.fam-frenz.de/stefan/compiler.html oder aus dem nächtlichen Build von http://www.fam-frenz.de/stefan/compsnpe.zip bezogen werden. Die beiden anderen Dateien im Hauptverzeichnis zur Konfiguration sowie ein kleines Testprojekt für den Verzeichnisbaum "src" sind unter http://www.fam-frenz.de/stefan/atbasenw.zip für ein ATmega-Projekt verfügbar, die entsprechenden Dateien für ein ARM-Projekt folgen. 2. Testaufruf für ATmega-Projekte
Erzeugt werden sollten aus allen (!) Quelltexten im Verzeichnis "src" eine Datei syminfo.txt mit textuellen Informationen zum erzeugten Image sowie eine Datei BOOT_ATM.HEX, die das erzeugte Image enthält und von avrdude weiterverwendet werden können sollte, je nach lokalen Gegebenheiten zum Beispiel mittels: avrdude -P /dev/ttyUSB1 -p m32 -c stk500v2 -U flash:w:BOOT_ATM.HEX 3. Erläuterung der Optionen Der Compiler übersetzt im Gegensatz zum Java-Compiler von Sun nicht eine Datei nach der anderen und sucht sich die jeweils referenzierten Dateien selbst, sondern übersetzt genau die angegebenen Dateien oder rekursiv alle auffindbaren Java-Dateien in einem Verzeichnis (in obigem Beispiel "src"). Er erzeugt standardmäßig Code für die ia32-Architektur mit einfachem Speicher-Dump und diversen Java-konformen Einstellungen. Für die Verwendung mit dem ATmega sind "ein paar" andere Einstellungen sinnvoll:
Geplante Erweiterungen Für den Compiler sind eine Reihe von Erweiterungen geplant, die derzeit mangels Zeit noch nicht umgesetzt sind:
[Bearbeiten] Umgesetzte ProjekteHier soll eine kleine Liste der Projekte entstehen, die mit SJC umgesetzt wurden, zur leichteren Einordnung optimalerweise mit Autor und Datum des ersten Eintrags.
[Bearbeiten] Software
[Bearbeiten] Siehe auch
|