Welche Programmiersprache für Embedded Systems?

cubiix

Newbie
Registriert
Feb. 2016
Beiträge
4
Guten Morgen,

da ich in einem Jahr mein Abitur machen werde, bin ich schon seit längerem auf der Suche nach einem passenden Beruf und auf das Berufsfeld gestoßen, in dem man Embedded Systems programmiert, genauer im Auto (Einparkhilfe, Interieur,...)

Nun zu meiner Frage:
Da ich schon mit einigem Vorwissen in das Studium starten möchte, hatte ich vor, schon vorher mir die Grundlagen der Programmierung von Mikrocontrollern etc. anzueignen. Zurzeit lerne ich Java, da ich es als guten Einstieg in die Programmierung sah, jedoch ist es ja für Embedded Systems ungeeignet. Welche Sprache wäre also sinnvoll zu lernen?

Danke schonmal im Voraus
LG
 
Viele (kleine) Microcontroller/-prozessoren werden noch in C bzw. C++ programmiert, das die beiden noch relativ Hardwarenahe sind.

Wobei ich kein Experte für Fahrzeugelektronik bin. Könnt sein, dass die Boardcomputer mit einem (Embeded-) OS laufen, dass dann auch andere Sprachen kann.
 
trotzdem würde ich erstmal bei java bleiben. wenn du das dann super beherrscht ist der umstieg auf eine andere sprache nicht so schwer.
 
Auch in heutiger Zeit werden für eingebettete Systeme noch immer fast ausschließlich C bzw. C++ verwendet. ;)

Was für ein Studiengang schwebt dir da denn vor?
 
Mit Java und/oder C/C++ machst du nichts falsch. Du wirst eh im Studium beide Sprachen kennen lernen.
Ergänzung ()

Fang aber bitte nicht mit C an, sondern nutze von ersten Projekt an OOP.
 
Vlt wäre es Sinnvoller sich erstmal mit den Grundlagen der Informatik vertraut zu machen statt ne Sprache zu lernen
Programmieren ist ja nur ein kleiner Teil der Informatik, ausserdem kann dir keiner sagen ob und wann Programmierung von Microcontrollern dran kommt. Vlt dauert es einige Semester und bis dahin hast du es wieder vergessen.
 
foolproof schrieb:
Was für ein Studiengang schwebt dir da denn vor?

Ich hatte vor, Informatik zu studieren und dann vielleicht einen Master mit Schwerpunk "embedded systems" zu machen, ich weiß es aber ehrlich gesagt noch selbst nicht genau.
 
dann auf jeden fall erstmal java beherrschen. und mathe. wenn du in den beiden sachen gut bist wird der rest sehr viel einfacher.

gut wäre auch wenn du die möglichkeit hast mal nen größeres programmier projekt in angriff zu nehmen. am besten in ner gruppe aber allein geht auch.
 
Zuletzt bearbeitet:
Ich kann dir von meiner Erfahrung sagen, wir haben mit Java angefangen (Prog 1 und 2) und dann teilweise Vorlesungen wo wir darauf aufbauten (z.b. Datenbanken 2 mit DBO's).
Dann fing gleichzeitig mit Betriebssysteme Bash und C and und dann als Prog 3 hatten wir C++. Aber Fokus war immer Java das ändert sich dann ggf in der Vertiefung wo manche C/C++ eher "benötigen" als andere wo man weiterhin Java nutzen "könnte"
 
ist wohl überall anders. bei mir gab es gleich im ersten semester nen modul mit etwas c, genauer c0, also nur das nötigste was man an funktionen braucht. im zweiten semester dann gleich c++, java und haskell. das wird aber überall nur grob angeschnitten.
 
Ich gehe mal davon aus, dass Flo0 in Würzburg studiert hat, wo ich auch studieren möchte, da ich aus der Region komme ^^
Dann hat sich die Frage, welche Sprache zu lernen sowieso schon erledigt und ich bleibe einfach bei Java.
Auf jeden Fall, danke an alle, die mir die Frage so schnell beantworten konnten :)
 
Ja ich, studiere noch, in WÜ an der FH. Bin erst im 5ten Semester. Wenn du Fragen hast, meld dich einfach.
 
Wenn du wirklich etwas mit Embedded Systemen machen willst hier zwei Tipps:

1. Vergiss Java. Damit versaust du dich nur komplett. Ein Java Entwickler setzt sich nie tief genug mit den relevanten Techniken auseinander die du später benötigst wenn du umsteigst. Wenn du den optimalen Weg gehen willst dann lerne zuerst C++ und gehe dann auf C runter. An der klassischen Lehre ist der Weg anderst herum. Das Problem dabei ist, dass du dann C++ im C Syntax schreibst. Klar gibts immer welche die z.b. behaupten wenn du Java kannst kannst du alles. Stimmt aber nur in der Theorie.

2. Nimm einen Studiengang der schon früh auf Embedded Systeme geht. Weil der Umstieg von PC auf Embedded ist genauso qualvoll wie von Java auf C. Anderst herum ist das kein Problem.
 
Hallo,

C++ erzeugt in der Regel zu komplexen Code und imho wird mindestens 16 bit vorrausgesetzt, was die ganzen 8 bit Microcontroller ausschließt. Abgesehen davon sind viele Microcontroller nicht in der Lage komplexen Code, der durch OOP erzeugt wird, adequat schnell abzuarbeiten. Das führt dazu, dass auch im Jahr 2016 Microcontroller überwiegend prozedural mit (embedded) C / TyniTCL und Assembler entwickelt werden.

Solltest Du vorhaben in diese Richtung zu studieren mach dich lieber, anstatt eine Sprachsyntax zu lernen, damit vertraut wie Speicher und Schnittstellen funktionieren und wie man selber Compiler baut, denn das kommt im Studium unweigerlich auf einen zu, wenn man da einen, wenn auch kleinen und irrelevanten, Vorsprung hat schadet das nicht. Übrigens ist das eher Informatik und nicht das Programmieren an sich, das ist nur ein kleines Werkzeug in einer großen Werkzeugkiste und um ehrlich zu sein ist das reine Programmieren der eher langweilige Teil der Entwicklung, deswegen wird es in der Industrie auch gerne in günstigere Lohngruppen ausgegliedert.

Grüße
 
Ich hab Elektrotechnik mit der Fachrichtung Automation studiert. In den ersten beiden Semestern hat man dort reine C Vorlesungen, eben weil viele Controller nur C (oder eben Assembler) können. Dazu ist Java viel zu Hardwarefern. Dinge wie Pointer oder das direkte Ansprechen von Registern geht mit Java nicht (das läuft ja in seiner VM).
 
Solltest Du vorhaben in diese Richtung zu studieren mach dich lieber, anstatt eine Sprachsyntax zu lernen, damit vertraut wie Speicher und Schnittstellen funktionieren und wie man selber Compiler baut,
Bevor man einen Compiler baut, sollte man aber wissen, wie die Syntax einer Programmiersprache funktioniert. :freak: Insofern macht er sicher nichts falsch, wenn er sich erstmal in irgendeine Sprache reinfuchst. Dass das mit dem Schwerpunkt auf eingebettete Systeme nicht unbedingt Java sein sollte, kann ich aber nur unterschreiben.

C++ erzeugt in der Regel zu komplexen Code
Abgesehen von Polymorphie, Exceptions und new/delete sind quasi alle Sprachkonstrukte in C++ zero-cost-Abstraktionen und erzeugen tatsächlich keinen komplexeren Code als funktional äquivalentes C99. Allerdings kann schonmal die Codegröße explodieren, wenn man viele Templates verwendet.

Auf Exceptions kann man aber verzichten und auch das new/delete-Problem ließe sich mit placement-new umgehen, wenn man entweder seine eigenen Allokatoren schreibt oder gleich in vordefinierte Speicherbereiche schreibt. Bei virtuellen Funktionen steht man in C vor demselben Problem - wenn man keine Funktionspointer will oder nutzen kann, muss man sich was anderes überlegen.

Wenn man sowas berücksichtigt, kann man auch C++ auf nem Mars Rover benutzen und hat dann immer noch die Vorteile von RAII und co. ;)
 
C++ erzeugt in der Regel zu komplexen Code und imho wird mindestens 16 bit vorrausgesetzt, was die ganzen 8 bit Microcontroller ausschließt. Abgesehen davon sind viele Microcontroller nicht in der Lage komplexen Code, der durch OOP erzeugt wird, adequat schnell abzuarbeiten. Das führt dazu, dass auch im Jahr 2016 Microcontroller überwiegend prozedural mit (embedded) C / TyniTCL und Assembler entwickelt werden.
Sehe ich anders. Hab Info studiert und arbeite seit >5 Jahren im Embedded Bereich und würde niemals auch nur eine Zeile Assembler schreiben. Für jedes µC Projekt, nimmt man imho nur C++. Allerdings haben meine Chips auch immer >=16bit. Mag sein, dass ein 4bit oder 8bit µC so extrem einfache Sachen macht, dass C noch annehmbar ist.
Generell macht man mit dem anfänglichen Lernen von Java nichts falsch, da es vor allem darum geht OOP und generell Programmieren zu können.
Woher aber immer das Gerücht kommt, dass C++ (OOP) langsameren oder größeren Code erzeugt wüsste ich gerne mal. "Langsamer" ist sowieso blödsinn, da ein C Programmierer einfach viel länger Braucht beim Entwickeln so, dass ein C++ Programmierer viel mehr Zeit hat um auf Performance überhaupt zu achten, sofern sie denn gebraucht wird. Außerdem hat C++ Code automatisch höhere lesbarkeit und Codequalität und außerdem stell STL/Boost unglaublich viel in sehr hoher Qualität zur Verfügung. Wer das alles in C nachbaut (inkl Tests..) wird niemals mit einem Projekt fertig und kann froh sein, wenn es bei zur Deadline läuft. Über Performance/Speicherplatz hat man da noch keine Sekunde nachdenken können.
 
Zuletzt bearbeitet:
Wenn ich mein Informatikstudium so reflektiere, dann kann ich dir sagen:

Wenn du noch nie programmiert hast, wäre Java und C++ für den Einstieg sehr gut, um überhaupt erstmal das "Gefühl" für Programmierung zu bekommen. SQL wäre auch noch gut, wenn du das noch nie gemacht hast, einfach um ein Gefühl zu bekommen.

Je nach Studiumgang und Uni werden die Lehrpläne etwas variieren aber im Grunde wirst du dich sowohl mit Programmierung von GUI und Datenstrukturen, Datenbanken, Modellierung und Projektmanagement auseinandersetzen müssen (der spaßige Teil^^) wie auch mit Rechnersysteme, Betriebssysteme, Hardwarenahe Rechnerarchitekturen, Assembler, Mathematik und Theoretischer Informatik (der z.T. nicht so spaßige eher trockene Teil, je nach Prof natürlich).

Wir haben z.B. Datenstrukturen (Stack, Set, Queue, Heap, Tree, ...) und gefühlt alle Sortieralgorithmen (quick, bubble, insert, random^^, ... ) in Haskell später dann in Java geschrieben und in Programmierparadigmen Sprachen wie LISP, Scheme und ProLog kennengelernt. Abgesehen von Java bringt dir OOP da relativ wenig.

Die Frage ist auch ein wenig was du nach dem Studium machen willst.
In die Programmierung gehen und evtl. zusätzlich eine Ausbildung zum Fachinformatiker (vlt direkt Dual während des Studium?) oder Doktor machen und in der Forschung bleiben?
Gehst du in die Richtung der Embedded Software wirst du um C++ (vlt. noch C) denk ich nicht drum herumkommen.. viel mehr wird das dein Butter-und-Brot-Business werden. Also da vlt direkt einsteigen?

Wenn es eher in die JavaEE Richtung gehen soll, kannst du dir in Deutschland (und wahrscheinlich europaweit/ global) eigentlich den Arbeitsplatz aussuchen, wenn du Java, Spring, Hibernate und eine Oberflächentechnologie (JSP, HTML5, ...) beherrschst, dazu in Englisch sicher bist (was als Informatiker nicht schwer sein sollte) und als i-Tüpfelchen noch etwas mit Maven /Ant+Ivy/Gradle und mit SVN/Git/Mercurial anfangen kannst.


my 2 cents

J.
 
Zurück
Oben