Forum: Mikrocontroller und Digitale Elektronik Mikrocontroler C oder C++


von Mark (Gast)


Lesenswert?

Nabend,
womit erstellt ihr euren Code für den Mikrocontroller (ausser 
Assembler)? In C oder C++?
Ich denke, C würde eigentlich reichen, wenn man jedoch externe Module 
anhängt (RFID, Funk, Bluetooth usw.) würde sich ja auch eigentlich C++ 
anbieten.
Würde gerne mal so ein paar vor-/Nachteile rausfinden. Habe selbst 
bisher nur in C programmiert, würde aber evtl. gerne zu C++ übergehen.

Mark

: Gesperrt durch Admin
von Mark B. (markbrandis)


Lesenswert?

C++ ist, wenn man den gesamten Sprachumfang betrachtet, erheblich 
schwerer zu erlernen und zu meistern als C. Erheblich.

Auf Mikrocontrollern, zumindest wenn es kleinere sind, nutzt man 
freilich oftmals nicht den gesamten Sprachumfang.

Wenn Du C++ lernen willst dann kannst Du das auch an Deinem PC tun.

von test (Gast)


Lesenswert?

Hi,

Damit demmelst du wohl voll ins Wespennest hier :D. Solche Sprachkriege 
sind so alt wie der Programmierer selbst :-P. Ich nutze im Moment für 
eigene Sachen nur noch C++ auf ARM-Controllern. Ohne weitere Wertung des 
Themas, schau dir das mal an:

http://htrd.su/wiki/_media/zhurnal/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment/effectcppemb.pdf

Grüße,
test

von Christopher C. (trihexagon)


Lesenswert?

Die Frage, ob man C oder C++ auf µC nutzen soll, ist eigentlich ganz 
einfach zu beantworten.

Du beherrscht einigermaßen C++ und kannst es auch gewinnbringend auf 
einem µC nutzen, d.h. du weißt, welche Sprachfeatures auf µC sinnvoll 
sind und keinen bzw. fast keinen Overhead erzeugen? Selbstverständlich 
musst du nicht alle Features von C++ kennen, sondern nur so viele, dass 
du aus C++ einen signifikanten Vorteil gegenüber C herausziehen kannst.

 -> Verwende C++

Ansonsten:
 -> Verwende C

von Sheeva P. (sheevaplug)


Lesenswert?

Mark schrieb:
> womit erstellt ihr euren Code für den Mikrocontroller (ausser
> Assembler)? In C oder C++?
> Ich denke, C würde eigentlich reichen, wenn man jedoch externe Module
> anhängt (RFID, Funk, Bluetooth usw.) würde sich ja auch eigentlich C++
> anbieten.
> Würde gerne mal so ein paar vor-/Nachteile rausfinden. Habe selbst
> bisher nur in C programmiert, würde aber evtl. gerne zu C++ übergehen.

"C oder C++" ist eine Frage, die hier im Forum immer wieder heiß 
diskutiert wird -- und ich bekenne, daß ich dabei der C++-Fraktion 
angehöre.

Die Kurzfassung ist: viele C++-Features kann man auch auf 
Mikrocontrollern sinnvoll nutzen. Sie machen den am Enge erzeugten Code 
nicht oder höchstens unwesentlich größer, erlauben aber oft eine 
wesentlich bessere Organisation des Code, verbessern dadurch die Les- 
und Wartbarkeit und vermindern so die Entwicklungszeit. Diese Features 
sind vor allem Datenkapselung, Vererbung, und Polymorphie. C++-Templates 
lassen sich gewinnbringend nutzen, werden jedoch oft als alternativer 
Mechanismus zur Parameterübergabe mißbraucht.

Andere C++-Features sind mit Vorsicht zu genießen, wieder andere machen 
wenig bis keinen Sinn. Dazu gehören Exceptions, dynamisches Binden und 
dynamische Speicherverwaltung, sowie der größte Teil der STL.

Drei wesentliche Punkte der Diskussionen sind erstens: ein C++-Programm 
ist auch dann ein C++-Programm, wenn es nicht jedes einzelne Feature von 
C++ ausnutzt. Und zweitens: wer C++ in limitierten Umgebungen benutzen 
will, der sollte wissen, was der Compiler aus welchem Konstrukt macht, 
und im Zweifelsfalle regelmäßig das Assemblerlisting überprüfen. 
Drittens: es gibt leider bisher keine C++-Library für Mikrocontroller, 
auf die sich die Commnuity einigen konnte; es gibt ein paar 
vielversprechende Ansätze, aber noch keinen Konsens ob einer oder gar 
welcher sich durchsetzen wird.

Wenn man diese Punkte beachtet und bereit ist, ein wenig Zeit ins Lernen 
dieser Dinge zu investieren, dann kann man mit C++ auf Mikrocontrollern 
viel Spaß haben und sauberen, wart- und erweiterbaren Code schreiben, 
der nicht mehr Ressourcen als ein äquivalenter C-Code benötigt.

HTH, YMMV.

von Christopher C. (trihexagon)


Lesenswert?

Christopher C. schrieb:
> Du beherrscht einigermaßen C++ und kannst es auch gewinnbringend auf
> einem µC nutzen, d.h. du weißt, welche Sprachfeatures auf µC sinnvoll
> sind und keinen bzw. fast keinen Overhead erzeugen?

Korrektur, müsste heißen:

Du beherrscht einigermaßen C++ und kannst es auch gewinnbringend auf
> einem µC nutzen, d.h. du weißt, welche Sprachfeatures auf µC sinnvoll
> sind und wie viel Overhead erzeugen?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Dieses Thema wurde schon sehr oft diskutiert, z.B. erst vor kurzem hier:
Beitrag "Mikrocontroller in C++ oder C Programieren"
Beitrag "AVR und C++ - ein Versuch"

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.