PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR mit Java programmieren?



hacker
21.10.2005, 17:51
hi,

auf der Suche nach einem Java-Compiler für AVRs bin ich nur auf NanoVM gestoßen...gibt es noch andere? und wär nett, wenn ihr überhaupt euro Meinung über Java in Verbindung mit einem AVR posten könntet..danke :)

gruss hacker

bluelight_electronic
21.10.2005, 18:54
moin,

naja habe dir ja NanoVM empfolen... nur naja java gut und recht und oberflächenübergreifend ja ........ nur ... find einfach naja ka. Der AVR Ist eben auf C / ASM ausgelegt es gibt ja prozessoren die eher auf Java Ausgelegt sind...

halte relativ wenig von Java auf AVR's ... (wobei naja im endefeckt kommts eh nur drauf an was der Compiler daraus macht ... aber naja ;)

wir hatten ja im ICQ darüber schon geredet ...

michaelb
21.10.2005, 20:15
Hi Hacker,
Mit Java den AVR proggen würde mich auch interressieren! Hat da schon jemand Erfahrung? Wie ist NanoVM?
Gruß Michi

Cathrel
22.10.2005, 20:19
Ich denke nicht, dass es sinnvoll ist auf einem Controller, der so wenig Ressourcen hat eine Java VM laufen zu lassen, welche selbst den meisten Platz weg nimmt. Von der längeren Ausführungsgeschwindigkeit mal abgesehen.

bluelight_electronic
22.10.2005, 23:12
hmm Cathrel ich denk auch kaum das er Java direkt laufen lassen will *gg* sondern einfach Java als Sprache nutzen will und diese dann in maschienen code umwandeln lassen will ... (also halt nen Java Compiler für AVR's)

uwegw
23.10.2005, 12:03
dann wäre es wohl eher angebracht, C zu nehmen. die syntax ist ja sehr ähnlich, die umstellung dürfte also relativ leicht fallen...

Cathrel
23.10.2005, 12:20
hmm Cathrel ich denk auch kaum das er Java direkt laufen lassen will *gg* sondern einfach Java als Sprache nutzen will und diese dann in maschienen code umwandeln lassen will ... (also halt nen Java Compiler für AVR's)

Bei der NanoVM, geht es zumindest genau darum.
http://www.harbaum.org/till/nanovm/

http://www.harbaum.org/till/nanovm/nanovm.gif

Links siehst du die herkömmliche Methode mit C code, rechts die mit der NanoVM im Flash.
Die Virtual Machine, die ungefähr 8 Kilobyte umfasst wird in das Flash geladen und das eigentliche Programm im Java-Bytecode wird ins EEPROM geschrieben.

hacker
23.10.2005, 14:04
hmm..jo also ein java compiler für avrs gibts noch nicht?

bluelight_electronic
23.10.2005, 14:07
wuch cathrel ^^ hatte ihm zwar nano VM empfhohlen aber öhm joar war nich tiefer drinn ^^.

und Hacker lern einfach C *gg*

recycle
23.10.2005, 15:30
Ich denke nicht, dass es sinnvoll ist auf einem Controller, der so wenig Ressourcen hat eine Java VM laufen zu lassen, welche selbst den meisten Platz weg nimmt. Von der längeren Ausführungsgeschwindigkeit mal abgesehen.

Naja, ob irgendwas sinnvoll ist oder nicht liegt manchmal im Auge des Betrachters.
Bei der C-Control ist es zwar ein Basic Interpreter und keine Java-VM, aber das Prinzip und die von dir angesprochenen Nachteile sind ähnlich.
Für den Hersteller ist das Konzept trotzdem voll aufgegangen, denn der hat ja reichlich Kunden dafür gefunden.

Zu den Anfangszeiten von Java hat die gesamte Fachpresse vorhergesagt, dass Java sich eines Tages auf unzähligen Kleinprozessoren in Kaffeemachinen usw. durchsetzen wird.
Zur Zeit sieht es allerdings eher so aus, als hätten die ganzen selbsternannten Fachleute damals einfach die Marketing-Sprüche von Sun nachgeplappert. Die meisten Gerätehersteller scheinen jedenfalls bis heute noch nicht so sehr von den Vorzügen von Java zur Steuerung von Kaffeemachinen usw. überzeugt zu sein ;-)

Ein Java-Compiler der den Quelltext direkt in den plattformspezifischen Code übersetzt, so dass dort keine Java-VM erforderlich ist, entspricht wahrscheinlich nicht ganz dem Konzept von Java.

Wenn der gut gemacht ist und sich die Leistungseinbussen ähnlich wie bei
Bascom in Grenzen halten, wäre das sicherlich für viele Leute interessant.

BGMF
27.10.2005, 11:13
Also mal ehrlich, da ich mit Java besser umgehen kann als mit C, auch wenn die Unterschiede bei den grundsätzlichen Sachen recht ähnlich sind, wäre es fuer mich besser/schöner, wenn ich die gewohnte Sprache nutzen könnte und nicht auf C zurueckgreifen muesste.
Leider ist die NanoVM, soweit ich das richtig verstanden habe, aber leider nur auf den ATmega8 beschränkt.
Da ich mich gerade mit ATmega128L rumschlage, also fuer mich eher sinnlos...

Aber wenn einem von euch mal was derartiges ueber den Weg läuft - mal bitte hier bescheid sagen, denn das wuerde mich wirklich interessieren und ich wuerde mit Freuden umsteigen...

BGMF

SprinterSB
27.10.2005, 12:58
Ich kann mich da meinen Vorrednern nur anschliessen. Java auf nem AVR halte ich nicht für sonderlich angebracht. Erstmal musst du die Sprache gründlich abspecken: Serialisierung, Security, RMI, AWT, Reflection API, und so fliegt raus. Nebenläufigkeit wohl auch. Einen Großteil der Leistung opferst du für die VM, an Flash, RAM und EEPROM. Java sieht es nicht vor, direkt auf die Hardware zu greifen, also brauchst du native Klassen um auf SFRs zu greifen und das zu erledigen, also für jedes Derivat ne neue API.
Bytecode ist zwar recht kompakt, aber mit 1-2 kBytes wirst du auch nicht sooo weit kommen, dazu bei grottiger Performance. Auf einem Hostrechner spielt das keine Rolle, da ist es viel wichtiger flott entwickeln zu können und Abstand von der Hardware zu haben (meistens jedenfalls), und da verwende ich Java wo ich kann.
Teile deines AVRs wirst du aufgrund der langsamen Abarbeitung gar nicht nutzen können, bei InputCapture oder hoher Interrupt-Last wird's jedenfalls sehr schwer. Bei Systemen an der Grenze gehen die Kosten immens in die höhe: Entwicklungszeit, Stabilität, Nerven, so daß du nicht wirklich was sparst.
Dem RAM geht fix die Luft aus: die VM belegt einen Großteil und int in Java ist 32 Bit breit. Weiterhin ist die Frage, ob die VM dafür ausgelegt ist, Flash zu nutzen, zB für Tabellen. Falls nicht, belegen die auch Platz im RAM (oder im EEPROM). Und was nutzt dir Java, wenn der Code für ne Hashtable dein ganzes EEPROM auffrisst?
Portierbar dürfte das Zeug auch nicht sein. Der Bytecode für einen Mega8 wird auf einem Mega128 nicht funktionieren.

Mit avr-gcc hast du einen Leistungsfähigen C-Compiler für die AVRs, ausser für ein paar Winzlinge. Die C-Syntax ist dir offenbar vertraut. IMHO ist es weniger Aufwand, dich mit C anzufreunden, als dir den Wolf nach ner VM zu suchen. Scheint ohnehin eher eine mentale Hürde zu sein...

BGMF
27.10.2005, 13:44
Ja, mag ja sein, das das auf HW zutrifft.
Aber auf der "normalen" SW-Seite, ist Java auf jedenfall schon mindestens so gut wie C/C++.
Meine Meinung...

Na ja gut.
Ich geb mich ja geschlagen.
Wie war der Spruch?
"Schuster bleib bei deinen Leisten!"
So etwa hauts wohl auch bei diesem Thema hin...

BGMF