-         

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 49

Thema: HaikuVM A Java VM for ARDUINO and other micros using the leJOS runtime.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2012
    Beiträge
    26

    HaikuVM A Java VM for ARDUINO and other micros using the leJOS runtime.

    Anzeige

    Hallo,

    ich möchte in diesem Forum HaikuVM vorstellen.

    HaikuVM ist eine weitere JAVA VM für Micros (ich habe mal mit ARDUINO und deshalb AVRs angefangen). In diesem Forum wurde schon mal NanoVM vorgestellt die das auch ähnlich konnte. Das Besondere ist, dass ich entschieden habe keine eigene Runtime zu bauen (viel zu aufwendig). Statt dessen nutze ich die von leJOS, einem großen JAVA Projekt für Lego Mindstorms Robotics Invention Kit Bausätze.

    HaikuVM funktioniert indem JAVA bytecode nach C Code konvertiert wird um letztlich durch einen C cross compiler für die Zielplattform kompiliert zu werden.

    Notwendige Software:
    1. JAVA 1.6
    2. WinAVR (C cross compiler für AVRs)
    3. HaikuVM
    4. Eclipse IDE (optional)


    HaikuVM wurde für Hobbyisten gebaut welche Applikationen für den ARDUINO bauen, um für sie die Welt von JAVA zu öffnen.
    Ja, mit HaikuVM kann man einen ARDUINO in JAVA programmieren!

    Wer schon immer mal das LED seines ARDUINO Boards in einem parallelen Thread blinken lassen wollte ... so geht's:
    Code:
    package arduino.tutorial;
    
    import static haiku.avr.lib.arduino.WProgram.*;
    
    public class BlinkWithThread extends Thread {
        static byte ledPin = 13;            // LED connected to digital pin 13
    
        public void run()                   // run over and over again
        {
            while (true) {
                digitalWrite(ledPin, HIGH); // sets the LED on
                delay(1000);                // waits for a second
                digitalWrite(ledPin, LOW);  // sets the LED off
                delay(1000);                // waits for a second
            }
        }
    
        public static void main(String[] args) {
            pinMode(ledPin, OUTPUT);        // sets the digital pin as output
            new BlinkWithThread().start();
        }
    }

    Features von HaikuVM:
    • Preemptive threads
    • Exceptions
    • Synchronization
    • double and float support
    • Arrays, including multidimensional ones
    • Recursion
    • Garbage collection
    • Supports inheritance and interfaces
    • Runs on AVR ATmega8, AVR ATmega328p (and Windows, UNIX)
    • Configurable 64, 32 or 16 bit data types including half precision float
    • Configurable 16 or 8 bit char type
    • Tested with Suns JAVA 1.6
    • Zero Assembler Code
    • Requires only down to 5k Bytes of code memory (includes HaikuVM and your Java program)
    • Needs only 250 Bytes RAM (the rest is for your JAVA application)
    • About 55k Java opcodes per second on 8 Mhz AVR ATmega8


    Und noch was: HaikuVM ist so klein, dass es sogar auf einem Atmega8 und dem ASURO Roboter läuft.
    Und ja, man kann damit auch einen ASURO Roboter mit JAVA programmieren!

    Wer neugierig geworden ist und probieren will wie HaikuVM läuft finden hier alles Nötige. Hilfe brauche ich vor Allem beim Test und bei der Portierung auf weitere Plattformen.
    Geändert von haikuvm (07.01.2013 um 21:51 Uhr)

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2012
    Beiträge
    26
    Schade, dass es hierzu bisher kein Feedback gegeben hat. Denn gerade bei der Roboterprogrammierung vermißt man schon mal schmerzlich Threading. Es geht zwar auch anders ... aber JAVA (und damit HaikuVM) bietet hierfür einen Sprachstandard (synchronized, wait(), etc.) und die Klasse Thread. Vielleicht sollte ich noch mal für HaikuVM werben und mache hiermit auf zwei Highlights aufmerksam:

    1) Single line command interface
    Nach dem Download genügt ein Einzeiler um ein JAVA Programm (z.B. BlinkWithThread) zu compileren, uploaden und zu starten wenn der Arduino z.B. an Port com5 angeschlossen ist:
    Code:
    C:\haikuVM\bin\haiku -v --Config arduino --Config:Port com5 -o BlinkWithThread.hex C:\haikuVM\examples\src\main\java\arduino\tutorial\BlinkWithThread.java
    2) Direct memory access
    Statische Felder welche mit @NativeCVariable# annotiert sind (wobei # in 8, 16, 32 oder 64) werden direkt auf gleichnamige C Variablen gemapt. Dadurch kann man mit HaikuVM auch hardwarenah programmieren (ohne extra C Code schreiben zu müssen):
    Code:
        ...
        public static final int UDRE0 = 5;
        @NativeCVariable8 // tells HaikuVM to map UCSR0A to an AVR 8Bit C variable called UCSR0A
        public static int UCSR0A;
        @NativeCVariable8 // tells HaikuVM to map UDR0 to an AVR 8Bit C variable called UDR0
        public static int UDR0;
        ...
        public void write(int b) {
            while ( (UCSR0A & (1 << UDRE0)) == 0 ) /*poll*/ ;
            UDR0=b;
        };

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Hallo Haiku !
    Also ich bin mal den Links gefolgt und mich mal ein bischen belesen , so gut es für mich als nur deutsch-lesender ging. Ist bestimmt nicht schlecht diese HaikuVM, aber ich komme mit der ArduinoIDE ganz gut, ansonsten macht es auch Bascom oder avr-studio in GCC bzw. asm. darum werde ich mir nicht noch eine andere Variante der Programmierung annehmen, ohne sie negieren zu wollen....

    Was nun die Codegrösse anbetrifft , darüber lässt sich diskutieren ob es dann eine andere Anwendung bei der Programmierung gerecht macht, was man an Speicher einspart...
    Wer nun auf den 8K vom Asuro verharren möchte der findet bestimmt auch Wege, was ging früher alles mit dem C-64 und seinen "mickrigen" 64k...
    Deine , oder diese VM-Idee ist bestimmt nicht schlecht, aber ich bleib bei meinen "alten Schuhen"...

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2012
    Beiträge
    26
    Hallo Oberlachs,
    ist ja mal nett, dass wenigstens einer drauf reagiert.

    Deine Argumente versteh' ich nur zu gut. HaikuVM soll dann auch nicht ArduinoIDE, Bascom oder avr-studio mit GCC bzw. asm ersetzen. Sondern eben nur als weitere open-source Alternative zur Verfügung stehen. Vielleicht dann, wenn man mit den Anderen nicht oder nur umständlich weiter kommt (z.B. bei Hirnverzwirnern bei denen eigentlich eine knappe parallelisiert Lösung mit JAVA Threads am elegantesten wäre) oder wenn man mit seinem JAVA Schulwissen auch einen 8bit bzw. 16bit Microcontroller programmieren möchte.

    Das mit einer JAVA VM für Microcontroller ist ja auch nicht meine Idee, sondern ich bin da ganz in den Fußstapfen von NanoVM (und anderen). Natürlich habe ich daraus gelernt und hoffe es noch ein bißchen besser (und für den Anwender bequemer) gemacht zu haben.
    Geändert von haikuvm (16.02.2013 um 12:08 Uhr)

  5. #5
    Hi HaikuVM,

    super Sache. Kenne die lejos VM vom Lego NXT - damit lässt sich diefinitiv mehr viel mehr aus dem Stein raushlone als mit NXTG.
    Und noch besser so hat mein Sohnemann angefangen Java zu programmieren.

    Bin dadurch zum FAN von Java geworden, weil viele Sache nicht so komplex sind wie bei C++.

    Nun haben wir ein NIBObee bekommen (wegen Löten und näher an der Technik) und wollen natürlich die bewährte Eclipse/Java Umgebung auch für den NIBObee nutzen.
    Hatte mich schon mal bei NanoVM eingelesen - sah aber recht fummelig aus.

    Da kommt uns HaikuVM gerade recht - soll ja auf dem Asuro funktionieren also dann beim NIBObee allemal - oder ?
    Gibt es etwas zu beachten ?

    Vielleicht hast du ja ein paar Tips für den Anfang.
    Auf jedenfall Fall weiter so -auch wenn noch nicht viele Posts gekommen sind - und nicht beirren lassen.

    catweazel

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2012
    Beiträge
    26
    Hallo catweazel,

    Na klar geht es weiter! Z.Zt. integriere ich ProGuard in den haikufy Prozess. ProGuard optimiert Bytecode. C Compiler haben so was von Haus aus. JAVA Compiler überlassen das heute lieber der HotSpot VM und die hat HaikuVM eben nicht (wäre auch viel zu groß für einen Micro).

    Den NIBObee habe ich nicht. Ich denke aber, dass auch NIBObee damit funktionieren sollte. Z.Zt. läuft HaikuVM definitiv für die Targets:
    • Atmega8
    • Atmega328p aber auch für
    • UBUNTU und
    • Windows
    als Target Maschinen.

    Du fragst nach Tipps:

    1) Langsam anfangen.
    Kopier Dir mit Eclipse das asuro Tutorial
    • C:\haikuVM\examples\src\main\java\asuro\tutorial

    ins neue nibobee Tutorial
    • C:\haikuVM\examples\src\main\java\nibobee\tutorial

    und fange darin an ein Programm nach dem anderen auf den NIBObee um zu schreiben.

    2) Folgende Zeilen für NIBObee in HaikuVM.properties anhängen
    Code:
    # NIBObee
    nibobee.Extends = AVR
    nibobee.Target = atmega16
    nibobee.MemorySize = 700
    nibobee.Clock = 15000000
    nibobee.MicroKernel = haiku.avr.lib.asuro.lib2_8_0_rc1.HaikuMicroKernelEx
    nibobee.Port = com7
    Damit Du auch bequem die Programme aus Schritt 1 mit nur einer Zeile testen kannst:
    Code:
    C:\haikuVM\bin\haiku -v --Config nibobee -o BlinkWithThread.hex C:\haikuVM\examples\src\main\java\nibobee\tutorial\BlinkWithThread.java
    Über Dein Feedback würde ich mich freuen.

  7. #7
    Hi Haiku,

    danke für die ausführliche Antwort.
    Wenn ich morgen Zeit habe, werde ich deine Tips mal umsetzen.

    Melde mich wieder hier, wenn es Neuigkeiten/Fragen/Probleme gibt.

    catweazel
    salmay dalmay adonay

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    25.01.2013
    Beiträge
    12
    Hallo haiku,

    Ich würde dieses tolle Projekt gerne mal aus probieren. Leider weiß ich nicht wie ich dies unter Mac OS oder Linux machen soll, da die .bat Dateien auf den Systemen nicht funktionieren. Auf der Projektseite steht, dass haikuvm erfolgreich auf ubuntu Linux getestet worden ist. Gibt es dafür eine Anleitung?

    LG Jan

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2012
    Beiträge
    26
    Hallo janvp,

    UNIX habe ich etwas vernachlässigt (obwohl ich aus dieser Ecke komme). Ich dachte, alle UNIXer brauchen nur einen Blick auf die bat-Dateien (haikuc, haikulink und haikuupload) werfen und können das schnell in ein shell-Skript übersetzen.

    Ich hoffe, dass ich mit der nächsten Version auch UNIX shell-Skripte mitliefern werde. (Falls du bis dahin welche hast übernehme ich die gerne.)

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2012
    Beiträge
    26
    Hallo janvp,

    jetzt gibt es die Version 1.0.0 von HaikuVM. In der habe ich Linux Scripte hinzugefügt.
    Genaueres zu Linux findet sich hier: http://haiku-vm.sourceforge.net/#Linux

    Auf dein feedback bin ich gespannt.
    Ansonsten viel Spaß damit.

    PS:
    Was hast du eigentlich genau vor? Wie soll dein Roboter aussehen?

Seite 1 von 5 123 ... LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] [ARDUINO] 2 Motoren + Servo mit dem Arduino Uno steuern
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.08.2011, 17:31
  2. ARDUINO ARDUINO l293D + MegaservoLib
    Von m1ch15inner im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 11.07.2011, 12:50
  3. Runtime Error! in AVR Studio
    Von NemesisoD im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 05.01.2007, 20:30
  4. (LEGO MINDSTORMS) lejos Klassen Facharbeit
    Von George Dorn im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 01.03.2006, 17:29
  5. lego, lejos, logitech ;)
    Von maze2k im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 7
    Letzter Beitrag: 21.05.2005, 23:21

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •