mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Java auf AVR


Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hat doch tatsächlich einer eine JVM geschrieben, die auf einem
ATmega8 läuft. Siehe http://www.harbaum.org/till/nanovm/

PS: Mich würde mal interessieren, wieviele bei dem Betreff dachten, ich
würde nach sowas fragen und schon antworten wollten, wie unrealistisch
das sei :-)

: Gesperrt durch Moderator
Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
D. h. ich habe 512 Byte für das Userprogramm zur Verfügung.

Autor: Sebastian Schildt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf:
"Mich würde mal interessieren, wieviele bei dem Betreff dachten, ich
würde nach sowas fragen und schon antworten wollten, wie unrealistisch
das sei"


Hier ist einer :-/
Hatte mir die Gegenargumente schon alle im Kopf zurecht gelegt, als ich
geklickt habe :)

Autor: Philipp Sªsse (philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollte nur einen Link posten, warum das Humbug ist ... (-;

Nun gut: "It is not a full Java VM, since it does not support
exceptions, threads, floating point arithmetic and various other
things" Aber immerhin. Kurz vor unfaßbar; ich ziehe meinen Hut!

Autor: Mark Hämmerling (haemi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Salve,

lach ja, ich muß zugeben, auch ich hatte hier einen kleinen Flamewar
erwartet, darüber, daß es überflüssig ist, auch nur einen Gedanken an
soetwas utopisches zu verschwenden... tja, hab mich wohl getäuscht. :)

Was den EEPROM als Bytecode-Quelle angeht... das sollte ja nun das
geringste Problem sein, die Routine, die ein Byte aus dem internen
EEPROM liest, durch eine zu ersetzen, die einen externen 64kx8 I²C-
oder SPI-EEPROM bedient, oder gar eine SD-Karte.

Also auch von meiner Seite aus: Respekt für so ein Projekt!

Mark

Autor: JAVA-FAN (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... TJA das wollte ich auch schon mal versuchen, habe dies aber nach
meinen Anfragen in diversen Foren als hoffnungslos aufgegeben.

Deshalb Respekt!

Achim

PS.: Hat damit schon jemand gespielt?

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die letzten paar Abende daran gearbeitet, das ganze in ein
benutzbares tar-Archiv zu packen. Im Prinzip müsste alles auch unter
Windows nutzbar sein (WinAVR und Java gibts dort ja auch), aber sicher
wird man ein wenig an den Makefiles drehen müssen. Ein oder zwei Abende
brauche ich wohl noch.

Aber in den nächsten Tagen werden ich alles unter GPL rauslegen, auch
die Quellen der eigentlichen VM, so dass Erweiterungen Tür und Tor
geöffnet ist. Bin mal gespannt, was draus wird :-)

Zur Zeit läuft die VM auf dem Asuro, auf einem einfachn
Atmega8-Testboad mit zwei LEDs und nativ unter Linux (prima zum
Debuggen).

Und ja, der Zugriff auf das EEPROM ist einigermassen zentral gekapselt,
es sollte sehr simpel sein, da was anderes anzusteuern, wie zum Beispiel
das Flash. Wenn man im Asuro den Mega168 nehmen würde hätte man dann 8K
fürs Java-Programm, zur Zeit mache ich das ja nur deshalb nicht, weil
im Flash nur noch sehr wenig Platz ist. Aber ein externes I2C-EEPROM
geht z.B. genauso gut. Die Ansteuerung muss halt einfach genug sein,
dass man das noch in die 8k des Mega8 bekommt.

Till

Autor: Andreas Kielkopf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also eigentlich hab ich ja nur nach Infos über Eclipse und ATMEGA16
gesucht, aber als Java-Fan bin ich fast sprachlos.

-
-
- !!!

Ausserdem bin ich natürlich sehr gespannt, ob das auch auf dem ATmega16
läuft. 8k Bytecode sollten dann einiges an Java-Code erlauben.

Weiterhin viel Erfolg
wünscht
Andreas

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte problemlos auf dem Mega16 laufen. Die ersten Tests habe ich
damals mit dem Mega128 gemacht. Es erfordert aber ein wenig
AVR-Know-How, Routinen zu schreiben, die den Code aus dem Flash holen
(ok, das ist noch kein Kunststück), vor allem aber Routinen, mit denen
man neuen Code beim Upload im Flash ablegen kann.

Ich bin gerne bereit, dabei zu assistieren.

Till

Autor: xeus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, respekt echt klasse.

wird da vielleicht auch in kleines tut folgen?

weiter so!!!

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein Tutorial meinst Du? Wie man das Ding benutzt oder wie man es
erweitert? Allgemein auf AVR oder z.B. Asuro-spezifisch?

Ein paar Pläne in die Richtung habe ich, ich weiss aber noch nicht, ob
das eher ein Buch zu Asuro wird oder ein allgemeines PDF oder was auch
immer.

Till

Autor: xeus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten eins über AVR und JAVA, schön strukturiert und mit beispielen
und praktischen anwendungen. Ich würds allgemein halten, basiere es
halt auf einem einfachen m16 evolution board. Am besten als frei
verfügbare PDF :)

echt stark!!!

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, da ich garkein Mega16-Board habe steht das nicht direkt ins Haus.
Bisher habe ich es nur auf dem Mega8 gemacht und das Flash als
Code-Speicher zu benutzen ist wie gesagt, nicht ganz trivial.

Kann gut sein, dass ich das mal mache, aber da erhoffe ich mir auch ein
wenig Mitarbeit anderer Anwender. Aber wer mir einen Mega168 für meinen
Asuro schickt erhöht die Wahrscheinlichkeit für passenden
Flash-Routinen (die dann sehr wahrscheinlich auch auf dem Mega16
laufen) ganz ungemein.

Till

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schreib doch ein wikiartikel dann kan jeder mitschreiben.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine echt gute Idee. Hast Du zufällig eine Idee, welches (ggf.
Englischsprachige, man will ja nicht alles doppelt machen) Wiki dafür
geeignet wäre?

Till

Autor: Fabian Thiele (ape)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-) Das habe ich erwartet. Die Anfragen zu der NanoVM kommen zu mehr als
der Hälfte aus nicht-deutschem Raum. Darf ich hier im Wiki daher eine
snglische Seite aufmachen?

Till

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikibooks.org/wiki/Hauptseite

gibt's natürlich auch auf english

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Till
Ich kann dir auch gerne auf meinem Webspace eine Subdomain
(javaavr.matwei.de?) einrichten und ein Doku-Wiki draufwerfen. Ich hab
für Java auf dem AVR zwar keinen Einsatzzweck aber find das irgendwie
witzig und würde das Projekt damit unterstützen.

Matthias

Autor: Mark Struberg (struberg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gratulation Till! Das Teil ist sehr sehr nett!

Allerdings ist der AVR ein wenig klein, aber da der Code relativ sauber
ist könnte man das ja auch auf einen ARM portieren, oder?

Stellt euch einmal einen LPC2103 (oder 2106) mit einem LAN-Chip und
einem MMC- oder SD- Karten Anschluß vor!
Die JavaVM ist im µC-Flash, die Java classes und Daten, logs, etc
könnten auf der Speicherkarte liegen und bei Bedarf ins RAM gelesen
werden.

Die Anwendungsmöglichkeit reichen von Haustechnik über Internet,
Kamerasteuerung, Überwachungstechnik bis hin zu professioneller
Automation.


just an idea...

Autor: D. H. (slyd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jup das fände ich auch mal gut. Da ich ja ohnehin sehr gerne mit Java
Programmiere, würde mir das sehr gefallen. Und sowas wie der aJile auf
ner JStamp ist doch sehr sehr teuer und hier in DE sowieso kaum zu
beschaffen.

Also ne JVM auf nem kleinen ARM wie eben diesen neuen LPC's von
Philips (63MIPS, 32K Flash und 8K RAM und kostet fast nix... s.
http://www.mikrocontroller.net/forum/read-1-238583.html )
... das wär schon was feines.


Ein Hausbus Projekt wäre ja gleich ne nette Anwendung dafür g ;)

http://www.mikrocontroller.net/forum/list-11-1.html



Mal schaun - aktuell hab ich leider keine Zeit das Projekt zu
unterstützen aber in ein paar wochen...

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der Code ist sicher recht portabel, immerhin läuft er auch auf
Linux-PCs. Unterstützung von anderen Prozessoren selbst zu machen plane
ich erstmal nicht. Der nächste Schritt ist die Dokumentation und ein
paar weitere native Klassen für den AVR. Die nativen Klassen sind die
eigentliche Schnittstelle zur Onboard-Peripherie und für den
allgemeinen AVR (also die nicht-Asuro-Lösung) gibt es bisher nur eine
Port- und Timerklasse, damit ist nicht viel mehr machbar als eine
Modellbahnampel oder so ...

Till

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn schon ein kleiner ARM, dann die neuen Atmel AT91SAM7X mit
Ethernet und CAN...

Autor: D. H. (slyd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja gut nen AT91SAM7X ist natürlich auch was feines.

Weisst Du zufällig wie teuer die AT91SAM7X so sein werden? Also sicher
nicht so billig wie die Philips... (~2US$ @10K)

Das wäre z.B. bei sowas wie Heim Automatisierung wichtig, denn da
braucht man nicht nur einen, sondern locker mal 25 Stück oder mehr.

----------------------------------------------
Aber es sind ja alles ARM Controller - da sollte es doch ziemlich
einfach sein die JVM auf diverse Controller Varianten von verschiedenen
Herstellern zu portieren? (eigentlich muss man ja nur nen paar Adressen
vom RAM/ROM und der Peripherie anpassen)

Die Befehlssätze sind doch soweit ich das gesehen hab bei allen ARM7
identisch, oder nicht? (Habe selbst noch nichts mit ARM entwickelt,
will das demnächst aber mal antesten)

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als ich von der VM gehört hab, war ich hin und weg ;)
Vor allem, weil ich selber Linux User bin und ausnahmsweise mal nichts
anpassen muss bei so Sachen, da sie ja oft für Windows sind.

Nur bekomm ich das Tool nicht zum kompilieren, geschweige denn zum
laufen. Ich bekomm immer diese 8 Fehler:

NanoVMTool.java:36: cannot resolve symbol
symbol  : variable Version
location: class NanoVMTool
    System.out.println("NanoVMTool " + Version.version +
                                       ^
NanoVMTool.java:66: cannot resolve symbol
symbol  : variable Config
location: class NanoVMTool
    Config.load(args[curArg]);
    ^
NanoVMTool.java:70: cannot resolve symbol
symbol  : variable Config
location: class NanoVMTool
      Config.overwriteFileName(outputFileName);
      ^
NanoVMTool.java:72: cannot resolve symbol
symbol  : method setClassPath (java.lang.String)
location: class java.lang.ClassLoader
    ClassLoader.setClassPath(args[curArg+1]);
               ^
NanoVMTool.java:73: cannot resolve symbol
symbol  : method load (java.lang.String)
location: class java.lang.ClassLoader
    ClassLoader.load(args[curArg+2]);
               ^
NanoVMTool.java:76: cannot resolve symbol
symbol  : method totalClasses ()
location: class java.lang.ClassLoader
                       ClassLoader.totalClasses() + " classes");
                                  ^
NanoVMTool.java:79: cannot resolve symbol
symbol  : class UVMWriter
location: class NanoVMTool
    UVMWriter writer = new UVMWriter(writeHeader);
    ^
NanoVMTool.java:79: cannot resolve symbol
symbol  : class UVMWriter
location: class NanoVMTool
    UVMWriter writer = new UVMWriter(writeHeader);
                           ^
8 errors
make: *** [NanoVMTool.class] Error 1


Vielleicht kann mir jemand helfen.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas:

Also zum einen ist im Archiv schon ein fertiges JAR in
tool/NanoVMTool.jar, Du musst es also nicht unbedingt selbst neu
übersetzen.

Aber natürlich solltest Du es auch übersetzen können. Dazu sollte es
eigentlich reichen, nach nanovm/tool/src zu wechseln und dort make
einzugeben. Wenn das nicht klappt, dann frage bitte nochmal und
schreibe, wie Du genau die Übersetzung startest, welche Linux-Distro
mit welchem JDK Du benutzt (das sagt Dir java -version) und was sonst
noch wichtig sein könnte.

Till

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann das jar auch nicht ausführen. Da bekomm ich immer ne Exception:
"Exception in thread "main" java.lang.NoClassDefFoundError:
NanoVMTool/jar"
Deswegen hab ich es ja versucht das ganze mit make zu kompilieren. Das
Makefile schriebt auch die Version in die Datei Version.java, nur der
javac bringt dann diese 8 Fehler.
Meine Distri ist Gentoo mit nem Runtime Environment in der Version
1.4.2_09

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine englische Seite kannst du hier im Wiki natürlich gerne anlegen.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass Du nur ein JRE verwendest kann nicht ganz stimmen, denn bei Dir
läuft der javac ja wirklich los und versucht etwas zu übersetzen. Der
javac ist aber kein Teil der jre (re steht ja für runtime environment).
Der javac-Compiler ist üblicherweise Teil des kompletten JDK.

Bitte schreib etwas detaillierter, was Du genau versuchst. Es klingt,
als würdest Du das JAR-File mit "java NanoVMTool.jar" zu starten
versuchen. Das kann so nicht klappen, JAR-Files startet man mit "java
-jar NanoVMTool.jar".

Die Fehler, die Du beim Übersetzen hast kann ich mir gerade nicht
erklären, ich bin aber tatsächlich kein Java-Profi (ehrlich, ich weiss
mehr über die Java-Virtual-Maschine, als über die Sprache Java). Ggf.
kann jemand anderes hier auselfen.

Und wegen des Wikis: Ich habe ein neues Projekt NanoVM gestartet. Wäre
prima, wenn ihr da jeweils mitarbeitet, wenn ihr zum Beispiel Probleme
habt und dann deren Lösung findet und dokumentiert:
http://www.mikrocontroller.net/articles/NanoVM

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.: Hab gerde gemerkt, dass das NanoVMTool eine Exception wirft, wenn
man es ganz ohne Parameter startet. Wenn Du die "usage"-Zeile sehen
willst, dann starte es mit irgendeinem Quatsch-Parameter, z.B. java
-jar NanoVMTool.jar nase

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich es mit Paramter starte läufts.
Ja... Das JDK hab ich auch installiert. Bin grad neu in Java, weil wir
das in der Schule lernen. Alles andere kann ich aber kompilieren.

Hab bisher nur mit PHP oder C# gebastelt und das ist von Grund auf
verschieden in der Handhabung (vor allem C# (oder gleich .NET) und
Java).

Autor: ejd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Fall mit keinen Parametern kann in der Methode main so abgefangen
werden:
public static void main(String[] args)
{
        if(args.length == 0)
        {
                // hier die Ausgabe des Hilfetexts
        }
}

mfG,
ejd

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja, danke, hatte ich inzwischen gefixt. Allerdings ist eine seperate
Abfrage ja etwas unschön ... wenn schon die NanoVM kein unnötiges Byte
enthalten darf, dann verschwende ich im Tool natürlich auch keinen
Code. Daher ist der tatsächliche Patch noch etwas einfacher, als Dein
Tipp. Aber trotzdem danke!

Das ist aber noch nicht auf der Webseite. Den Fehler halte ich für so
minimal, dass ich das nicht sofort hochlade.

Till

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nachdem das thematisch dazupasst. Die Firma domologic hat auch so eine
java-basierte GUI. Unter

http://www.jcontrol.org/

Zu kaufen gibt's die auch über ELV, da ists billiger als beim
Hersteller :)

Ich finde aber den OpenSource Ansatz ganz toll. Brint alle vorteile
mit, man ist vorallem nicht an eine HW gebunden. Wirklich genial!

Mario

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was die so "klein" nennen. Dieses JControl fällt unter die gleiche
Kathegorie wie viele andere "kleine" Java-Lösungen und benötigt
durchaus einiges an Speicher und Rechenleistung. Selbst Geräte mit dem
tausenfachen des Atmega8 (also mit 8MB Flash und 512kB RAM) fallen ja
noch unter "klein", wenn man sie mit einem PC vergleicht.

Die NanoVM läuft auf einem Prozessor, den man für Euro 2.50 bei jedem
Elektronikhändler kaufen kann. Das war mein Ziel. Mit den doch deutlich
größeren und teureren kommerziellen Lösungen wollte ich nie
konkurrieren. Aber in Kombination wird's vielleicht spassig: Die
NanoVM als billiger Sensorknoten und die JControl-Dinger als
Bediengerät, oder so.

Till

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe das Wiki nun schon mit einigem an Beschreibung gefüllt. Einige
der schon hier diskutierten Fragen, wie zum Beispiel "kann ich auch ein
externes EEPROM nehmen?" und die Sache mit der Integration eigener
nativer Klassen werden dort erklärt.

Ein Kapitel zur praktischen Verwendung am Beispiel des Asuro werde ich
auch noch machen.

Das Wiki: http://www.mikrocontroller.net/articles/NanoVM

Till

Autor: Blackdown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bekomme beim compilieren von NanoVMTool auch die folgenden fehler:
NanoVMTool.java:36: cannot resolve symbol
symbol  : variable Version
location: class NanoVMTool
    System.out.println("NanoVMTool " + Version.version +
                                       ^
NanoVMTool.java:66: cannot resolve symbol
symbol  : variable Config
location: class NanoVMTool
    Config.load(args[curArg]);
    ^
NanoVMTool.java:70: cannot resolve symbol
symbol  : variable Config
location: class NanoVMTool
      Config.overwriteFileName(outputFileName);
      ^
NanoVMTool.java:72: cannot resolve symbol
symbol  : method setClassPath (java.lang.String)
location: class java.lang.ClassLoader
    ClassLoader.setClassPath(args[curArg+1]);
               ^
NanoVMTool.java:73: cannot resolve symbol
symbol  : method load (java.lang.String)
location: class java.lang.ClassLoader
    ClassLoader.load(args[curArg+2]);
               ^
NanoVMTool.java:76: cannot resolve symbol
symbol  : method totalClasses ()
location: class java.lang.ClassLoader
                       ClassLoader.totalClasses() + " classes");
                                  ^
NanoVMTool.java:79: cannot resolve symbol
symbol  : class UVMWriter
location: class NanoVMTool
    UVMWriter writer = new UVMWriter(writeHeader);
    ^
NanoVMTool.java:79: cannot resolve symbol
symbol  : class UVMWriter
location: class NanoVMTool
    UVMWriter writer = new UVMWriter(writeHeader);
                           ^
8 errors
make: *** [NanoVMTool.class] Error 1

Liegt das vielleicht daran, dass ich nicht die Original Sun JDK sondern
die Blackdown JDK verwende?

Autor: Blackdown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn der bootloader ersetzt wird, kann ich den avr dann eigendlich noch
normal über isp flaschen oder muss ich dann immer über seriell gehen?

Autor: Christian Zietz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solange man es nicht über entsprechende Fuses abschaltet, funktioniert
ISP immer. Das ist unabhängig vom Bootloader.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Blackdown:

Keine Ahnung. Aus irgendeinem Grund funktioniert bei Euch das
Übersetzen der abhängigen Klassen nicht. Kannst Du mal versuchen, z.B.
Version.java seperat zu übersetzen? Also z.B. einfach javac
Version.java einzugeben. Danach wieder versuchen, das ganze Projekt zu
übersetzen und schauen, ob der erste Fehler (der sich eben auf die
Version-Klasse bezieht) immernoch auftritt? Kann Blackdown nicht
automatisch abhängige Klassen mitübersetzen? Ich bin in der Tat kein
Java-Profi, sondern eher der C-Guru.

Und wegen des Bootloaders: Ich ersetze den Asuro Bootloader, der ist
das speziell für den Asuro vom Asuro-Hersteller in den Mega8
programmiert worden. Meine NanoVM (und deren Bootloader) werden per ISP
wie jedes andere Programm auch installiert und ersetzen dabei jedes
bereits installierte Programm, was im Falle des Asuro eben dess
Bootloader ist.

Autor: Blackdown (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Keine Ahnung. Aus irgendeinem Grund funktioniert bei Euch das
> Übersetzen der abhängigen Klassen nicht. Kannst Du mal versuchen,
> z.B. Version.java seperat zu übersetzen? Also z.B. einfach javac
> Version.java einzugeben. Danach wieder versuchen, das ganze Projekt
> zu übersetzen und schauen, ob der erste Fehler (der sich eben auf
> die Version-Klasse bezieht) immernoch auftritt?

Das funktionierte leider nicht, aber ich habe eine andere Möglichkeit
gefunden:

~/nanovm/tool/src$ ls ..
NanoVMTool.jar  config  readme.txt  src
~/nanovm/tool/src$ rm ../NanoVMTool.jar
~/nanovm/tool/src$ ls ..
config  readme.txt  src
~/nanovm/tool/src$ javac *.class
~/nanovm/tool/src$ make
jar cmf NanoVMTool.mf ../NanoVMTool.jar *.class
~/nanovm/tool/src$ ls ..
NanoVMTool.jar  config  readme.txt  src
~/nanovm/tool/src$

> Kann Blackdown nicht automatisch abhängige Klassen mitübersetzen?
> Ich bin in der Tat kein Java-Profi, sondern eher der C-Guru.

Ich hab keine Ahnung. Ich würde auch lieber Suns JDK nehmen, aber es
gibt davon keine 64Bit-Version.

> Und wegen des Bootloaders: Ich ersetze den Asuro Bootloader, der ist
> das speziell für den Asuro vom Asuro-Hersteller in den Mega8
> programmiert worden. Meine NanoVM (und deren Bootloader) werden per
> ISP wie jedes andere Programm auch installiert und ersetzen dabei
> jedes bereits installierte Programm, was im Falle des Asuro eben
> dess Bootloader ist.

Achso. Gut.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ~/nanovm/tool/src$ javac *.class

Was kommt denn dabei raus? Du sagst dem Compiler im Klartext
"übersetze die Dateien, die schon da sind". Das macht m.E. garkeinen
Sinn. Der javac erwartet *.java-Dateien als Eingabe, keine Classfiles,
wie Du sie angibst. Zumindest der Sun-javac mag das auch garnicht:

> javac *.class
javac: invalid flag: AccessFlags.class
Usage: javac <options> <source files>
...

Wenn Du die vorhandenen Classfiles (also Version.class etc) da lässt,
dann übersetzt Du nichts neu, sondern baust nur daraus das JAR-File
zusammen.

Erst wenn Du das JAR-File sowie alle *.class-Dateien vorher löscht und
dann irgendwie wieder zu einem funktionierenden JAR-File kommst hast Du
wirklich das NanoVMTool neu erstellt. Wenn Du das mit der Blackdown
hinbekommst würde ich das gerne ins Makefile übernehmen.

Ciao,
  Till

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@@Dominik S. Herwald (SlyD)

Der AT91SAM7X kostet bei 1000Stück abnahme um die 6€ Netto. Man muß
aber noch dazu Rechnen das man ein PHY Ethernet Chip benötigt die sind
auch nicht ganz Preiswert. Trozdem Denke ich kann man auf ca. 30€
kosten kommen für ein Embedded System ...

Gruss Sven

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich wollte mir das grad mal näher anschauen, aber die Links zu den
Softwarepaketen auf der Seite gehen nicht. Wo finde ich denn die
Dateien?

Gruß
Markus

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal ne Frage zur weiternetwicklung der VM!

ANgenommen ich wollte eine Lib für einen GLCD Controller schreiben (in
meinem Fall der Toshiba T6A39). Wo pack ich die am besten hin? Schreib
ich mir ne Java Klasse und füg die meinem Programm hinzu?
Oder schreib ich ne Java Klasse und füg sie der VM hinzu?
Und was is mit C Code? Brauch ich den auch noch, wenn ich der VM selber
was gutes tun will?

Andreas Galauner

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würd sagen schreib die Routinen am besten native in ASM oder C,
nicht in Java. Das macht das ganze kompakter und schneller.

Aber wo finde ich jetzt die Sourcepakete? Die Links auf der Seite
funktionieren nicht

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"The download is currently disabled due to licensing issues. The
download will hopefully be available again soon. Stay tuned!"

Autor: Andreas G. (andy1988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Öh?
Sag blos Sun macht Stress bei deiner VM?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das steht seit gestern oder vorgestern da. Hoffentlich renkt sich
das wieder ein. Das Teil könnte nämlich interessant sein. Die einzige
Alternative die ich noch kenne wäre PyMite, und das kriegt man in
keinen Mega8

Autor: Mein Name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Till Harbaum(till@harbaum.org):
Guckst du hier:
http://www.mikrocontroller.net/articles/NanoVM#NanoVMTool
Er hat sich in seinem Beitrag wohl nur verschrieben...

Autor: dschafa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das eigendich noch weiterentwickelt?
Schön wär:
- Unterstützung für andere AVRs neben ATmega8.
- Unterstützung für Java-Bytecode im Flash.
- Konfigurierbarkeit ob Asuro mit eincompiliert wird.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab gestern mal versucht die VM auf nem Mega16 zum laufen zu
bringen. Scheint an sich auch geklappt zu haben, nur bin ich nachher
komplett durcheinander gekommen, weil ich wieder ca. 10 Konsole offen
hatte ^^

Sowas, wie ne GUI für das NanoVM Tool wär nicht schlecht, Evtl. kann
ich da ja mal was basteln, wenn ich das mit dme Swing endlich mal
gebacken bekomme. Bis wir das inner Schule machen dauerts leider noch n
bischen...

PS:
Ich hab mein Passwort vergessen, weil man das hier nich ändern kan...
Zumindest hab ich da nix zu gefunden. An wen soll ich mich da wenden?
"Passwort vergessen"-Funktion gibts hier anscheinend auch nich...

Autor: dschafa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was ist mit "Java-Bytecode im Flash"? Hat das schon mal jemand
versucht und kann eine modifizierte Version hochladen?

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

solange die rechtliche Sache nicht geklärt ist wäre es nett, wenn
niemand irgendeine modifizierte Version hochlädt. Im  Zweifelsfall kann
sowas den Plan die Sache wieder Online zu bekommen sogar scheitern
lassen.

Die Sache dürfte sich innerhalb der nächsten drei bis vier Wochen
hoffentlich zu unseren Gunsten geregelt haben.

Till

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Woran liegt es denn genau, kannst du ein paar mehr Details posten ?
Hat sich sun beschwert deswegen ?
Interessiert mich mal ;)

Btw das Projekt finde ich super! Respekt ;)

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

nein, nicht Sun, sondern mein bisheriger Arbeitgeber. Details möchte
ich im Moment lieber nicht posten.

Sorry,
  Till

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ok alles klar!
Dachte die sun leute haetten was dagegen gehabt ;)

Danke für die Info!

Autor: Bri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"It is not a full Java VM, since it does not support
exceptions, threads, floating point arithmetic and various other
things"

Ich hätte da mal eine Frage. Was bleibt von Java übrig, wenn man
exceptions, threads, floating point arithmetic und andere Dinge
weglässt? C oder Basic mit anderer Syntax? Was ist der Vorteil von
diesem kastrierten Java gegenüber C?

Autor: Andreas G. (andy1988)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach portierbarer Code...

Von einem Mikrocontroller auf den anderen.
Aber ob das sein muss weiß ich auch nicht. Weil man ja eigentlich immer
bei einem Controller bleibt bei einem Projekt.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich hätte da mal eine Frage. Was bleibt von Java übrig, wenn man
> exceptions, threads, floating point arithmetic und andere Dinge
> weglässt? C oder Basic mit anderer Syntax?
Es bleibt ein kleines Java. Die Vorteile gegenüber üblichen C-Compilern
sind u.a.:

- viele Leute kennen/können eben Java und müssten C erst lernen
- Speichermanagement
- gleicher Code/gleicher Compiler (kein spezieller Cross-Compiler)
- Abstahierung der Hardware durch native Klassen (geht in C durch die
Verwednung von Bibliotheken, aber die sind bei C eben doch Teil des
Zielprogrammes und der Anwender muss sich um sie küßmmern)

Ja, natürlich ist "richtiges Java" eben auch Exceptions usw., aber
dafür reicht es im Mega8 eben nicht.

Till

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für mich wären deine "vorteile" eher nachteile :/

Autor: Bri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es wirklich schon mehr Java als C/C++ Programmierer? Wenn ich mir
die newsgroups anschaue, dann hab ich eher das Gefühl, das die meisten
erst Java lernen müssten und nicht umgekehrt. Ich habe mir die JavaVM
für den AVR noch nicht angeschaut. Ich nehme mal an, dass es wie das
"richtige" Java einen garbage collector hat. Ist das nicht auch ein
Problem, wenn dieser bei der Abarbeitung des Programms einfach mal
losläuft? Ich mein, dadurch kann ich doch bei der Ausführung keine
definierten Zeiten garantieren. Oder muss man den garbage collector
explizit aufrufen?

Autor: Markus K. (markus-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Till:
In welcher Sprache werden denn die native Klassen geschrieben?
Und worin liegt dabei der Vorteil gegenüber C? In C binde ich das zum
Mikrocontroller gehörende Headerfile ein, in Java das passende
Classfile. In beiden Fällen muß ich also irgendwo die CPU angeben.

Markus

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

es ist evtl. für jemanden der vom PC und Java kommt einfacher auf einem
µC auch Java einzusetzen. An das Einhalten irgendwelcher Zeiten die
kleiner als 1ms sind möchte ich garnicht denken. Für einen Einsteiger
schön, in dieser Kategorie an Systemleistung aber nichts für
ernsthaften Einsatz.

Deshalb:
Jede Sprache für ihren Zweck. Java macht IMHO nur da Sinn wo es auf
einen ordentlichen JIT-Compiler zurückgreifen kann. Denn Java als rein
interpretierter Bytecode ist sogar auf einem 3GHz Rechner langsam. Ich
erinnere mich mit Grauen an die erste Implementierung auf dem PC.

Matthias

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die nativen Methoden sind in C geschrieben, wie die ganze NanoVM selbst
auch.

Ich verstehe den Hintergrund der Diskussion nicht ganz. Mit der
Einführung von Java verschwindet C doch nicht. Wer in Java nur
Nachteile hat soll natürlich weiter C programmieren, davon hält ihn
doch garkeiner ab, das mache ich selbst doch nicht anders, immerhin ist
die NanoVM in C geschrieben. Es geht doch nur um die Leute, die lieber
Java programmieren und es nun können.

Und so langsam gibt es sicher mehr Java- als C-Programmierer, frag'
doch einfach mal eine Gruppe Uni-Abgänger, was sie besser kennen und
lieber mögen. Spätestens einen Cross-C-Compiler wie WinAVR hat
praktisch niemand je verwendet. Und für Java braucht man eben keinen
neuen Compiler.

Und ja, die Garbage-Collection springt manchmal an und läuft dann eine
kaum vorherzusagende Zeit und ja, Java-Code läuft viel langsamer als C,
er wird ja durch ein C-Programm interpretiert. Aber für viele kleine
Asuro-Programme reicht es.

Die NanoVM ist einfach eine weitere Option und ihr Vorteil ist der,
dass sie nun existiert. Ihr habt nun einfach eine Wahl mehr, ob besser
oder schlechter als andere ist doch Eure Entscheidung. Ich verstehe
nicht so ganz, warum eine Java-Lösung erst dann Sinn machen soll, wenn
sie in allen Aspekten mit einer C-Lösung konkurrieren kann.

Ciao,
  Till

Autor: ejd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Till Harbaum:

Weil Perv... Perfektionisten? ;)

Nun ja, zurueck zum Thema: Ich versuche, NanoVM auf AVR Butterfly zu
portieren, d.h. AVR Mega169. Habe ich richtig verstanden, dass der
Bootloader ueberschrieben wird?

mfG,
ejd

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die JavaVM hat sogar Vorteile gegenüber Native Compilern. Die Programme
können theoretisch beliebig groß werden wenn man ein entsprechendes
Speichermedium verwendet und man könnte noch einen schönen Debugger
implementieren der es einem ermöglicht im System ohne teure Hardware zu
debuggen. Das das allerdings schwierig wird ist mir klar, aber es ist
möglich.

Ich denke es geht hier nicht um die Sprache selbst sondern das
Grundkonzept ist ein völlig anderes (Nativ Compiler gegen Bytecode
Interpreter)

Autor: ejd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Es gibt doch auch eine Moeglichkeit, den Garbage Collector nicht
einzusetzen. Ich brauche das nicht, aber jeder der es braucht kann es
ja
programmieren...

mfG,
ejd

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe keine Ahnung, welche Art Bootloader auf dem Butterdfly ist.
Aber ich programmiere den ganzen Chip neu, also wird ein ggf.
vorhandener Bootloader wohl überschrieben. Aber es hält Dich natürlich
nix davon ab, irgendwann den Originalbootloader zu installieren. Das
Problem beim Asuro ist da nur, dass man den nicht einzeln bekommt.

Und die Garbage-Collection springt nur dann an, wenn man häufig Objekte
erzeugt und zerstört. Das wiederrum geht aber ohne Garbage-Collection
auch nicht, sonst wären die 768-Bytes, die auf dem Mega8 frei sind ja
ratz-fatz voll, wenn man zum Beispiel mit Strings rummacht. Zum Bespiel
wird beim zusammenhängen zweier Strings per "+" ein neuer erzeugt und
die beiden alten freigegegen.

Till

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

unternimmt deine NanoVM eingentlich auch was gegen die Fragmentierung
des Speichers? Werden beim Lauf des GC die Objekte wieder ohne Lücken
im Speicher angeordnet?

Matthias

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Java mag als Sprache (!) ein paar Vorteile gegenueber C haben. Aber das
VM-Konzept ist fuer uCs nur eine Notloesung und bringt haufenweise
Nachteile, aber keinerlei Vorteile mit sich - wann muss man schonmal
kompilierte Module zwischen verschiedenen Controllern austauschen? Das
Argument mit den "beliebig grossen" Programmen zieht nicht, da ein
kleiner Controller mit externem Speicher in jedem Fall teurer ist als
ein Controller mit entsprechend grossem internen Speicher. Man muss
halt mal ueber den AVR-Tellerrand hinausschauen.

Eine Java-VM auf dem AVR ist zwar eine interessante Spielerei, aber ich
sehe ausser dem Nicht-Lernen-Wollen einer neuen Sprache oder eines neuen
Prozessors keinen Grund warum das jemand ernsthaft anwenden sollte.

Sinnvoller waere es m.E. andere, fuer Mikrocontroller geeignete
Sprachen zu unterstuetzen (z.B. Ada).

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

zur Garbage-Collection: Ja, die kompaktiert den Heap, danach steht also
der freie Speicher als ein kompletter freier Block zur Verfügung.

Wegen des VM-Konzeptes: Ich bin immer irritiert wenn Leute Dinge für
komplett sinnlos und unbrauchbar darstellen. Woher wisst ihr immer so
genau, was "eine Notlösung" ist und "keinerlei Vorteile" hat und
für was es "keinen Grund es ernsthaft anzuwenden" gibt. Wenn es
für_Dich keinen Anwendung hat, dann verwende es halt nicht, aber
Dinge pauschal als sinnlos darzustellen ist wenig produktiv.

Wegen des Speichers: Eine Java-Lösung für den AVR eignet sich zum
Beispiel ausgezeichnet, die Class-Files auf einer SD-Karte abzulegen,
diese per SPI an den AVR zu binden und dort mit nur wenig Speicher
einfach die Programme direkt von SD-Karte auszuführen. Und Du wirst
nicht ernsthaft behaupten wollen, dass ein Mikrocontroller mit der
gleichen Menge internem Speicher genauso billig ist wie eine SD-Karte,
oder? Ganz zu schweigen von der Tatsache, dass ich eine SD-Karte in
jedem Kartenleser mit einem neuen Class-File beschreiben kann.

Ja, es gibt größere Prozessoren als den AVR und ja, da kann man
wesentlich ausgefeiltere Java-Implementierungen drauf laufen lassen
(was ja auch passiert). So what? Das heisst doch nicht, dass man es
nicht auch auf dem kleinen AVR machen kann.

Ciao,
  Till

PS.: Mich interessiert Deine AVR-Ada-Lösung: Wo kann ich mir die
anschauen?

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das hier ist ein öffentliches Forum wo jeder seine Meinung kundtun
kann. Und ich bin eben der MEinung das eine VM auf einem AVR zwar eine
nette Spielerei (das soll nicht deine Leistung schmälern und ich werd
die VM bei Gelegenheit mal ausprobieren) ist aber für den ernsthaften
Einsatz eher nicht geeignet scheint. Wie lange würde denn deine VM
brauchen um eine 64MB SD-Card voll von Java Bytecode NOPs (oder ADD,
...) auszuführen?

Selbst einen Mega128 in C komplett mit Code zu befüllen ist schon eine
Herausforderung. Ein Projekt hier besteht z.B. aus etwa 3kLOC und passt
(wenn auch knapp) in einen Mega8515.

Matthias

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: ejd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Programm eignet sich für den ernsthaften Einsatz, bis man dieses
ernsthaft einsetzt...

mfG,
ejd

Autor: D. H. (slyd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das C-Control von Conrad findet ja auch "ernsthafte" Anwendung. Ist
auch ein Interpreter drauf.

Nicht das ich das C-Control toll finden würde - ist mir viel zu langsam
- und Basic - urgs  - aber es ist ein Beispiel für ein sehr
erfolgreiches Konzept...

Das ganze mit Java, viel schneller und sogar noch viel billiger
(Einzelpreis eines Mikrocontrollers) - super! Ist doch mal ne schöne
Alternative! Taugt zwar längst nicht für Anwendungen wo schnelle
Reaktionszeiten gefordert sind, aber für die meisten Hobby Anwender
dürfte die Geschwindigkeit voll ausreichend sein.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kann mich des Eindrucks nicht erwehren, dass nicht so ganz klar
ist, wozu die NanoVM da ist. Kleines Beispiel: Ein Mega8 kostet 2.60
Euro im Versand. Eine Modellbahnampelsteuerung aus diskreten Bauteilen
aufzubauen ist vielfach teurer und benötigt mehr Bauteile. Und wenn man
am Ende noch 'ne Fussgängerschaltung will kann man von vorne anfangen.
So, genau das kann auch ein Java-Laie eben mal in Java mit der NanoVM
machen. Ist ganz simpel.

Natürlich gibt es furchtbar viele und furchtbar komplexe Programme, die
man nur in C auf dem AVR unterbringt, aber die Welt eines
2.60-Euro-Chips besteht nicht nur aus solchen Mega-Projekten. Das ist
ja der Witz an so einem kleinen Chip: Man kann ihn für jedes
Kinkerlitzchen einsetzen und spart auch noch Geld. Dafür ist die NanoVM
gedacht: Für ganz keine einfache Dinge wie den Asuro oder eine einfache
Modellbahnsteuerung. Und wenn einer den Prozessor wechselt, dann muss
er sich eben nicht um den neuen Chip kümmern, die Hardwareabstraktion
macht die NanoVM und der User merkt z.B. garnicht, dass sein Code eben
noch auf einem Mega8 lief, jetzt aber auf einem PIC oder sonstwas, weil
es den eben gerade als Restposten billiger beim Reichelt gab.

Till

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Till,

ich finde dein Projekt sehr interessant.
Ich frage mich, warum du dir den Zwang eines ATmega8 antuest,
wenn man für wenige Euros mehr schon einen ATmega128 bekommt.
(aktueller Preis 7 Euro ab 1 Stück).

Martin

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Till,

wo bekomme ich den ATmega 128 für 7 EUR Brutto?

Grus Sven

Autor: JoeJoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich gebrauchte bei Ebay oder irgendwelchen Schwarzhändlern.
Selbst bei Großhändlern muß man mehr als 10 Stück abnehmen um auf etwas
7€ brutto zu kommen

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin er hat doch geschrieben das ers möglichst günstig haben will.
Und ich denke das es später dann ja auch verschiedene Portierungen
geben wird.

Allerdings fidne ich ist das ganze etwas widersprüchlich, einerseitz
sagst du das sei für Anfänger, andererseits sagst du das man damit mal
eben ne 128mb SD kart (samt Code!) ansprechen kann, glaub nicht das das
nen Anfänger machen wird :)

Ansosnten finde ich es schon fazinieren wo Java überall eingeszt wird
manche handys basieren ja teilweise schon komplett dadrauf.
Ich seler programiere auch in Java, aber ehrlichgesagt tipep ich meine
Miniprogramme doch lieber "mal schnell" in ASM, alelrdings wie schon
gesagt, C-Controll sit ja auch sehr beliebt, was dahinter steht
natürlich auch ne Marketingmaschiene aka Conrad ;)

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sven
ATmega128 für 6,99 Euro bei www.elektro-nix.de

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich frage mich, warum du dir den Zwang eines ATmega8 antuest,
Das ist einfach: Weil er im Asuro steckt

Der Mega128 ist zwar viermal so teuer, aber immernoch sehr günstig, das
stimmt. Aber für den Heim-Bastler ist der Mega8 auch rein mechanisch
einfacher zu verwenden. Und wenn man die NanoVM auf dem Mega128
verwendet lässt sich der gewonnene Platz ja auch sinnvoll nutzen:
- als Java-Codespeicher (anstelle des kleineren internen EEPROMs)
- für ganz viele native Methoden
- für Zusatzfunktionen (z.B. könnte man einen kleinen TCP-IP-Stack
  aufnehmen und per Standard-konformer Java-Methoden ansprechen)
- für Fließpunkt-Arithmetik
- für die Behandlung von Exceptions
- für die Behandlung von Threads

Klar, der Mega8 ist sehr kein und die NanoVM passt da nur knapp rein,
aber auch bei mehr Code-Speicher hat man so den Vorteil, noch schön
viel Platz für weiteren Spass zu haben.

> Allerdings fidne ich ist das ganze etwas widersprüchlich, einerseitz
> sagst du das sei für Anfänger, andererseits sagst du das man damit
mal
> eben ne 128mb SD kart (samt Code!) ansprechen kann, glaub nicht das
das
> nen Anfänger machen wird :)
Du musst bei diesem Projekt immer zwei Dinge trennen: Die Erweiterung
der NanoVM, was sicher keine Sache für Anfänger ist und deren
Benutzung. Derjenige, der die SD-Karte anbindet muss einiges an
Know-How besitzen, das stimmt. Aber am Ende kann es jeder benutzen, der
in der Lage ist, ein Class-File auf eine SD-Karte zu kopieren und in das
Zielgerät zu stecken. Das ist viel einfacher, als jede der üblichen
Arten, mit Mikrocontrollern zu arbeiten.

Ich sage ja garnicht, dass ich die eilegende Wollmilchsau erfunden
habe, aber man kann noch so viel mit der NanoVM machen.

Und zum Beispiel Assembler: Wenn man den AVR-Assembler irgendwann mal
gelernt hat eignet er sich sicher auch für schnelle, kleine Projekte,
das glaube ich gerne. Aber für ein kleines Projekt bringt sich das wohl
kaum einer bei, zumal er das wirklich für jeden neuen Prozessor (fast)
von Grund auf neu lernen muss.

Es ist eben immer der Trade-Off zwischen einfacher Programmierung und
der damit einhergehenden Einschränkung was Rechenleistung und
Speicherbedarf angeht. Assmebler steht da am einen Ende der Skala, die
NanoVM an am anderen und C irgendwo in der Mitte. Klar, in Assembler
kann ich alles machen, aber ich mache entsetzlich leicht Fehler und
selbst meine Beispiel-Ampelsteuerung wird ziemlich schwer lesbar. Das
entsprechende C-Programm dagegen ist kurz und das Java-Programm noch
kürzer.

Till

Autor: JoeJoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso ist eigentlich immer gleich von Mega128 und SD Karte die Rede??
Ein Mega32 wäre speichertechnisch doch schonmal ein gewaltiger Schritt
nach vorne und ein externes serielles SPI Eeprom gibts für 2-3€ und mit
mehr als genug Speicher für die meißten Programme. So ne SD Karte ist
aufwändiger von der Ansteuerung und schweine teuer wenn man nicht
zufällig eine von der Digicam übrig hat. Außerdem braucht man noch nen
teuren Steckadapter dafür und groß ist das ganze dann auch noch

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SD-Karten sind bequem, aber Du hast Recht erstmal ist die Verwendung
eines Mega32 einfacher.

Aber in der Tat haben viele Leute inzwischen SD-Karten der
16/32-MB-Klasse einfach ungenutzt rumliegen. Das ist bei mir der Fall,
weil ich die z.B. mal für den Palm verwendet habe, dort aber inzwischen
Karten bis 1GB drin nutze und diese kleinen Karten keinen sinnvollen
Zweck mehr erfüllen. Zweitens ist deren Ansteuerung garnicht sehr
schwer und selbst mit einem kleinen FAT-Dateisystem kein Kunststück.
Und schliesslich der teure Sockel: Für einfache Tests und
Heim-Basteleinen tuts recht zuverlässig ein Stück 2,54mm-Stiftleiste,
wo man die Stifte der einen Seite leicht S-förmig biegt. Das passt
ausgezeichnet auf eine SD-Karte, lässt sich leicht wechseln und gibt
recht sicheren Kontakt.

Aber das sind halt nur Ideen, wer lieber einen Mega32 nimmt soll sich
von solchen SD-Karten-Ideen auf keinen Fall irritieren lassen.

Till

Autor: JoeJoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versteh schon warum man auf die Idee mit den SD Karten kommt, aber
ich find's überflüssig. Die Lösung mit den Stiftleisten ist auch nicht
grad ideal, vor allem wenn man ständig die Karte abziehen muß um
Programme draufzuspielen. In der Entwicklungsphase will sicher keiner
dauernd die Karte rausziehen und in nen Kartenleser stecken. Das
erinnert dann doch zu stark an die Epromzeiten. Also ist ein Bootloader
eh sinnvoller.

Ich sehe keinen echten Vorteil von SD Karten, ausser das der eine oder
andere vielleicht ne alte irgendwo rumliegen hat. SPI Eeproms gibts von
Atmel bis 1MBit, das sind 128kByte. Wer die mit nem Java Programm
vollkriegt hat schon was geleistet, vor allem wenn man bedenkt das
speicherfressende Librarys wie Display oder von mir aus Fat16 oder ein
UDP Stack da nicht auch noch rein müssen sondern im Flasch vom µC
landen

Letztendlich bleibt es jedem selbst überlassen, aber bevor du deine
Probleme da nicht gelöst hast isses glaub ich eh müßig großartig
darüber zu diskutieren

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Letztendlich bleibt es jedem selbst überlassen, aber bevor du deine
> Probleme da nicht gelöst hast isses glaub ich eh müßig großartig
darüber zu diskutieren
Das stimmt allerdings.

Till

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles wieder online!!!

Hi alle,

die NanoVM ist wieder online und ein paar Verträge regeln, dass das
jetzt auch so bleibt. Es hat ein wenig länger als erwartet gedauert,
aber dafür ist die Sache jetzt ausgestanden.

Viel Spass,
  Till

Autor: sweet boy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jubel
freu
smile

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und als kleinen Bonus fürs lange Warten abe ich in der Zwischenzeit
etwas an den generischen Klassen gearbeitet. Die NanoVM eignet sich
damit inzwischen auch für andere Dinge als den Asuro. Inzwischen werden
RS232, IO-Ports, PWM, ein Timer und die AD-Wandler unterstützt. Damit
lässt sich schon einiges machen, von der Modellampelsteuerung bis zum
RS232-Thermometer. Für die meisten Funktionen liegen Beispiele bei.

Ausserdem ist nun ein Konfigurationsbeispiel für den Mega32 dabei und
durch direkten Vergleich der Mega8- und der Mega32-Konfig sollte es
leicht möglich sein, zu sehen, was man für so einen Fall öndern muss
und der Port auf weitere Chips sollte kein Hindernis sein.

Zusätzlich gibt es noch eine generische LCD-Klasse, mit der sich ein
per 8-Bit-Interface angeschlossenes Text-LCD bequem per Java ansprechen
lässt.

Das Wiki wurde auch erwas erweitert und dort gibt es u.a. zwei
Beispielschaltpläne, mit denen sich die NanoVM auf einem Mega8 und
einem Mega32+LCD testen lässt. Beide Schaltungen sind sehr einfach und
lassen sich in zwei Stunden auf einer Lochrasterplatine aufbauen.

Till

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Respekt! Geniale Sache ;)
Und noch dazu kostenlos erhältlich. Danke !

Autor: TillHarbaum-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Echt super geile Sache!

Aber warum hast du den LCD-Treiber im 8-Bit-Modus gemacht?
Der 4-Bit-Modus ist doch viel pinsparender ohne merklich langsamer zu
sein.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum vier Bit? Naja, ich hatte die Pins frei und wusste wie's geht. Es
ist aber überhaupt kein Problem, auch 4 Bit vorzusehen und dann in
native_io.c per #ifdef LCD_4BIT auch passenden 4-Bit-Code vorzusehen.
Das könnte man dann projektabhängig in der jeweiligen config.h
einschalten, dann könnte man je nach Lust und Laune für seine Hardware
eines von beidem nutzen.

Also wer mag kann das gerne nachrüsten ... ist sicher kaum Arbeit.

Till

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Autor: TillHarbaum-Fan

:-)

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inzwischen wurde das NanoVMTool, als das Tool, mit dem neue
Java-Programme auf das Ziel geladen werden von Suns javax.comm-API auf
GNU-rxtx umgestellt. Für den Anwender bedeutet das vor allem, dass das
NanoVMTool damit nun offiziell auf den drei grossen Plattformen
(Windows, Linux und MacOS) läuft.

Till

Autor: Wolfgang Both (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich es geschafft habe (Linux, STK200), mit der neuen Version
(1217) meinen Mega8 mit LedBlink zum arbeiten zu bringen, war ich
ziemlich zufrieden. Endlich Java auf dem AVR! Leider klappte es für den
Mega32 nicht mehr und nun ist auch der Mega8 nicht mehr richtig
"upload"bar.
Meldungen :
...
invoke ..
RXTX Warning: Removing stale lock file /var/lock/LCK..ttyS=
Found port /dev/ttyS0
Please reset ...
Received -8
Received -104
Received -0
Received -98

Habe ich wieder mal meine Einstellung zerschossen?
Ich bitte um Hilfe.
Wolfgang

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hmmm, irgendwie klappt die Kommuniktion per RS232 nicht. So aus dem
Stand kann ich leider auch nicht sagen, warum es nicht mehr klappt.
Aber das ist eine Stelle, an der auch gerade gebastelt wird, denn mit
dem Asuro scheint es wirklich oft Probleme zu geben. Mit einer direkten
RS232-Verbindung sollte e aber eigentlich keine Probleme geben.

Was bei Dir da passiert ist, dass der PC nicht die Bytes empfängt, die
er erwartet. Üblicherweise passiert das, wenn man nicht Reset am
Zielgerät drückt und das fröhlich irgendwelche anderen Daten auf der
RS232 ausgibt, über die sich das NanoVMToll dann wundert.

Andere mögliche Ursache: Du hast gleichzeitig ein Terminal auf der
seriellen Schnittstelle laufen. Das System, nach dem Linux die
empfangenen Bytes dann auf die beiden hörenden Anwendungen (also
NanoVMTool und Terminal) aufteilt habe ich nocht nicht durchschaut. In
der Konsequenz kommt aber bei beiden nur ein Bruchteil der Daten an,
womit dann keiner von beiden was anfangen kann.

Till

Autor: Adriaan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe ein AtMega 32 darauf geladen NanoVM.hex aus der avr_mega32_lcd
verzeichnis.
Wenn ich dass NanoVMTool start (unter Windows 2000) wird alles gut
duchlaufen.
Bis das runter laden anfangen mus dan bekomme ich volgendes:

Java lib Version = RXTX-2.1-7pre17
Found port COM1
Please reset/start target now.....
Received 0
Received 0
Received 0
Received 0
Received 0
Received 0
Received 0
Received 0

und so lauft das weiter.

Wass is hier loss mit der kommunikation??

Adriaan.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Adriaan:

Was das Tool Dir sagen will ist, dass es lauter Nullen empfängt statt
der Bytes, die es erwartet. Wann genau kommt denn diese Meldung? Sofort
oder erst nach dem Du am Controller Reset gedrückt hast? Wenn Sie sofort
kommen, kommen sie dann sogar, wenn der Controller garnicht an den PC
angeschlossen ist?

Und was für ein Programm befindet sich schon in der NanoVM? Mein
LCD-Test? Funktionieren des Testausgaben auf der RS232? Was für ein
Quarz ist angeschlossen? Bist Du sicher, dass die Baudraten stimmen?

Till

Autor: Adriaan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Till

Der nullen kommen sofort und auch wenn ich auf den Controller reset
gedrückt habe.
Der nullen kommen auch wenn der Controller garnicht an den PC
angeschlossen ist.

Ich habe NanoVM.hex in flash geladen und NanoVM_eeprom.hex im EEPROM
beide mit ISP dongle und Ponyprog.
Mein controller is ein ATMega32-16PI mit ein 16Mhz resonator.
Und habe nanovm-20051217.tgz build genutzt.

#
# Mega32.config
#

name Mega32-with-LCD
maxsize 1024

# info on target
target UART
filename COM1
speed 9600

Der rechner habe ich auf COM1 eingestelt 9600 Bits, 8 Databits,
pariteit Kein, Stopbits 1, Handshake Kein.

Habe shon kommuniciert mit ein eigenes program und der Hyperterminal
von Windows und das lauft gut.
Ich glaube der schaltung mit der MAX232 soll in ortnung sein.

Heute mittag gehe ich ein LCD display anbinden um zu sehen ob er was
text bringt.
Was fur demo funktionen hat das NanoVM_eeprom.hex program eigenlich auf
display und serieel port.

Danke fur deine hilfe Adriaan.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der nullen kommen sofort und auch wenn ich auf den Controller reset
gedrückt habe.
> Der nullen kommen auch wenn der Controller garnicht an den PC
angeschlossen ist.

Dann hat Dein Problem erstmal nichts mit dem aussen angeschlossenen
Gerät zu tun. Aus irgendeinem Grund klappt bei Dir der Zugriff auf die
serielle Schnittstelle von Java aus nicht richtig. Ist an den COM-Port
auch nicht zufällig irgendwas anderes angeschlossen? Wenn nichts
angeschlossen ist sollen logischerweise auch keine Bytes (auch keine
Nullbytes) empfangen werden.

Gibt es hier noch andere Windows-Nutzer mit dem gleichen Problem?

Till

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Compiler Version hast du? Bei einer ältere Version hatte ich in
einem anderen Projekt ein ähnliches Problem, das ich einfach durch ein
Update des Compilers auf einer Version > 3.4.0 beseitigt habe.

Gruss Sven

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich find das ganzte ein wenig undurchsichtig mit den ganzen
verschiedneen Versionen der NanoVM. Welche man für welchen Controller
nutzt, wie man Klassen nutzt usw.

Ne IDE wär nicht schlecht. Vieleicht mach ich mich mal ran und entwerf
was kleines. Erwartet euch aber nicht zu viel. Ich kann zwar schon n
paar Programmiersprachen, aber Java lern ich erst grade.
Mal sehen, was das gibt ;)

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das Problem mit den verschiedenen Versionen kann ich verstehen. Aber
leider geht es kaum anders, wenn man ein paar anwendungsspezifische
native Methoden haben will. Und erst die machen die Bedienung des Asuro
halbwegs bequem. Wenn Du irgendeinen Vorschlag hast, wie man das
vereinfachen kann oder besser verständlich machen kann nur raus damit!

Was für eine GUI stellst Du Dir denn vor? Eine Art grafisches
Upload-Tool, wo man bequem das Zieltarget aussuchen kann? Leider kann
man die Kommunikationsparameter nicht erraten oder von Target erfragen
(wenn man es fragen könnte wüsste man ja bereits, wie man mit ihm zu
reden hat). Sonst könnte man das automatisieren.

Was ich am schönsten fände wäre ein Plugin für Eclipse. Man schreibt
sein Java-Programm in Eclipse, klickt irgendwo im Menü auf "Upload to
NanoVM", kann dann bequem im Pulldown auswählen, was für ein Gerät man
angeschlossen hat und der Rest passiert von allein. Wäre ggf. eine nette
Java-Fingerübung ... hint, hint ...

Till

Autor: Adriaan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze WinAVR-20050214 und Java JDK 1.4.2
Habe mein AtMega32 beim ansluss von LCD beschadigt.
Warte auf ein neue MCU und versuche es dann weiter.

Bisher danke fur dein tips,

Grusse aus Holland.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. An so ein Plugin hab ich auch schon gedacht. Allerdings hab ich noch
nie ein Eclipse Plugin geschrieben, aber das lässt sich ja lernen.
Das liest dann aus, welche Configs vorhanden sind usw. und startet dann
dementsprechend den Compiler und das Tool.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich nutze WinAVR-20050214
Das könnte bald ein größeres Problem werden. Leider passiert beim
WinAVR recht wenig, so dass er inzwischen recht veraltet ist
(gcc-3.4.3, aktuell ist 4.0.2; avr-libc-1.2.3, aktuell ist
avr-libc-1.4.1, ...). Das könnte bald dazu führen, dass sich die NanoVM
nicht mit mehr WinAVR übersetzen lässt, zumindest verwenden die
aktuellen Entwickler aktuelle Tools und Rückwärtskompatibilität zu
erhalten ist nicht sehr schön, weil sich doch einiges aus triftigem
Grund geändert hat.

Wie hast Du den Mega32 mit dem LCD zerstört? So einfach gehen die nicht
kaputt ...

Till

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher mit 3.4.3?

das kommt bei mir:
<username>@<host> ~ > avr-gcc --version
avr-gcc (GCC) 3.4.4
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

<username>@<host> ~ >

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ok, die Versionen hatte ich aus einem anderen Posting. Der Compiler ist
m.E. weniger das Problem, das wird erst dann wirklich zu einem Problem,
wenn z.B. der Mega8-Code so gross wird, dass er nur mit den
Optimierungen des gcc-4 in den Mega8 passt. Aber das ist noch nicht der
Fall.

Die avr-libc wird aber eher kritisch, das hat sich einiges geändert.
Ggf. lässt sich das mit ein paar ifdefs regeln. Z.B. soll man
inzwischen nur noch interrupt.h  einbinden, während man früher dafür
vor allem signal.h genommen hat.

Till

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt darüber stolpre ich immer mehr bei fremden Sourcen.

Gruss Sven

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der GCC 4 ist sowieso noch nicht die Regel. Bei meinem Gentoo Server mit
dem unstable Tree ist er glaub ich schon drauf. Auf meinem Laptop mit
dem Stable Tree hab ich noch den 3.4.4 oder 3.4.3.

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur zur Info! (fyi)
Außer du hast einen Mac da ist jetzt 4.0.1 Standard, aber nur wegen den
Universal Binarys.

Gruss Sven

Autor: Holger Mößinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

@Till Harbaum. Mal ein großes Lob. Die NanoVM ist wirklich eine klasse
Idee.

Ich versuche gerade das ganze auf einem Mega16 zum Laufen zu bringen.
Ich habe auch schon diverse Anpassungen vorgenommen. Aber irgendwie
läuft es noch nicht so ganz. Kompilieren geht, flashen auch, make
upload-... findet jedoch nichts, Also funktioniert die serielle
Kommunikation nicht. Hat jemand eine Idee, woran das liegen könnte.

Ich benutze ein stk500_v2 Board von Atmel. Im Moment mit internem
Oszillator bei 8MHz. Als Vorlage für den Mega16 habe ich den Mega32LCD
Zweig verwendet, da diese beiden bis auf die Speichergröße nahezu
gleich sind. Ich entwickle unter Debian sid. Java ist Version 1.4.2_10
von Sun mit rxtx.

Die kompletten Änderungen sind im Anhang eingearbeitet. Außerdem habe
ich uisp auf avrdude umgestellt, der funktioniert nämlich auch mit dem
stk500_V2. Siehe nanovm/vm/build/avr_mega16_lcd/. Vieleicht kann da ja
etwas von in die nächste Version einfließen. Eine Funktion zum Abfragen
von Analogpins fehlt auch noch. Hat das jemand schon geschrieben.

Holger

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht läuft das uart nun auf halber freq. (wegen 8 statt 16 Mhz)

Autor: Holger Mößinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für die schnelle Antwort

ja, daran liegt es unteranderem auch, wie ich jetzt herausgefunden
habe. Das ist aber ein eher kleines Problem. Mit einem externen 16 MHz
Quarz geht es nämlich auch nicht.

Irgendwie scheint das serielle Signal einem anderen Pin (PORTB1 und
PORTB3 statt PORTD1 und PORTD2) anzuliegen, als es müsste. Ist da etwa
doch ein PIN unterschied von Mega32 zu Mega16?

Ich werde mal weiter nach dem Fehler suchen. Wenn jemand aber schon
eine Lösung hat, wäre ich dankbar dafür. Ich habe nämlich noch nicht
ganz den überblick über die Innereien der VM. Irgendwo weiter oben
stand doch mal jemand, der das schon auf einem Mega16 laufen hatte.

Holger

Autor: Adriaan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit diese program auf ein Mega32 mit 4 zeilen LCD kommt zeile 4 nicht
auf der richtige platz auf display.

    // write something to the first line
    Lcd.gotoYX(0, 0);
    Lcd.print("Hallo NanoVM Java");

    Lcd.gotoYX(1, 0);
    Lcd.print("Zeile 2");


    Lcd.gotoYX(0, 20);
    Lcd.print("Zeile 3");


    Lcd.gotoYX(1, 20);
    Lcd.print("Zeile 4");

Autor: Mark Struberg (struberg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holger

Nur mal so aus dem Kopf (ohne in der Doku genau nachgelesen zu haben):

Haben Mega16 und Mega32 nicht andere Interrupt Vektoren?

Ev funzt es dewegen nicht?

nur so eine idee...

lg,
strub

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die Interrupt-Vektoren sollten automatisch korrigiert werden, wenn
er beim Übersetzen der NanoVM angibt, dass er einen Mega16 verwendet.
Einfach das Mega32-Binary auf den Mega16 zu laden wird nicht gehen,
aber ich glaube nicht, dass er das wirklich versucht.

Wenn man die NanoVM übersetzt kann man ein Java-Programm schon fest
einbinden, das ist dann sozusagen per default schon drin. Da kannst
Du zum Beispiel des LED-Blink mal reinmachen, dann sollte der
entsprechende Ausgang des AVR toggeln.

Ansonsten gibt es nicht viel zu beachten. Der Unterschied zwischen
Mega16 und Mega32 ist ja kaum größer als der zwischen Mega8 und Mega32,
von daher habe ich ja schon deutlich unterschiedliche Beispiel in meinem
Code.

Ich habe keinen Mega16 zum Testen, sonst würde ich den ja mal in mein
Mega32-Board stecken. Du kannst mir aber gerne einen schicken, den
probiere ich dann mal aus. Ich bin sicher, dass es kein grosses Problem
wird, den zum Laufen zu bringen.

Wegen des LCD-Problems: Was heisst "Zeile 4 ist nicht am richtigen
Platz"? Sind alle anderen Zeilen da, wo man sie erwartet? Wo taucht
denn der Text von Zeile 4 auf?

Till

Autor: Sebastian Rabenhorst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand hier jemals ein Java-Programm unter Windows auf einen Asuro
übertragen? Ich kann irgendwie den com-Port nicht richtig ansteuern.
Falls einer von euch eineAnleitung schciken könnte wär des echt
suppa!^^

Autor: Till Harbaum (harbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau ist denn Dein Problem? Es gibt ein paar Dinge, die man
beachten sollte. Dazu haben ich eben ein paar Zeilen auf
http://www.harbaum.org/till/nanovm geschrieben. Vielleicht hilft Dir
das ja.

Till

Autor: valtuntas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
i have got a print float number and string manipulation problem. if
java source contain this code

System.out.println("Fibonacci of "+i+" is "+fib(i));

it makes a string manipulaton errror

Error loading class: java.io.FileNotFoundException: Unable to find
class file java/lang/StringBuilder.class

and if source contain this
float f=(a*b)/(a+b);
System.out.println(f);

it makes printstream error

Error loading class: java.io.FileNotFoundException: Unable to find
class file java/io/PrintStream.class

how can i solve this problems.

thanks for all.

Autor: TecDroiD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier war doch mal angesprochen, dass man evtl. einen I²C-EEPROM als 
Programmspeicher der NanoVM nutzen kann.

Hat das mal wer für nen mega8/88 umgesetzt?

Man könnte dann evtl. sogar über eine Strategie nachdenken, nen 
multithreading einzubauen. Ein pausierender Thread müsste "nur" seine 
Daten auf den EEPROM schreiben.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

nicht dass ich wüsste. Die meisten User wenden die NanoVM an, aber 
erweitern sie nicht. Von daher spiegelt die Homepage wohl den atuellen 
Stand wieder.

Till

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Java4Life :).
Die VM muss ich mal die tage ausprobieren!
Endlich Java :D. Hajo ma gucken C kann ich ned so.. aber ne schöne Swing 
GUI für das NanoVMTool lässt sich einrichten :).

Gruß, Timo

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das wäre sehr cool. Das Projekt zieht gerade auf sourceforge.net um, 
damit die diversen Mitarbeiter direkt per CVS an den aktuellen Quellen 
arbeiten  könnnen. Erweiterungen wie so eine GUI können da dann auch 
gerne rein. Wer direkt CVS-Zugriff will kann sowas dann selbst machen. 
Wer sich das nicht zutraut schickt mir seine Erweiterungen und ich lege 
die dann direkt darauf ab. So haben auch die anderen Entwickler immer 
sofort solche Erweiterungen und müssen nicht erst auf eine komplett neue 
Release-Version warten.

Till

Autor: Mark Struberg (struberg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Till!

Ich hab mir die Sourcen noch nicht so genau angesehen, aber wenn du 
magst, dann kann ich das Projekt 'mavenisieren'.

Auch ein maven-nanovm-plugin sollte sich in absehbarer Zeit realisieren 
lassen.

http://maven.apache.org

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das klingt witzig. Was auch dringend mal passieren sollte wäre die 
Übersetzung des NanoVM-Wiki-Eintrags ins Englische. Das nehme ich mir 
immer wieder vor und komme dann nicht dazu. Also falls da jemand Spass 
dran hat ist das sehr willkommen.

Till

Autor: tugstugi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Am Wochenende habe ich ein Eclipse-Plugin für NanoVM gebastelt. Wenn 
jemand das benutzen will, habe ich es hier angehängt.

Installation:
Help -> Software Updates -> Find And Installation ... -> Search for new 
features to install -> New archived Site und die nanovm_plugin.zip Datei 
auswählen.

Benutzung:
1. NanoVM-Projekt erzeugen : File -> New -> Project -> NanoVM Project
2. Irgendeine Mainklasse erzeugen
3. Die Klasse hochladen: Run -> Run ... -> NanoVM

PS: Wenn jemand das Plugin weiter erweitern will, kann ich den 
Sourcekode des Plugins auch hochladen.

bye
tugstugi

Autor: tugstugi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Screenshot

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, das ist ja unglaublich cool!

Bitte publizier' das irgendwo auf einer Webseite oder so, damit ich 
drauf verweisen kann.

Danke,
  Till

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NanoVMTool V1.4 - (c) 2005 by Till Harbaum
Usage: NanoVMTool [options] config classpath class
Options:
    -c        write c header file
    -f name   force output file name


Ich seh nur das da in der Konsole, wenn ich auf "Run" klicke...
Projekt, Config und Main Class ist alles eingestellt im Menü "Run" -> 
"Run..."

Achja nochwas: Wo kann man den Com Port einstellen für das NanoVMTool?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: tugstugi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry anscheinend habe ich eine alte Version meines Plugins hochgeladen, 
das nicht richtig funktioniert. Heute abend werde ich die richtige 
Version hochladen.

bye
tuguldur

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lad die Datei am besten hier hoch und aktualisier den Link auf der 
Wiki-Seite:
http://www.mikrocontroller.net/articles/Spezial:Upload

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tugstugi wrote:
> Sorry anscheinend habe ich eine alte Version meines Plugins hochgeladen,
> das nicht richtig funktioniert.

Scheint doch, dass ich gestern abend die richtige Version hochgeladen 
habe.

@Andreas Galuaner
Welche Eclipse- und Javaversion benutzst du? Ich benutze Eclipse 3.2 und 
Java 1.5. Den Commport kannst du in der Configdatei einstellen.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eclipse 3.2.0
und Java 1.5.0_08

Eigentklich wie du. Keine Ahnung, warum es nicht funktioniert. Habs wie 
in deiner Anleitung gemacht.

Zum Com Port:
Da steht in der Config beim Port /dev/ttyS0. Ich bin aber jetzt grade 
unter Windows, da mein Linux hier auf dem Rechner (leider ^^) grade 
nicht so wirklich funktioniert. Was muss man unter Windows für COM1 
angeben?

Autor: com1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@andreas

Für COM1 muss COM1 stehen.

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Galauner wrote:
> NanoVMTool V1.4 - (c) 2005 by Till Harbaum
> Usage: NanoVMTool [options] config classpath class
> Options:
>     -c        write c header file
>     -f name   force output file name
>
>
> Ich seh nur das da in der Konsole, wenn ich auf "Run" klicke...
> Projekt, Config und Main Class ist alles eingestellt im Menü "Run" ->
> "Run..."
>
> Achja nochwas: Wo kann man den Com Port einstellen für das NanoVMTool?

Dann versuch mal mit Run As -> NanoVM. Dann werden die ausgewählte 
Klasse und die erste Configdatei als Launchkonfiguration genommen.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm bei Run As... hab ich gar kein NanoVM drin. Nur unter Run -> Run...

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Galauner wrote:
> Hmm bei Run As... hab ich gar kein NanoVM drin. Nur unter Run -> Run...

Zuerst musst du eine Mainklasse (im Package-Explorer oder im Editor) 
selektieren und dann Run As... aufrufen. Sonst erscheint da nix.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso.
Da tut sich bei mir aber leider auch nichts. Soll ich mein Projekt evtl. 
mal hochladen? Vielleicht ist da irgendwas schief.

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Galauner wrote:
> Achso.
> Da tut sich bei mir aber leider auch nichts. Soll ich mein Projekt evtl.
> mal hochladen? Vielleicht ist da irgendwas schief.

ok lade mal hoch.

Autor: Andreas Galauner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bitteschön

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Galauner wrote:
> Bitteschön

Hi, Das Problem war das Leerzeichen im Projektname. Nenne deinen Projekt 
so um, dass er kein Leerzeichen enthält. Dann sollte es funzen.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider nicht...
Ich hab sogar mal einen Pfad ohne Leerzeichen benutzt.

Kann man sich irgendwo die Befehlszeile anschauen, mit der das 
NanoVMTool aufgerufen wird?
Ich hab keine Ahnung mehr, woran das liegen kann.
Ansonsten lässt sich das Problem vielleicht mit dem Sourcecode lösen. 
Ich hab nur vorher noch nie ein Eclipse Plugin gesehen ;)

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Galauner wrote:
> Leider nicht...
> Ich hab sogar mal einen Pfad ohne Leerzeichen benutzt.
>
> Kann man sich irgendwo die Befehlszeile anschauen, mit der das
> NanoVMTool aufgerufen wird?
> Ich hab keine Ahnung mehr, woran das liegen kann.
> Ansonsten lässt sich das Problem vielleicht mit dem Sourcecode lösen.
> Ich hab nur vorher noch nie ein Eclipse Plugin gesehen ;)

Ich vermute mal, dass du ein Workspace benutzst, dessen Verzeichnisname 
ein Leerzeichen enthält.

Dann versuch mal diese Version.

PS: Ich kann keine Datei in Wiki hochladen. Da gibt es immer eine 
Fehlermeldung, dass meine Datei leer ist.

Autor: Andreas Galauner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der neuen Version scheint es zu funktionieren.
Ich hab leider jetzt keine Zeit um das ausgiebig zu testen, aber das 
NanoVMTool wird ausgeführt!

Danke!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, die Upload-Funktion im Wiki war kaputt. Ich hab sie repariert und 
die Datei hochgeladen.

Autor: Tuguldur E. (Firma: TU Berlin) (tugstugi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
valtuntas wrote:
> hi
> i have got a print float number and string manipulation problem. if
> java source contain this code
>
> System.out.println("Fibonacci of "+i+" is "+fib(i));
>
> it makes a string manipulaton errror
>
> Error loading class: java.io.FileNotFoundException: Unable to find
> class file java/lang/StringBuilder.class


Wenn man Java 1.5 und "+" Operationen für Strings benutzt, bekommt man 
diesen Fehler, weil diese Klasse in Java 1.5 eingeführt wurde und String 
+ String = String nicht mehr gilt sondern String + String = 
StringBuilder. Manche Leute benutzen ausschliesslich Java 1.5. Daher 
sollte man vielleicht NanoVM auch darauf umstellen. Sonst muss man 
gezwungen, immer die StringBuffer-Klasse zu benutzen, was nicht sehr 
schön ist.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

im CVS ist das mit dem jdk 1.5.0 schon behoben (dank Nils). Ich werde 
regelmäßig aus dem CVS Release-Versionen machen, so dass auch 
nicht-CVS-User daran kommen.

Aber wer mit CVS umgehen kann kann sich jetzt schon per Anonymous-Access 
die aktuellste Version holen.

Ciao,
  Till

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die NanoVM hat jetzt auch zwei (englischsprachige) Mailinglisten auf 
Sourceforge. Technische Diskussionen unter Entwicklern sollten ggf. auf 
der nanovm-devel-liste stattfinden und damit auch Entwicklern zugänglich 
sein, die kein Deutsch sprechen.

Till

Autor: meiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meint ihr, dass diese VM auch auf den mega 16 und 32 funktioniert?
ich bin gezwungen durch mein studium java zu lernen
und was sinnvolleres als taschenrechner schreiben oder linien simulieren 
wird es ja wohl auch geben :-)

Autor: Daniel M. (usul27)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, zum JAVA-Lernen ist das sicher nicht sinnvoll. Das ganze bildet 
nur ein Subset von Java ab und es fehlt die wichtigste Sache - nämlich 
Exceptions.
Ist eher für Leute, die Java schon kennen und so etwas für den uC 
benutzen wollen.

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ja, sie funktioniert auch auf anderen Megas. Für den Mega32 ist sogar 
ein Beispiel dabei.

Und zum Lernen ist es wirklich sicher nicht der richtige Weg. Um 
nebenbei ein wenig Spass zu haben langt es allemal, aber die Sachen an 
Java, die Dein Prof. dir gerne beibringen möchte, kann die NanoVM nur 
halb oder garnicht.

Till

Autor: Victor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi:

Till i need Programer atmega128 whit nanovm?

Autor: Maik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

tolles Projekt, Hut ab. Wenn die VM performant ist, was ich jetzt nicht 
auf die Schnelle beurteilen kann, dann ist das echt spitze.

Nur eine Frage: Ist dieses Projekt "nur" als Demonstration gedacht, um 
zu zeigen, dass auf einer so schwachen Hardware eine Java-VM realisiert 
werden kann? Oder wofür könnte man das sinnvollerweise einsetzen? 
Welchen Vorteil bietet eine Java-VM auf einer solchen schwachen 
(bezüglich CPU-Performance und bezüglich Speicherplatz) Hardware? Ich 
gebe zu, von Java nicht viel Ahnung zu haben. Vielleicht klärt mich mal 
jemand auf. Habe bisher nur C-Entwicklung für Mikrocontroller gemacht.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

habe bisher nur mit C auf uC progammiert. Denkt ihr, dass sich 
Entwicklungszeiten bei Verwendung von Java verkürzen?

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die NanoVM-Beispiele zeigen eigentlich recht genau, wozu sowas gut ist. 
Es macht Sinn mit Geräten, für die jemand anderes die "harte" Arbeit in 
Form von passenden Klassenbibliotheken vorbereitet. Der muss das in C 
machen und hat's  sicher nicht besonders leicht. Der schreibt im Falle 
eines Roboters z.B. Klassen zum Abfragen der Sensoren etc etc

Aber der Anwender der das dann benutzt hat's einfacher. Der kümmert sich 
nicht um die Hardware-nahen Sachen und der verwendete Prozessor ist ihm 
genauso egal wie der normalerweise nötige C-Compiler. Alles was er 
braucht ist ein Java-Compiler und den gibt es für jedes System 
kostenlos.

Till

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das Projekt nicht im default-Pfad sondern woanders im Workspace 
liegt gibts immer ein "Error loading class: 
java.io.FileNotFoundException: Unable to find class file foo.class".

Könnte das noch behoben werden?

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das Projekt noch gepflegt?
Ich wollte es eigentlich auf einen Atmega2560 übertragen, wollte es aber 
vorher unter Linux mal "probekompilieren".
Irgendwie kommen da lauter Fehlermeldungen, mit denen ich so erstmal 
nichts anfangen kann. Ich habe einfach "make" aufgerufen.
Weiß jemand weiter bzw. wie habt ihr das gemacht?

Autor: Till Harbaum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

zur Zeit wird das Projekt nicht aktiv gepflegt. Ich hatte irgendwann 
keine Lust mehr, irgendwelchen Diplomarbeiten einseitig zuzuarbeiten. Es 
gab/gibt diverse Uni-Projekte, die die NanoVM einsetzen. Oft fragen die 
auch nach Support. Aber am Ende behalten alle ihre Ergebnisse für sich. 
Nicht ein einziges hat je seine eigenen Ergebnisse zurückfliessen 
lassen. Also habe ich Entwicklung und Support eingestellt.

Sorry,
  Till

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr sehr schade! So ein Projekt sollte wirklich nicht untergehen! Das 
ist richtig genial.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man hatt's auch als Projekt auf Sourceforge hochladen koennen...

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, jetzt nach 4 Jahren wird das wohl keinen mehr kümmern.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ab auf GitHub und gut is. Da kann jeder forken wie er lustig is.

Autor: Markus J. (markusj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow wie Denn schrieb:
> Man hatt's auch als Projekt auf Sourceforge hochladen koennen...

http://www.mikrocontroller.net/articles/NanoVM
Zweiter Absatz: http://sourceforge.net/projects/nanovm/

mfG
Markus

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich kümmerts. Finde das Projekt sehr interessant.

Autor: Thomas Fromm (kosch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin ein bisschen spät dran ;-)

Erzeugt NanoVMTool intern ein hex, was dann beim Upload ins eeprom 
abgelegt wird? Wenn ja: Ist dieser Weg erforderlich, oder bestünde auch, 
z.B. durch Modifikation vom nanovmtool, die Möglichkeit das als hex 
abzuspeichern und dann via avrdude oder so in eeprom zu schieben?

Autor: Thomas Fromm (kosch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt, man kann ja eine Default-Klasse im Makefile 
konfigurieren :-D

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geniales Projekt!
schade, dass es nicht mehr aktiv weiterentwickelt wird

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.