Java für Maschinen- und Roboterprogrammierung?

4 Antworten

Es ist so, dass Java eine meines Erachtens einsteiger freundlicheste Sprache ist, Java ist zwar extrem lahm, bei simplen Programmen / Apps fällt das kaum ins Gewicht und spaart viel Zeit, weil das Programm nicht für die einzelnen Plattformen speziell geschrieben werden muss.

Aber eine Sache hast du falsch verstanden, "Ich habe im Zuge meines Maschinenbaustudiums grundlegende Kenntnisse in Java erworben

Es ging nicht darum Java zu lernen, du hast Programmieren an Hand des Beispieles von Java gelernt, die Fähigkeit, die die Uni bei dir entwickeln wollte, war es Verständnis für die Syntax, die durchführung sowie die Logik es Programmierens zu bekommen.

Es ist wesentlich leichter eine programmiersprache zu lernen, wenn man bereits programmieren kann.

Meiner Erfahrung nach, wenn man von Java kommt und c übt, dauert es ein paar Stunden, dann läuft es schon verhältnismäßig unfallfrei.

Du hast programmieren gelernt und nicht Java, Java war nur das Fallbeispiel.

Es gibt bzw. gab tatsächlich Microcontroller, die mit Java programmiert wurden. Aber die Dinger haben sich nie wirklich durchgesetzt. Einige ARM-CPUs konnten sogar mit entsprechenden Erweiterungen Java-Bytecode nativ ausführen ... das ist m. M. n. aber auch gestorben. :)

Java eignet sich schon alleine wegen dem GC nicht für Mikrocontroller, denn es ist nicht ohne Kopfstände vorhersehbar, wann der GC sich entschließt aufzuräumen, und außerdem wird währenddessen kurzzeitig recht viel dynamischer Speicher alloziert und sehr schnell danach wieder frei gegeben, was das Memorymanagement bemüht und so ziemlich die langsamste Operation ist, die man auf einer modernen CPU durchführen kann.

Wenn man Pech hat und einem der GC dazwischen funkt, kann es also durchaus sein, dass eine Operation, die mit C++ exakt einen einzigen Takt fressen würde, plötzlich einige Zehntausend Takte verbrät. Vor einigen Monaten hatte ich hier auf GF dazu mal einen praktischen Vergleich, bei dem man genau dieses Verhalten bei Java im Vergleich zu C++ nachvollziehen konnte, finde aber leider gerade den Link nicht mehr ... ich glaube, das war nicht mal eine Antwort, sondern nur ein Kommentar auf eine andere Antwort ... naja, egal.

Du kannst übrigens auch in C# Mikrocontroller programmieren, aber da eine Programmiersprache ja eigentlich nur ein Werkzeug ist, sollte man dieses anhand der Aufgabenstellung weise auswählen. Und Java für µC ist nicht weise. Punkt. :)

Wenn du sehr schwachbrüstige µC hast, würde ich wirklich Assembler empfehlen. Die kleinsten µC, die ich relativ regelmäßig programmieren muss haben 32 Byte RAM und 128 Byte ROM (Nicht KILObyte sondern einzelne Byte!!!). Dafür ist also selbst C zu aufgeblasen. :)

Etwas größere µC programmiere ich (zumindest teilweise) gerne in C, oft aber auch in C++. Bei noch größeren Controllern oder etwas mächtigeren eingebetteten Systemen nehme ich fast nur noch C++.

Naja, also vermutlich wirst du nicht um C / C++ herum kommen, aber Java ist auch für sehr viele Dinge wirklich unglaublich gut geeignet und außerdem hast du damit ja schon ein paar Erfahrungen gesammelt, die du in bestimmten Bereichen auch auf C oder sogar Assembler übertragen kannst.

Also mach dir keine Gedanken! Lern einfach C! Viel Spaß! :)

Kieselsaeure  25.12.2017, 21:40

32 Byte RAM und 128 Byte ROM whuw, das sind ja mal highend systeme! was können die denn? von 1 bis 4.294.967.295 zählen? :-D

wo ist denn hier der danke button hin?! ._.

0
TeeTier  25.12.2017, 22:26
@Kieselsaeure

Nein, das geht leider nicht, da der breiteste Datentyp nur 8 Bit hat, und somit das Maximum bei 255 liegt. Wenn du mehr willst, musst du das irgendwie emulieren ... dabei aber nicht die Größe des Maschinencodes aus den Augen verlieren. :)

Die haben aber nur 8 Pads, wovon auch nur drei bis vier beliebig programmierbar sind und in SMD-Bauweise sehen die echt niedlich aus, da der ganze µC weniger als 2mm Kantenlänge hat. :)

0

Kommt ganz darauf an auf welchem Level. Einen Treiber für ein Gerät kannst du mit Java nicht schreiben, ein grafisches Programm auf Basis eines Treibers dagegen schon.

Java ist eine Makro-Sprache. D.h., dass Java selbst mit C und Assembler programmiert wurde, indem man hier Befehlssätze zusammen gelegt und ein angenehmeres Befehls-Interface erschaffen hat, welches dann auch noch unterschiedlich für jede Maschine interpretiert werden muss.

Diese vielen Zwischenschritte lassen keine Echtzeit-Programmierung zu und die ist für direkte Maschinen-Programmierung unablässig, da die Maschine hier unmittelbar reagieren muss.

Stell Dir vor ein Roboter drückt beim Händeschütteln zu fest zu. Bevor er dann in Java berechnet hat, dass er den Druck wieder lösen muss, ist Deine Hand bereits Matsche.

So geht Java.

Java ist nett, wenn man plattformübergreifend programmieren will, denn so erspart man sich die doppelte Arbeit für dasselbe Programm und man muss außerdem keine plattformspezifischen Kenntnisse haben. So gesehen ist Java das Mittel der Wahl, wenn man kaum Ahnung hat/haben will. Nichts für Ungut, aber Java ist so eine lahme Krücke, doch jeder will ein Held am PC sein und da ist das nun mal der einfachste Weg. ;))

Wenn Du in Echtzeit und maschinennah programmieren willst, dann kommst Du an Assembler und C nicht vorbei. Für weiterführende System-Software kommst Du auch an C++ kaum vorbei. Alles Andere ist plattformabhängig und Makro.

verreisterNutzer  11.10.2017, 18:41

Der vorletzten Absatz von MarkusGenervt gehört ihm um die Ohren geschlagen (Populist einfache "Lösungen" für komplexe ... -- AfD)

Der erste Absatz ist einfach falsch.

Richtig ist, das Java nicht in Maschinencode übersetzt wird, also im Prinzip eine Interpretersprache ist, was für Echtzeit-Programmierung nicht geeignet ist, hioer dann eher C, C++ oder auch Fortran.

0
MarkusGenervt  11.10.2017, 18:46
@verreisterNutzer

Hast Du mich gerade als AfD'ler angepisst???

Du solltest Dir mal Dein Schandmaul mit Seife auswaschen!!! Ich glaube es hackt!?!

So brauchst Du hier gar nicht erst anfangen. Das kann man auch vernünftig makeln.

1
SonRatgeb 
Fragesteller
 11.10.2017, 19:04
@verreisterNutzer

Liegt es also nur an der Geschwindigkeit mit der die Befehle verarbeiet werden können?

0
MarkusGenervt  11.10.2017, 19:10
@SonRatgeb

Ja, durch die Übersetzung brauchen die Befehle mehr Zeit. Außerdem beinhalten die Java-Befehle auch Steuerungsabläufe, die für eine bestimmte Aufgabe evtl. gar nicht nötig sind und somit zusätzlich Zeit verschwenden.

0
FireEraser  11.10.2017, 19:41

"dass Java selbst mit C und Assembler programmiert wurde"

Streng genommen wurde Java bzw. Hotspot in C++ geschrieben.

"unterschiedlich für jede Maschine interpretiert werden muss"

Da muss gar nichts kompiliert werden. Hotspot verwendet hauptsächlich JIT Kompilierung und das Android Runtime ausschließlich AOT Kompilierung.

"Stell Dir vor ein Roboter drückt beim Händeschütteln zu fest zu. Bevor er dann in Java berechnet hat, dass er den Druck wieder lösen muss, ist Deine Hand bereits Matsche."

Das ist ein richtig schlechtes Beispiel. Den Unterschied zwischen einem Java- und einem C-Programm würdest du in diesem Fall gar nicht merken.

Den Unterschied merkt man zum Beispiel, wenn man mit Java ein großes Array kopiert, das ist richtig langsam. Das macht aber auch kein Depp, denn in Java gibt es die native System.arraycopy() Methode.

"So gesehen ist Java das Mittel der Wahl, wenn man kaum Ahnung hat/haben will."

Du willst mir also sagen der Großteil der Programmierer im Enterprise Bereich hat keine Ahnung? Da ist Java klar am weitesten verbreitet.

"Nichts für Ungut, aber Java ist so eine lahme Krücke"

In diesem Fall wäre C ein Opa mit Rollator, der ist auch nicht viel schneller. Interessanter wäre da wohl eher der Unterschied von Java zu anderen nicht nativ kompilierten Sprachen wie Python.

"Wenn Du in Echtzeit und maschinennah programmieren willst,"

Echtzeit Programmierung kannst du auf einem non-RTOS sowieso vergessen und auf RTOS Systemen läuft die JVM gar nicht.

0