Forum: Mikrocontroller und Digitale Elektronik Embedded C++ in der Arbeitswelt


von derjaeger (Gast)


Lesenswert?

Hallo,

da ich überwiegend in C Mikrocontroller programmiere, würde ich gerne 
wissen in wie fern sich Embedded C++ vom normalen C++ unterscheidet.

Laut meinen Recherchen ist Embedded C++ eine Teilmenge von C++: Es sind 
sehr viele Funktionen nicht mehr vorhanden.

Gibt es aber Besonderheiten von Embedded C++ gegenüber dem normale C++? 
Oder kann jemand der C++ kann auch problemlos C++ auf Mikrocontrollern 
programmieren (natürlich vorausgesetzt er kennt sich mit der Architektur 
aus)?

Was muss ich berücksichtigen wenn ich C++ kann und C++ für 
Mikrocontroller programmieren muss?


Ich würde gerne noch wissen, auf welchen Mikrocontroller im 
professionellen Umfeld (Entwicklungsabteilungen spezialisiert auf 
Embedded) gerne auf C++ programmiert wird oder Bibliotheken auf 
C++-Basis.

Kann jemand seine Berufserfahrungen da teilen was gängig ist?

von Dr. Sommer (Gast)


Lesenswert?

Embedded C++ ist eine sinnlos kastrierte Sprache die quasi tot ist. Man 
benutzt einfach normales C++ und benutzt nicht geeignete Features 
einfach nicht.

derjaeger schrieb:
> Oder kann jemand der C++ kann auch problemlos C++ auf Mikrocontrollern
> programmieren (natürlich vorausgesetzt er kennt sich mit der Architektur
> aus)?
Nicht ganz so einfach, aber die Knackpunkte lernt man schnell. Nichts im 
Vergleich zum Aufwand,C++ überhaupt erst mal gut zu beherrschen.

derjaeger schrieb:
> Was muss ich berücksichtigen wenn ich C++ kann und C++ für
> Mikrocontroller programmieren muss?

Hauptsächlich dass dynamische Speicher Verwaltung oft problematisch ist, 
und die direkte Verwendung der meisten Container Klassen damit wegfällt 
(ggf. Kann man sich mit eigenen Allokatoren behelfen, aber nicht ganz 
einfach) . Exceptions fallen auch meistens raus, und Stream Klassen wie 
std::cout sind ebenfalls meist viel zu aufwendig implementiert.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Gebrauch von C++ auf Microcontrollern ist verbreiteter als gemeinhin 
angenommen wird. Die bei Bastlern, Einsteigern und auch einigen 
Pragmatikern beliebte Arduino-Umgebung ist nämlich nichts anderes - die 
sogenannten "Sketches" sind C++-Code, der in einer etwas speziellen 
Umgebung verwendet wird (kein main(), stattdessen "setup()" und 
automagisch zyklisch aufgerufene "loop()").

Da wird natürlich nicht der akademische Hechelkurs des "wer hat als 
erster die neuesten Elemente der neusten Version des C++-Standards 
eingesetzt" berücksichtigt, und --auch aufgrund der Einschränkungen der 
Zielhardware-- nicht jede tolle Templatespielerei umgesetzt.

Aber C++ ist es trotzdem, und der Compiler dahinter ist der gute alte 
g++.

von derjaeger (Gast)


Lesenswert?

>Embedded C++ ist eine sinnlos kastrierte Sprache die quasi tot ist.

Der Cross-Compiler "avr-g++" verwendet das normale GNU C++, richtig?

Die meisten offenen Compiler wie gcc (Texas Instruments, ATMEL, ARM) 
unterstützen also nicht 'Embedded C++' sondern kompilieren ganz normal 
in C++?

von Johannes S. (Gast)


Lesenswert?

ich vermute das der MISRA C/C++ Standard hier mittlerweile mehr 
Verbreitung hat, kann das jemand bestätigen?

von Stefan F. (Gast)


Lesenswert?

Ich war noch nie der Meinung, daß man alel Features von C++ tatsächlich 
beherreschen und nutzen muss - gleiches gilt auch für Java.

Insofern überraschte es mich, hier zu elsen, daß es ein "Embedded C++" 
gegeben hat. Davon habe ich noch nie gehört und ich wüsste auch nicht, 
wozu eine spezielle C++ Variante gut sein soll.

Die einzige embedded spezifische Erweiterung, die ich mit vorstellen 
könnte, wäre eine elegantere Syntax zum Adressieren und Ändern von Bits. 
Aber das ist Jammern auf hohem Nivau, schließlich kann man das auch 
zufriedenstellend mit Makros abdecken.

von derjaeger (Gast)


Lesenswert?

>Davon habe ich noch nie gehört und ich wüsste auch nicht, wozu eine spezielle C++ 
Variante gut sein soll.


Wahrscheinlich die gleiche Motivation wie C und MISRA-C. Wozu MISRA-C, 
wenn es schon C gibt?

von Scott Meyers (Gast)


Lesenswert?

Leute, was'n los?

Da stellt einer die Un-Frage nach dieser Sprache im µC-Bereich, und es 
keiner macht ihn nieder !?! Kopfschüttel ...

von Markus (Gast)


Lesenswert?

Dr Sommer schrieb:
>Exceptions fallen auch meistens raus, und Stream Klassen wie
>std::cout sind ebenfalls meist viel zu aufwendig implementiert.

Deshalb macht dort das Arduino-Framework sein eigenes Ding. Das hat zwar 
zur Folge, dass es in keinster Weise mehr zu cout und cin kompatibel 
ist, dafür aber in die kleine MCU passt und trotzdem eine Erleichterung 
bietet.

Hier direkt in's Framewok gegriffen:

'cin' Ersatz:
https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Stream.cpp

'cout' Ersatz:
https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Print.cpp

derjaeger
>Wahrscheinlich die gleiche Motivation wie C und MISRA-C. Wozu MISRA-C,
>wenn es schon C gibt?

MISRA finde ich gut, das begrenzt den Wildwuchs und verbessert die 
Leserlichkeit des Codes. Schau dir mal die kryptischen Programmierstiele 
von vor 30 Jahren an.

Da in der Automotive-Industrie mittlerweile Designtools vorgeschrieben 
sind und diese meist UML und dessen Klassendiagramme unterstützt, wird 
auch C++ irgendwann in Automotive einziehen und dann muss ein MISRA C++ 
her.

von Markus (Gast)


Lesenswert?

Scott Meyers (Gast)
>Leute, was'n los?
>Da stellt einer die Un-Frage nach dieser Sprache im µC-Bereich, und es
>keiner macht ihn nieder !?! Kopfschüttel ...

Die Zeiten sind vorbei. Die alten Knochen, die nur C konnten, sind 
wahrscheinlich ausgestorben ...

von Stefan F. (Gast)


Lesenswert?

C++ ist durch Arduino inzwischen so weit auf µC verbreitet, daß man sich 
lächerlicht macht, wenn man dessen kommerzielle Tauglichkeit immer noch 
verleugnet.

Auch hat das Bashing gegen Arduino und deren Nutzer stark nachgelassen. 
Ich vermute, weil es langweilig geworden ist und weil die Arduino Nutze 
keine kleine Minderheit mehr sind.

Aber keine Sorge, es wird bald neue "Opfer" geben, auf die der Pöbel 
herum hackt.

von Christopher J. (christopher_j23)


Lesenswert?

Die Initiative haben damals vor allem japanische Firmen ins Leben 
gerufen aber laut Stroustrup war EC++ schon 2004 tot ("... and if it 
isn't, it ought to be." :D )Nachzulesen bei 
https://en.wikipedia.org/wiki/Embedded_C%2B%2B

Also als eigene Sprache ist "Embedded C++" in der Welt da draußen 
definitiv nicht mehr vertreten aber C++ auf Embedded-Geräten kommt immer 
mehr in Mode. Sony hat z.B. bei seinen aktuellen Walkman-Produkten den 
Application-Layer komplett in C++ verfasst. Lediglich der OS-Kernel und 
die Treiber sind in C geschrieben. Wen es interessiert, der kann sich 
den Vortrag bei Youtube ansehen. Leider sehr schlecht zu verstehen aber 
technisch wie ich finde sehr interessant: https://youtu.be/T8fLjWyI5nI

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

>Die Initiative haben damals vor allem japanische Firmen ins Leben

Aha ... da wäre jetzt die Frage, ob der TO tatsächlich "embedded C++" 
oder C++ auf Embedded-Systemen meint.

von Markus (Gast)


Lesenswert?

>Leider sehr schlecht zu verstehen aber
>technisch wie ich finde sehr interessant: Youtube-Video "Developing Audio 
>Products with Cortex-M3/NuttX/C++11 - Masayuki Ishikawa, Sony"

Passend zu dem Video spielen die im STM32-Forum gerade mit Nuttx auf dem 
F103:

http://www.stm32duino.com/viewtopic.php?f=45&t=2553&hilit=nuttx

von Max (Gast)


Lesenswert?

Alle Steuergeräre könte man nach IEC61508 oder 26262 oder 50128 oder 
DO178C oder... klassifizieren. Und überall ist verboten, die Adresse 
erst in Runtime zu bekommen, weil sie invalid sein könnte. Alles "Early 
bound" sein muss. Und C++ mit Vererbung  und Virtual Funtion & Co. ist 
gerade das Gegenteil. Keine Steueregeräte im Auto verwendet C++. Im 
Infotainment ist das was anderes. Und SW für autonomes fahren ist noch 
nicht zugelassen.....

von derjaeger (Gast)


Lesenswert?

>oder C++ auf Embedded-Systemen meint

Gemeint war normales C++ auf Embedded Systemen.

Das ein eigener Standard namens 'Embedded C++' existiert wusste ich 
nicht.

von Stefan F. (Gast)


Lesenswert?

Zu C++ gibt es hier einen Artikel, der beschreibt, welche Funktionen du 
nicht oder nur eingeschränkt nutzen kannst:
https://www.mikrocontroller.net/articles/C_vs_C%2B%2B

Auch Lesenwert:
https://www.mikrocontroller.net/articles/AVR_Interrupt_Routinen_mit_C%2B%2B

von @A (Gast)


Lesenswert?

Stefan U. schrieb:
> Auch hat das Bashing gegen Arduino und deren Nutzer stark nachgelassen.
> Ich vermute, weil es langweilig geworden ist und weil die Arduino Nutze
> keine kleine Minderheit mehr sind.

Dann versucht dich mal mit Arduino Kenntnisse irgendwo zu bewerben. 
Arduino nutzen halt einfach die Dummies.

von Dr. Sommer (Gast)


Lesenswert?

Max schrieb:
> Und C++ mit Vererbung  und Virtual Funtion & Co. ist gerade das
> Gegenteil.

Niemand zwingt dich, diese Features zu nutzen. C++ hat noch viel mehr zu 
bieten.

Wobei sich schon die Frage stellt, wie man derart komplexe Software wie 
Automotive ECUs und deren OS (Autosar, osek) entwickeln kann ohne 
jegliche Nutzung von Funktionen Pointer (nichts anderes passiert ja 
intern bei virtuellen Funktionen) und die dadurch gebotene Abstraktion. 
Wenn ich eine OS-Funktion aufrufe die irgendwann später asynchron fertig 
wird, wie übergebe ich dann einen Callback? Ein Funktionen Pointer 
könnte ja invalid sein.

von derjaeger (Gast)


Lesenswert?

>Arduino nutzen halt einfach die Dummies.

Darf ich dann deine Aussage so verallgemeinern, dass jede Person, die 
ein Evaluierungsboard/Entwicklungsboard verwendet auch ein Dummy ist? 
Discovery-Boards, Nucleo-Boards?

Denn ein Arduino Board ist nix anderes als ein Entwicklungsboard. 
Beweise das Gegenteil, dass das nicht so ist.

Wenn ich also schauen im Unternehmen nur schauen will ob eine Idee 
umsetzbar ist, muss ich dann also sofort eine Platine per EAGLE 
designen, fertigen, bestücken lassen und dann mit teurem Programmer 
ausstatten?

Mein Freund ich habe schlechte Nachrichten für dich: Wenn in einem 
Unternehmen etwas auf Machbarkeit geprüft werden will, dann kommen 
solche Entwicklungsboard sofort in Frage. Warum? Weil sie zuhauf in der 
Kiste rumliegen und für diesen Zweck da sind. Ich muss nur mein 
USB-Kabel reinstecken und kann sofort Debuggen und mein Programm 
runterladen. Ich muss keine Schaltung für den Mikrocontroller aufbauen. 
Und für wieviel? Für 10 Euro! Dafür kriegst du nichtmal deine Platine 
gefertigt.

von derjaeger (Gast)


Lesenswert?

>Dann versucht dich mal mit Arduino Kenntnisse irgendwo zu bewerben.

Wenn du nur "Arduino" in deinem Lebenslauf vorzuweisen hast, dann bist 
du grundsätzlich falsch bei dieser Stelle.

von @A (Gast)


Lesenswert?

derjaeger schrieb:
> Wenn du nur "Arduino" in deinem Lebenslauf vorzuweisen hast, dann bist
> du grundsätzlich falsch bei dieser Stelle.

Habe aber schon einige gesehen, die nur Arduino vorzuweisen hatten. Die 
merken noch nicht mal, dass das völlig peinlich ist. Wenn ein erfahrener 
Elektrotechniker zum schnellen testen ein Arduino nimmt, dann ist das in 
Ordnung. Vielleicht hätte ich das oben erwähnen sollen.

von Markus (Gast)


Lesenswert?

Um mal etwas mit einem Mythos aufzuräumen: Man kann mit der 
Programmierung von Arduinos durchaus Geld verdienen.

Zumindest sind so zwei meiner Jahresgehälter zusammen gekommen ( und die 
liegen einiges über dem Ende der Steuerprogression ).
Gut, die Arduinos ( ARM Versionen ) waren wie oben erwähnt nur der 
Mittel zum Zweck und eher die Ersparnis ein eigenes Board entwickeln zu 
müssen.

Aber ich habe auch das Arduino-Framework drunter gelassen, weil es keine 
Notwendigkeit gab, ein Multitaskingsystem o.ä. zu verwenden.
Und klar, bei einem Projekt, was aus um die 100 Files besteht nimmt man 
dann auch nicht mehr die Arduino IDE.

von Scott Meyers (Gast)


Lesenswert?

Wer sich nochmal darüber informieren möchte, warum C gegenüber C++ 
obsolet geworden ist, da kann sich die in diesem Betrag genannten Infos 
ansehen:

Beitrag "Informationen zu C vs C++ / aka Futter für die Diskussion"

Der Begriff "Embedded C++" ist eher zu verstehen als eine 
Vorgesehensweise, die darüber reflektiert, wie groß der 
Ressourcenverbrauch bestimmten Sprachfeatures ist und je nach Einsatz 
und µC einige Dinge nicht nutzt.

von Rolf M. (rmagnus)


Lesenswert?

Dr. Sommer schrieb:
> Exceptions fallen auch meistens raus, und Stream Klassen wie
> std::cout sind ebenfalls meist viel zu aufwendig implementiert.

Wenn man sie vollständig implementiert, vielleicht schon, aber eine 
einigermaßen klein gehaltene Version kann durchaus besser sein als ein 
printf. Der Vorteil ist nämlich, dass für jeden auszugebenden Datentyp 
ein eigener Operator<< definiert ist, also eine eigene Funktion. Damit 
muss nur der Code gelinkt werden, der für die Typen nötig ist, die man 
tatsächlich ausgeben will. Bei printf dagegen muss immer alles 
mitgelinkt werden, auch das, was im konkreten Programm gar nicht 
benötigt wird. Deshalb gibt es ja so Krücken mit verschiedenen 
printf-Versionen, von denen man dann über den Linker eine auswählen 
muss, um zumindest mal die gröbsten Speicherfresser wie float 
rausschmeißen zu können, wenn man sie eh nicht benutzt.

von Stefan F. (Gast)


Lesenswert?

> Dann versucht dich mal mit Arduino Kenntnisse irgendwo zu bewerben.
> Arduino nutzen halt einfach die Dummies.

Das ist Ok, viele Mitglieder dieses Forums sind Hobbyelektroniker ohne 
den Wunsch, sich damit zu bewerben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.