Forum: Mikrocontroller und Digitale Elektronik In welcher Sprache sollte man programmieren?


von leinad R. (leinad2)


Lesenswert?

Hallo,
ich habe mir in letzter Zeit immer häufiger die Frage gestellt, in 
welcher Sprache ich meine µC programmieren sollte...
Ich hab eig. gedacht ich mache es mit C++ aber in letzter Zeit bin ich 
mir da nicht mehr so sicher, ich habe mehr über Basecon und C gelesen 
und frage mich nun welche Sprache wohl "leichter", übersichtlicher und 
zukunftsorientierter wäre.
Natürlich wäre es auch wichtig, dass man geeigneten Support im Inet dazu 
findet. :-/

Auf eure Meinungen freu ich mich schon sehr.

von leinad R. (leinad2)


Lesenswert?

Ich dachte auch immer C++ wäre der Nachfolger von C und damit "moderner" 
also vielseitiger und einfach besser und beliebter.

von egal (Gast)


Lesenswert?

Für kleine µC ist C noch immer das Mittel der Wahl. Manchmal ist auch 
Assembler sinnvoll. C++ eher weniger.

von Kein Name (Gast)


Lesenswert?

Da ist natürlich die erste Rückfrage: Was für ein µC?
Zur Zeit reicht die Auswahl vom Pic12 mit 1k Programmspeicher bis zu 
ARMs mit Linux Betriebssystem.

von Dussel (Gast)


Lesenswert?

leinad R. schrieb:
> und frage mich nun welche Sprache wohl "leichter", übersichtlicher und
> zukunftsorientierter wäre.
Alles geht nicht. Leichter ist wohl Bascom, nach allem, was ich gehört 
habe, übersichtlicher ist Geschmackssache und zukunftsorientierter ist 
C.

leinad R. schrieb:
> Ich dachte auch immer C++ wäre der Nachfolger von C und damit "moderner"
> also vielseitiger und einfach besser und beliebter.
Im PC-Bereich. Aber man könnte sagen, die kleinen Controller haben da 
nicht mitgehalten. C++ ist eine Erweiterung von C, deren neue 
Fähigkeiten aber zu komplex für kleine Controller sind. Vor Allem fehlt 
der RAM.

Übrigens wird das hier sicher wieder ein C-gegen-Bascom-Diskussion.

von Wilhelm F. (Gast)


Lesenswert?

leinad R. schrieb:

> Hallo,
> ich habe mir in letzter Zeit immer häufiger die Frage gestellt, in
> welcher Sprache ich meine µC programmieren sollte...

Worum geht es denn? Beruf oder Hobby?

"egal" beschrieb es schon, aber wie man hier im Forum sieht, 
beschäftigen sich auch noch Leute mit Bascom.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

leinad R. schrieb:
> In welcher Sprache sollte man programmieren?

Wenn du programmieren solltest, kannst du das in C tun, mußt es aber 
nicht.

von K.R. (Gast)


Lesenswert?

Dussel schrieb:
> Übrigens wird das hier sicher wieder ein C-gegen-Bascom-Diskussion.

Wozu, die Lage ist doch klar.

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Wie ist folgender Vorschlag:
-Lern einfach programmieren, dann ist die Sprache egal.

Je nach Aufgabenstellung und Einsatzgebiet nimmst du dann die Sprache 
deiner Wahl.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

Ich könnte in C, Pascal und Basic. Für meine Hobbyzwecke habe ich mich 
für LunaAvr und Bascom entschieden.
Für rein berufliche Zwecke nehme C weil es in diesem Umfeld einfach 
Standard ist.
Schnuppere mal in alle Sprachen rein und entscheide Dich für das für 
DICH passende.

von Dussel (Gast)


Lesenswert?

K.R. schrieb:
> Dussel schrieb:
>> Übrigens wird das hier sicher wieder ein C-gegen-Bascom-Diskussion.
>
> Wozu, die Lage ist doch klar.
Ist sie das? Bisher ist es ruhig geblieben, aber ich bin davon 
ausgegangen, dass hier wieder die Leute einfallen, die meinen, dass nur 
ihre Position die richtige ist. Ich bin ja froh, dass es  bisher nicht 
so ist.

Mir ist auch noch eingefallen, dass Matlab und Simulink stark an 
Bedeutung gewinnen. Es verbreitet sich immer mehr, dass Modelle 
geschrieben und für Controller umgesetzt werden. Für den Hobbybereich 
ist das nicht relevant, da die entsprechenden Programme viel zu teuer 
sind, aber in der Industrie setzt sich das immer mehr durch.

von Fabian O. (xfr)


Lesenswert?

C++ ist im Prinzip eine Erweiterung von C um Features zur 
objektorientierten Programmierung. Die sind nützlich wenn man große 
Programme mit vielen ähnlichen Objekten hat, die am besten auch noch zur 
Laufzeit entstehen und rumgereicht werden müssen. In typischen 
Mikrocontrolleranwendungen ist das aber nicht der Fall, deshalb reicht 
dafür normales C.

Der Vorteil von C ist, dass es eine schlanke Programmiersprache mit 
wenig Schlüsselwörten und nur den wichtigsten Bibliotheksfunktionen ist. 
Die Datentypen sind sehr hardwarenah. Man kann die Programmiersprache 
daher gut überschauen und nachvollziehen, was der Code tatsächlich im 
Mikrocontroller macht. Im Vergleich zum Assembler werden einem viele 
Detailentscheidungen abgenommen, man bleibt aber für eine Hochsprache 
ziemlich nah am Geschehen.

Der Unterschied von C im Vergleich zu anderen Sprachen wie Bascom ist, 
dass C ohne Bibliotheken im Prinzip nichts kann, daher wird C auch 
manchmal als "Makroassembler" bezeichnet. Die Programmiersprache enthält 
z.B. keine vorgefertigen Befehle oder Funktionen, um die Peripherie 
eines Mikrocontrollers zu nutzen, nicht mal zum Ein/Ausschalten eines 
einzelnen Pins.

Alles was C kann, ist Werte an bestimmte Speicherzellen schreiben. 
Welche Speicherzellen das sind und was da reingehört, muss man selber im 
Datenblatt des Mikrocontrollers nachschauen. Gut daran ist, man versteht 
wirklich, was dabei passiert. Schlecht ist, man braucht wesentlich 
länger, um ein lauffähiges Programm zu erzeugen.

Das gilt zumindest, wenn man alles selber machen will. Man muss das 
natürlich nicht, denn es gibt jede Menge fertiger C-Bibliotheken, die 
einem die Funktionen des Mikrocontrollers über einfache Funktionsaufrufe 
bereitstellen. Das Problem ist nur, dass man in dem riesigen Angebot 
erstmal eine gute Bibliothek finden muss und sie meistens noch auf 
seinen speziellen Controller anpassen muss. Jeder Programmierer 
gestaltet seine Bibliotheken anders und auch die Qualität variert enorm. 
Wenn man Pech hat, sind zwei Bibliotheken, die für sich beide 
funktionieren miteinander inkompatibel und man muss doch wieder selber 
Hand anlegen. Das kann alles sehr mühsam sein, so dass man für viele 
Dinge sich seine Bibiotheken doch lieber selber schreibt.

An der Stelle kommen dann alternative Programmiersprachen wie Bascom, 
Luna, die Arduino-Entwicklungsumgebung usw. ins Spiel. Bei diesen 
Sprachen sind schon mehr oder weniger umfangreiche Bibliotheken direkt 
in die Programmiersprache integriert. Der Vorteil ist, diese 
Bibliotheken werden auf einheitliche Weise verwendet und sind zueinander 
kompatibel (natürlich nur innerhalb der gleichen Sprache). Man kann 
damit also sehr schnell funktionierende Programme zusammenbasteln.

Was dabei genau im Mikrocontroller passiert, bleibt aber hinter der 
Abstraktionsschicht verborgen. Zum Lernen sind sie daher meiner Meinung 
nach ungeeignet. Außerdem decken diese Bibliotheken natürlich nicht den 
gesamten Funktionsumfang des Mikrocontrollers ab, sondern nur einen 
abstrahierten Ausschnitt davon. Wenn man etwas spezielleres machen 
möchte, muss man sich doch wieder auf die Registerebene hinab begeben 
und bei Null anfangen. Die integrierten Bibliotheken lassen sich, 
zumindest soweit ich weiß, nicht modifizeren bzw. nur in Teilen 
weiterverwenden.

Bei Bascom kommen dann noch syntaktische Unterschiede dazu, die Leute 
ansprechen, die vorher schon Basic programmiert haben und sich damit 
beim Einstieg/Umstieg in die Mikrocontrollerprogrammierung leichter tun. 
Als Anfänger bringt Dir das keinen Vorteil, denn die C-Syntax ist nicht 
schwieriger oder leichter, sie ist nur anders. Sie findet sich außerdem 
in den anderen gebräuchlichen Sprachen wie C++, C#, Java, PHP usw. 
wieder, sie hat sich also (imo nicht ohne Grund) durchgesetzt.

Wenn Du also etwas universelles, zukunftsorientiertes lernen möchtest, 
dabei auch verstehen, was im Mikrocontroller passiert und seinen ganzen 
Funktionsumfang nutzen können willst, dann lerne C. Wenn Du mal auf C++ 
oder einen anderen Controller umsteigst oder PC- oder Webprogrammierung 
betreiben willst, ist dieses Wissen keineswegs verloren.

Wenn es Dir dagegen hauptsächlich darum geht, schnell zum Ziel zu kommen 
und Du den Mikrocontroller mit weniger Aufwand für Standardaufgaben 
einsetzen willst, ohne allzu tief in die Programmierung einzusteigen, 
dann ist vielleicht auch eine der alternativen Sprachen etwas für Dich.

von Coder (Gast)


Lesenswert?

Dann werf' ich noch ADA Spark in die Runde...

von Wilhelm F. (Gast)


Lesenswert?

Wenn schon Hochsprache, so schadet es aber nicht, wenn man zu seinem µC 
auch den Assembler etwas kennt. Die Architektur des µC muß man sowieso 
kennen. Assemblerkenntnisse helfen bei Fehlern und Nachschauen in den 
Listings oft ungemein. Z.B. was genau auf dem Stack passiert, und bei 
Funktionsübergabeparametern.

von Der Rächer der Transistormorde (Gast)


Lesenswert?

Fabian O. schrieb:
> Der Unterschied von C im Vergleich zu anderen Sprachen wie Bascom ist,
> dass C ohne Bibliotheken im Prinzip nichts kann,

die aber Bestandteil des Standards sind. Der Unterschied ist das du dir 
die Teile so zuschneiden kannst wie du es brauchst.


> daher wird C auch
> manchmal als "Makroassembler" bezeichnet.

Was es ja auch ist, nur eben ein universeller, hochportabler und 
konfigurierbarer Makroassembler

> Die Programmiersprache enthält
> z.B. keine vorgefertigen Befehle oder Funktionen, um die Peripherie
> eines Mikrocontrollers zu nutzen, nicht mal zum Ein/Ausschalten eines
> einzelnen Pins.

Was auch keinen Sinn macht weil dann alle oben genannten Eigenschaften 
schlicht weg wären. Dafür macht sich der Compilerhersteller dran das 
reinzubauen. Mit dem Ergebnis das du beides (mit Abstrichen) bekommst.

Ich hab mit Assembler angefangen, dann Basic gemacht und bin jetzt bei 
C. Assembler ist wie eine Handkarre bei der du dich mühsam über den 
Acker schiebst, Basic wie ne fette Familienkutsche die gemächlich vor 
sich hinschaukelt (aber schon bei 5cm Schnee nicht den Berg hochkommt 
und C wie n Formel 1 Renner. Eine falsche Drehung am Lenkrad und schon 
fliegst du aus der Kurve. Aber wenn du dann fahren gelernt hast gehts ab 
(in allen Belangen ;-). Dann hast du noch n Riesen Werkzeug- und 
Ersatzteillager die du alle mit ein wenig zurechtfeilen einsetzen 
kannst.

Das bietet weder die Handkarre noch die Kutsche.

von heeen (Gast)


Lesenswert?

Liest sich hier gerade als hätten die meisten noch nicht viel C++ 
programmiert.
C++ lässt sich hervorragend auch auf kleinen Mikrocontrollern verwenden 
wenn man sich um die Kosten verschiedener Sprachfeatures bewusst hält. 
Dinge die man abwägen sollte sind etwa virtuelle Funktionen oder 
Exceptions. Ansonsten hält sich C++ stark nach dem Motto: "nichts 
bezahlen für Dinge die man nicht nutzt".

von Dussel (Gast)


Lesenswert?

heeen schrieb:
> C++ lässt sich hervorragend auch auf kleinen Mikrocontrollern verwenden
> wenn man sich um die Kosten verschiedener Sprachfeatures bewusst hält.
Natürlich. Jedes C-Programm ist auch ein C++-Programm, aber wenn man von 
C++ spricht, geht es um die Erweiterungen von C. Die wahrscheinlich 
bedeutendste ist die Objektorientierung. Und damit wird es auf einem 
kleinen Controller knapp.

von Wilhelm F. (Gast)


Lesenswert?

Der Rächer der Transistormorde schrieb:

> Das bietet weder die Handkarre noch die Kutsche.

Und C ist halt das Mittelding, was man aber auch zur Oberklasse 
ausfeilen kann. Man muß halt vieles selbst machen. Ich fing einst auch 
mit Basic an, auch mit Assembler. Ein leistungsfähiger Makroassembler 
bietet mal noch was, ist aber stark toolabhängig.

heeen schrieb:

> Liest sich hier gerade als hätten die meisten noch nicht viel C++
> programmiert.

Das stimmt. Mir erschloß sich der Grund nie so recht.

von leinad R. (leinad2)


Lesenswert?

OK
das war ja jetzt schonmal ewig viel zu lesen :D
Ich denke ich werde mir jetzt nach etwas C++ mal C anschauen und dann 
einfach mal sehen was sich ergiebt.

Auf alle Fälle danke an alle, besonders an Fabian für diesen 
ausführlichen Roman :-)

von Der Rächer der Transistormorde (Gast)


Lesenswert?

heeen schrieb:
> Liest sich hier gerade als hätten die meisten noch nicht viel C++
> programmiert.

Was haben denn die Sprachwerweiterungen auf einem µC für Vorteile?

Bei den Projekten die ich mache ist die Kapselung von C genau das 
richtige. Die ++ Komponenten erscheinen mir (als C++ Novize) eher wie 
eine höhere Abstraktionsebene. Auf einem Kontroller vermeide ich So was 
aber. Aus diversen Gründen.

von (prx) A. K. (prx)


Lesenswert?

Hatten wir letzthin schon alles durch: 
Beitrag "C++ für Embedded: ab welchen Prozessormerkmalen?"

von Mark B. (markbrandis)


Lesenswert?

> In welcher Sprache sollte man programmieren?

In einer, die für den konkreten Anwendungsfall geeignet ist.

Bei Mikrocontrollern ist C nun mal der Standard, was aber nicht heißt 
dass man keine andere Sprache verwenden darf. Zumindest aber macht man 
nichts grob verkehrt, wenn man sich hier für C entscheidet.

von A. M. (am85)


Lesenswert?

Um mal ein bisschen dieser gefährlichen und halbwissenden Behauptung 
"C++ = C with Classes" entgegen zu wirken. Ja, C++ ist damals in den 
80er Jahren so entstanden und ja, C++ kann man größtenteils wie C 
programmieren (viele Elemente sind gleich oder ähnlich). Aber seit den 
Anfängen von C++ sind mittlerweile fast 30 Jahre vergangen und C++ und C 
sind vollkommen verschiedene Sprachen. Die obenstehende Behauptung ist 
also schon seit Jahrzehnten hinfällig.

von Thomas der enterbte (Gast)


Lesenswert?

Herbert Sutter: Für alle die glauben, dass man C++ nach überschaubarer 
Zeit beherrschen kann (http://gotw.ca/gotw/)
Hermann Wacker: Die C-Katastrophe (http://www.wackerart.de/c.html)
Henning Thielemann: C-Hasser in 10 Tagen 
(http://www.henning-thielemann.de/CHater.html)

von (prx) A. K. (prx)


Lesenswert?

André M. schrieb:
> Anfängen von C++ sind mittlerweile fast 30 Jahre vergangen und C++ und C
> sind vollkommen verschiedene Sprachen.

C Programme lassen sich mit nur geringfügigen Änderungen in C++ 
übersetzen. Der Übergang von C zu C++ insbesondere bei µCs ist also 
fliessend, zumal man sich unterhalb der dicken Brummer auf dafür 
verträgliche Sprachkonzepte beschränken muss. Aus Sicht eines 
Anwendungsprogrammierers auf PCs stellt sich das freilich anders da.

von Wilhelm F. (Gast)


Lesenswert?

Thomas der enterbte schrieb:

> Herbert Sutter: Für alle die glauben, dass man C++ nach überschaubarer
> Zeit beherrschen kann (http://gotw.ca/gotw/)
> Hermann Wacker: Die C-Katastrophe (http://www.wackerart.de/c.html)
> Henning Thielemann: C-Hasser in 10 Tagen
> (http://www.henning-thielemann.de/CHater.html)

Ich selbst bin das beste lebende Beispiel dafür.

Hochsprachen haben mich an sich nie gequält, aber so ein +++++ Zeugs.

von A. M. (am85)


Lesenswert?

A. K. schrieb:
> André M. schrieb:
>> Anfängen von C++ sind mittlerweile fast 30 Jahre vergangen und C++ und C
>> sind vollkommen verschiedene Sprachen.
>
> C Programme lassen sich mit nur geringfügigen Änderungen in C++
> übersetzen. Der Übergang von C zu C++ insbesondere bei µCs ist also
> fliessend, zumal man sich unterhalb der dicken Brummer auf dafür
> verträgliche Sprachkonzepte beschränken muss. Aus Sicht eines
> Anwendungsprogrammierers auf PCs stellt sich das freilich anders da.

Bei dem reduzierten Sprachumfang, auf den man dann zurückgreifen würde, 
stimmt das natürlich. Allerdings zwingt man dann gewissermaßen einen C++ 
Compiler C Code zu übersetzen. Wie unsinnig das ist, sollte 
offensichtlich sein.

von W.S. (Gast)


Lesenswert?

leinad R. schrieb:
> ich habe mir in letzter Zeit immer häufiger die Frage gestellt, in
> welcher Sprache ich meine µC programmieren sollte...

Das klingt recht theoretisch. Welche uC hast du denn?
Und welche Programmiersprachen stehen dafür dir überhaupt zur Verfügung?

Mal abgesehen vom Tagesgeschäft, wo man sich nach einer ganzen Reihe von 
Randbedingungen richten muß (was es gibt, was man sich davon überhaupt 
leisten kann, was für's konkrete Problem überhaupt angemessen ist ... 
usw) meine ich, daß man eigentlich ein bissel auf den Erhalt wenigstens 
einer kleinen Vielfalt von Programmiersprachen achten sollte. Sonst 
läuft es auf Monokultur hinaus und die ist nach allen Erfahrungen der 
Menschheit immer schlecht.

Derzeit reden die meisten von C und C++, ein bissel BASIC gibt es auch 
noch, aber das ist eigentlich schon etwas zu monokulturartig. Schau 
einfach mal, was es sonst noch so gibt, Pascal oder 
Modula(-->Codesammlung) oder sonstwas noch bishin zu Java (jaja per 
"JamaicaVM" auch auf uC's) - wenn kein wirtschaftlicher Druck dahinter 
ist, kann und sollte man sich das alles mal ganz ruhig zu Gemüte ziehen. 
Ich will dich nicht zu irgendeiner speziellen Sprache animieren, 
sondern: Guck dir am besten alles an, was es so gibt.

W.S.

von (prx) A. K. (prx)


Lesenswert?

André M. schrieb:
> Wie unsinnig das ist, sollte offensichtlich sein.

Die eigene Ansicht ist offensichtlich, die des Anderen absurd. ;-)

Wie oben schon skizziert gibt es zwischen zig MB grossen C++ 
Windows-Anwendungen und reinem C ein weites Feld. Daher finde ich es 
keineswegs unsinnig, für µCs ein reduziertes C++ zu verwenden. Leider 
weigern sich reine C Compiler standhaft, ein solches reduziertes C++ zu 
übersetzen.

Dass (nicht nur) ich C++ für µCs keineswegs für offensichtlichen Unsinn 
halte hatte wurde bereits dort aufgeführt: 
Beitrag "C++ für Embedded: ab welchen Prozessormerkmalen?"

Aber das ist eine der gängigen und unlösbaren Streitfragen, die immer 
wieder mal aufkommen und immer wieder mit der These anfangen, dass C++ 
für µCs offensichtlicher Unsinn sei. Aus der Sicht eines professionellen 
Windows-Programmierers mag diese These angehen, weil er sich ein solches 
C++ mitunter überhaupt nicht vorstellen kann. Nur ist auch ein 
reduziertes C++ weit mehr als C, grad so wie C mehr ist als Assembler.

Was die Jahrzehnte und alte Sprachen angeht: Die bei µCs verwendete C 
Sprache ist meistens noch C89/C90.

von Ralph (Gast)


Lesenswert?

Der Rächer der Transistormorde schrieb:
> Assembler ist wie eine Handkarre bei der du dich mühsam über den
> Acker schiebst, Basic wie ne fette Familienkutsche die gemächlich vor
> sich hinschaukelt (aber schon bei 5cm Schnee nicht den Berg hochkommt
> und C wie n Formel 1 Renner. Eine falsche Drehung am Lenkrad und schon
> fliegst du aus der Kurve. Aber wenn du dann fahren gelernt hast gehts ab
> (in allen Belangen ;-). Dann hast du noch n Riesen Werkzeug- und
> Ersatzteillager die du alle mit ein wenig zurechtfeilen einsetzen
> kannst.

Die Beschreibung ist gut, muss ich mir mal merken . :-)


Bascom mag ja vielleicht Vorteile haben ( ich hab noch keine gefunden).
Hat aber einen großen Nachteil. Es gibt es nur für eine µC Familie.
Solange man nur dort unterwegs ist, mag BASCOM eine Alternative sein, 
sonst eher nicht.

Assembler, ist auf jeder µC Familie anders. Also jedes mal zu einem 
relative hohen Prozentsatz neu lernen.

C Compiler gibt es für nahezu jede µC Familie. Ich wüsste jetzt µC 
Familie keine für den ich noch keinen Compiler gefunden hätte.
Solang man sich mit dem Programm an die Standards hält ist es nahezu 
egal für welchen µC man das Programm schreibt. Der Code lässt sich dann 
auf jedem Compiler übersetzen.
Natürlich müssen die Hardwarezugriffe dem jeweiligen µC angepasst 
werden.

C++ Nunja nicht alle Compiler für µC unterstützen den C++ Befelssatz.
Ansonsten ist C++ nichts anderes als ein aufgebohrtes C.
Wenn du also mit C anfängst ist der Aufstieg zu C++ nicht mehr die Welt.
Oder anderes rum, wenn du C kannst , dann kannst du auch auf einem PC 
alles machen was C++ auch kann, nur musst du dann mehr Sachen "zu Fuß" 
machen die C++ als Funktion schon mitbringt.

Von der Seite ist meine Empfehlung für µC eindeutig "C". Damit bist du 
am flexibelsten und außerdem ist es in der industriellen Entwickler 
weitgehend der Standard.

von A. M. (am85)


Lesenswert?

A. K. schrieb:
> André M. schrieb:
>> Wie unsinnig das ist, sollte offensichtlich sein.
>
> Die eigene Ansicht ist offensichtlich, die des Anderen absurd. ;-)
>
> Wie oben schon skizziert gibt es zwischen zig MB grossen C++
> Windows-Anwendungen und reinem C ein weites Feld. Daher finde ich es
> keineswegs unsinnig, für µCs ein reduziertes C++ zu verwenden. Leider
> weigern sich reine C Compiler standhaft, ein solches reduziertes C++ zu
> übersetzen.

Du weißt aber sicher worauf ich hinaus will ;-) C++ wie C zu 
programmieren und es dann trotzdem C++ zu nennen, nur des Namens wegen, 
führt doch irgendwie auch zu nichts. Sobald ich aber trotz reduziertem 
Umfang eindeutige Merkmale von C++ verwende, dann macht es Sinn.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Der Rächer der Transistormorde schrieb:
> Assembler ist wie eine Handkarre bei der du dich mühsam über den
> Acker schiebst, Basic wie ne fette Familienkutsche die gemächlich vor
> sich hinschaukelt (aber schon bei 5cm Schnee nicht den Berg hochkommt
> und C wie n Formel 1 Renner. Eine falsche Drehung am Lenkrad und schon
> fliegst du aus der Kurve. Aber wenn du dann fahren gelernt hast gehts ab
> (in allen Belangen ;-). Dann hast du noch n Riesen Werkzeug- und
> Ersatzteillager die du alle mit ein wenig zurechtfeilen einsetzen
> kannst.

Wunderschön und treffend ;)

von Peter D. (peda)


Lesenswert?

leinad R. schrieb:
> ich habe mir in letzter Zeit immer häufiger die Frage gestellt, in
> welcher Sprache ich meine µC programmieren sollte...

Die Frage ist zuerst, welche Leistungsklasse an MCs und Anwendungen 
schwebt Dir denn überhaupt vor?

Heutzutage nennt sich ja alles MC, vom kleinen ATtiny13 mit 1kB Flash 
bis zu großen ARM-Boliden mit vielen MB Flash.
C hat den Vorteil, daß man man sie alle damit programmieren kann. Wenn 
man aus der PC-Welt kommt, braucht es allerdings etwas Einarbeitung, um 
auf 1kB Flash programmieren zu können.


Ich mache gerne kleine Steuerungen mit kleinen 8Bittern, wo man nicht 
monatelang an irgendwelchen GUIs rumbasteln muß, um dann den User mit 
langweiligen Animationen zu nerven, statt sofort auf einen Tastendruck 
zu reagieren.
Ich weiß, der Trend geht leider in die andere Richtung. Heutige 
Fernseher haben ja schon wieder Einschaltzeiten, die man von früher nur 
von den alten Vollröhrenfernsehern gewohnt war.


Peter

von Sven B. (scummos)


Lesenswert?

leinad R. schrieb:
> Ich dachte auch immer C++ wäre der Nachfolger von C und damit "moderner"
> also vielseitiger und einfach besser und beliebter.

Nö, ist zwar geschichtlich so, aber es gibt genug Leute, die C trotz 
freier Wahl C++ vorziehen. Verstehe ich teilweise sogar, C++ ist ein 
ziemliches Monster.

Ansonsten denke ich, dass man mit C immer gut beraten ist.

von avr (Gast)


Lesenswert?

Ich möchte auf __flash und __uint24 nicht mehr verzichten. In C++ gibts 
das nicht.

von Coder (Gast)


Lesenswert?

Ich schon...
ein nettes const anstatt __flash ist viel schöner

von Thomas E. (thomase)


Lesenswert?

avr schrieb:
> In C++ gibts das nicht.
In C auch nicht.
Es sei denn, du definierst es oder jemand anderes hat das für dich 
gemacht.

mfg.

von Peter D. (peda)


Lesenswert?

avr schrieb:
> __uint24

Ich hab das noch nie gebraucht. Wenn uint16_t nicht reicht, nehme ich 
einfach uint32_t.


Peter

von Axel S. (a-za-z0-9)


Lesenswert?

leinad R. schrieb:
> Ich dachte auch immer C++ wäre der Nachfolger von C und damit "moderner"
> also vielseitiger und einfach besser und beliebter.

Nur in dem Sinne, daß ein Fahrrad moderner ist als Laufschuhe, ein Auto 
moderner als ein Fahrrad und ein Flugzeug moderner als ein Auto.

Und wie in diesem Vergleich sind es auch bei der Wahl der 
Programmiersprache die konkreten Umstände, die bestimmen was die jeweils 
beste Wahl ist. Wobei es durchaus auch eine Kombination sein kann.


XL

von avr (Gast)


Lesenswert?

Coder schrieb:
> Ich schon...
> ein nettes const anstatt __flash ist viel schöner

ach echt und was bringt das in c++ auf dem avr?

Peter Dannegger schrieb:
> Ich hab das noch nie gebraucht. Wenn uint16_t nicht reicht, nehme ich
> einfach uint32_t.

Ich konnte dadurch in meinem letzten Projekt einen kleinen Avr nehmen. 
Mit uint32_t wäre mehr Ram nötig gewesen.

von Coder (Gast)


Lesenswert?

avr schrieb:
> Coder schrieb:
>> Ich schon...
>> ein nettes const anstatt __flash ist viel schöner
>
> ach echt und was bringt das in c++ auf dem avr?
>
Mag an deiner Controller-Familie liegen, dass Dir das nichts bringt. Du 
solltest dir in Erinnerung rufen, dass __flash ebensowenig Bestandteil 
von C oder C++. Stattdessen ist es Toolchain-Spezifisch, kenne ich z.B. 
vomIAR?

von avr (Gast)


Lesenswert?

Coder schrieb:
> dass __flash ebensowenig Bestandteil
> von C oder C++.

richtig, es ist ja nur ein Argument für avrgcc auf dem Avr.

von Peter C. (Gast)


Lesenswert?

Hallo,
im Rahmen der freien Meinungsäußerung möchte ich auch was zu meinen 
persönlichen Erfahrungen sagen.

Vor vielen Jahren habe ich aus der Hobbyecke mit der C-Control und Basic 
in die MC Ecke hineingerochen. Aufgrund der Kosten der Controller war 
ich dann in die Open C-Control gerutscht. Basic war damals für mich eine 
les- und beherschbare Sprache und den Anforderungen angemessen.

Als es dann nötig wurde auch kleine Zeiten zumessen reichte ein Timer 
Interupt von 20ms (Standard bei C-Control) bei weitem nicht aus und so 
bin ich zu den AVR 8 Bittern und Bascom gekommen.

Vieles konnte ich mit Bascom erledigen und ansteuern allerdings oftmals 
nicht ohne spez. Dateien die durch die Hardwareanbieter oder andere User 
zur Verfügung gestellt wurden. So gingen wieder 3 Jahre ins Land.

Der Bruch mit Bascom kam erst mit einer Hard- und Software Entwicklung 
für den CAN BUS. Bascom ist bei meiner Routeranwendung echt zulangasm 
gewesen.

So habe ich dann vor 2 Jahren mit C begonnen und mich dank der 
wegweisenden Hilfe echter Profis hier im Forum Schritt für Schritt vor 
getastet.

Heute bin ich froh den Schritt gemacht zuhaben.
C ist "die" für mich passende Plattform. Ich habe das nicht studiert 
oder beruflich damit zutun, hänge auch noch bei den für mich 
ausreichenden 8 Bit AVRs fest. Programmprobleme löse ich gerne aus 
eigener Kraft, bleibt dann auch besser im Kopf, aber manchmal...auch 
öfter.... gehts halt nicht und da sind die Denkanstösse oder Hilfen hier 
im Forum einfach klasse.

Danke !!!!!

Peter C.

PS: Dem Vergleich mit der Handkarre, Kutsche und der Formel1 würde ich 
zustimmen.

von F. F. (foldi)


Lesenswert?

egal schrieb:
> Für kleine µC ist C noch immer das Mittel der Wahl. Manchmal ist auch
> Assembler sinnvoll. C++ eher weniger.
Wieso nicht C++ lernen? Da lernt man den Funktionsumfang von C doch 
gleich mit.

von Sven B. (scummos)


Lesenswert?

Nicht wirklich. Klar kann C++ das meiste von dem, was C kann auch, aber 
der Stil, in dem man die beiden Sprachen programmiert, ist schon 
ziemlich unterschiedlich.

von F. F. (foldi)


Lesenswert?

Im Moment mache ich zwar wenig bis gar nichts in Sachen Programmierung, 
da ich nun etwas beim Fertigen von Leiterplatten fest hänge, aber ich 
habe mit C++ angefangen (oder will das), weil gerade der gesteigerte 
Funktionsumfang dann einen nicht so schnell an Grenzen stoßen lässt.
Korrigiert mich, wenn ich völlig falsch liege.
Außerdem ist die Portierbarkeit von allem aus der C Ecke leichter.
Angefangen hatte ich mit Arduino (die Boards finde ich immer noch gut, 
gerade das Nano) und ganz schnell gesehen, dass ich doch irgendwie auf C 
angewiesen bin, weil ich für jeden Sensor und viele andere Bauteile libs 
brauche, die alle in C geschrieben sind.
Wenn ich also irgendwas ändern will oder nicht genau weiß wie ich da was 
ansprechen muss, dann muss ich entweder dauernd fragen oder mich selbst 
einlesen.
Ich begann zu lesen was ich für eine Sprache nehmen soll.
Assembler fiel weg, da ich damit (wenn ich später vielleicht mal vom 
Computer aus steuern will, das Interface dann wohl kaum mit Assembler 
für µC machen kann) nicht viel auf dem PC anfangen kann.
Ihr wisst alle selbst, fragst du drei Leute, bekommst du fünf Meinungen.
Mein Sohn lernt gerade C#. Nicht schlecht, aber für µC noch nicht so 
verbreitet. Er zeigte mir gerade erst ein Programm das, wie er sagt, in 
C++ doppelt so lang ist. Andere schreiben C braucht man doppelt so viel 
Code wie für C++.
Wie auch immer. Ich hab hier an die 1000 Seiten C++ und die werden 
gelesen werden. Ich hab mir die nächsten fünf Jahre vorgenommen vom 
ahnungslosen Anfänger zum Anfänger auf zu steigen.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Peter C. schrieb:
> PS: Dem Vergleich mit der Handkarre, Kutsche und der Formel1 würde ich
> zustimmen.

Jetzt pack mal noch Java, PHP und so ein Zeugs dazu ;)

von Axel S. (a-za-z0-9)


Lesenswert?

Frank O. schrieb:

> ... ich
> habe mit C++ angefangen (oder will das), weil gerade der gesteigerte
> Funktionsumfang dann einen nicht so schnell an Grenzen stoßen lässt.
> Korrigiert mich, wenn ich völlig falsch liege.

Das ist zumindest ein Verständnisproblem. C++ hat keinen "gesteigerten 
Funktionsumfang". Der Funktionsumfang einer Programmiersprache kommt im 
wesentlichen aus den vorhandenen Bibliotheken/Modulen. Und die sind 
weder bei C noch bei C++ Bestandteil der Programmiersprache.

Was C++ dir im Vergleich zu C bringt, sind neue, tendenziell stärkere 
Ausdrucksmittel. Z.B. für Objektorientierung, Operatorüberladung, 
Polymorphie, Templates, Exceptions. Und du bekommst auch eine 
Basis-Klassenbibliothek mit richtigen Strings (die char[] in C sind ein 
schlechter Witz), Containern, Such- und Sortieralgorithmen, etc.

Die meisten dieser neuen Möglichkeiten entfalten ihre volle Wirkung erst 
bei größeren Programmen (z.B. OO, Exceptions), andere tendieren dazu den 
Code aufzublähen (z.B. Templates). Und wieder andere bekommt man 
praktisch umsonst (z.B. Polymorphie für Funktionen). Deswegen wird man 
gerade auf µC kaum den ganzen Umfang von C++ ausschöpfen.

Andererseits ist C++ so kompatibel zu C wie nur irgend möglich (das war 
ein Designziel, um die vorhandenen C-Bibliotheken weiter nutzen zu 
können; siehe "Funktionsumfang" oben). Man kann also ganz problemlos 
seinen "C-Stil" beibehalten, wenn man zu C++ umsteigt. In der 
Gegenrichtung ist das deutlich schwerer. Deswegen würde ich immer 
empfehlen, erstmal C zu lernen und dann erst C++. Und dann auf µC die 
Mittel von C++ sparsam einzusetzen. Oder zumindest mit einem geschulten 
Blick für den Overhead, den man sich damit einfängt.

> Assembler fiel weg, da ich damit (wenn ich später vielleicht mal vom
> Computer aus steuern will, das Interface dann wohl kaum mit Assembler
> für µC machen kann) nicht viel auf dem PC anfangen kann.

Ich verstehe nicht woher diese Geringschätzung für Assembler kommt. Je 
näher man an der Hardware programmiert, desto nützlicher finde es. 
Natürlich macht man damit keine GUI. Aber die macht man auch nicht 
unbedingt mit C++. Und wenn doch, dann sind die verwendeten Sprachmittel 
und Bibliotheken so grundverschieden, daß es sich wie eine andere 
Sprache anfühlt (z.B. kann man nette GUI in C++ mit Qt machen. Das ist 
dann 100% OO mit so ziemlich allen Features die C++ bietet)

> Mein Sohn lernt gerade C#. Nicht schlecht, aber für µC noch nicht so
> verbreitet.

C# ist vom Sprachdesign her das, was Java sein sollte. Leider ist es 
eine Sackgasse (nur ein "Betriebssystem", nur eine(?) Architektur, nur 
ein Vendor).

> Er zeigte mir gerade erst ein Programm das, wie er sagt, in
> C++ doppelt so lang ist. Andere schreiben C braucht man doppelt so viel
> Code wie für C++.

Diese Metrik ist trügerisch. Wenn du die gesuchte Funktionalität in 
einer Bibliothek hast, ist das "Programm" ein Einzeiler. Egal ob nun 
PHP, Perl, Java, C#, C++ oder C. Was die ersten 4 aus dieser Liste so 
mächtig macht, sind ihre riesigen Standard-Bibliotheken.

Wenn man vergleichen will, dann lieber die Gesamtmenge an benötigtem 
Code (ausführbar und Bytecode/Skripte) oder die Anzahl CPU-Zyklen bis 
zum Ergebnis. Dann stehen die "low level" Kandidaten C und C++ plötzlich 
viel besser da.


XL

von Fabian O. (xfr)


Lesenswert?

Frank O. schrieb:
> Im Moment mache ich zwar wenig bis gar nichts in Sachen Programmierung,
> da ich nun etwas beim Fertigen von Leiterplatten fest hänge, aber ich
> habe mit C++ angefangen (oder will das), weil gerade der gesteigerte
> Funktionsumfang dann einen nicht so schnell an Grenzen stoßen lässt.

Das halte ich auch für ein Missverständnis. Mit C wirst Du auf einem 
Mikrocontroller garantiert an keine Grenzen stoßen, die C++ lösen würde.

Meiner Meinung nach ist C++ als Anfänger zur Programmierung von 
Mikrocontrollern ungeeignet. Man kann damit zwar prinzipiell genau wie 
in C programmieren bzw. nur die Sprachmittel nutzen, die nichts kosten, 
allerdings wird das in den typischen Büchern/Tutorials zu C++ nicht 
vermittelt. Da wird von Beginn an objektorientierte Programmierung, 
gerne gleich mit dynamischem Speicher und virtuellen Methoden gelehrt, 
so dass einem als Anfänger gar nicht so bewusst wird, dass es auch 
anders geht. Es ist einfach das Standardvorgehen, ein Objekt mit new zu 
erzeugen wenn man es braucht, ohne dass man sich groß Gedanken macht, 
was dabei passiert. Und gerne macht man auch gleich mal alle Methoden 
virtuell, denn vielleicht will man ja später mal eine überschreiben.

Zumindest ging es mir so. Ich habe an der Uni zuerst Java gelernt und 
sollte darauf in einem Praktikum etwas in C++ programmieren. Es schon 
fast peinlich, aber für mich war es ein riesiges Aha-Erlebnis, als ich 
dann gegen Ende des Praktikums irgendwo in bestehendem Code gesehen 
habe, dass man ein Objekt auch ohne new erzeugen kann ...

Erst als ich dann später auf niedrigerer Ebene in C programmiert habe, 
ist mir der Unterschied zwischen Stack-, Heap- und globalen Variablen 
richtig bewusst geworden. Außerdem habe ich gesehen, wie man "Objekte" 
in C nachbauen kann, indem man jeder "Memberfunktion" einen Zeiger auf 
ein Struct mitgibt. Letztlich macht C++ das ja auch nicht anders, aber 
es bliebt hinter der class-Syntax verborgen und war für mich viel 
undurchsichtiger.

Ich würde daher empfehlen, lieber erstmal ordentlich C zu lernen. Man 
entwickelt dabei aus meiner Sicht ein viel besseres Verständnis für das 
Programm, also wenn man direkt mit den objektorientieren Paradigmen 
loslegt. Wenn man C beherrscht kann man dann ja mal einen Blick auf C++ 
werfen. Dann ist man auch in der Lage zu beurteilen, welche der neuen 
Features in welchen Programmen nützlich sind und welche nicht. Das 
Wissen aus C ist dabei ja nicht verloren, denn C++ ist ja im 
wesentlichen eine Erweiterung von C, der Kern ist der gleiche.

von Andy (Gast)


Lesenswert?

Eigentlich ist hier alles gesagt.

Ich persönlich mache es so: alles was schnell gehen soll programmiere 
ich in Bascom. Nur wenn der Kunde es unbedingt wünscht auch in C. Das 
dauert aber immer viel länger .... und die Fehlersuche kann ein Krampf 
sein. In Bascom finde ich jeden Fehler innerhalb kurzer Zeit, in C kann 
man manchmal Stunden damit verbringen.

Ein Projekt, was ich ich in Bascom in 16 Stunden inkl. Testen 
fertigentwickelt habe und abliefern kann, dauert in C sicherlich einen 
ganzen Tag länger, wenn nicht mehr.

Der Geschwindigkeitsunterschied Bascom / C liegt bei Bascom bei rund 80% 
der Geschwindigkeit, die ein C Programm hätte. In der Regel sind die 80% 
völlig ausreichend; notfalls kann man bei zeitkritischen Routinen ein 
paar Assembler-Routinen mit einbauen.

Aber C hat natürlich auch einen großen Vorteil:
Ich kann es jederzeit auf ein anderes System portieren, da es C Compiler 
überall gibt. Andere Controller bedingen bei einer Portierung aber oft 
größere Eingriffe in das Programm, so dass durchaus nochmal 50% der 
Originalprogrammierzeit notwendig sein können.

Wenn Du das beruflich machen willst, würde ich Dir raten C zu lernen. 
Wenn es eher privat ist, bist Du mit Bascom auch gut bedient, denn Du 
hast schneller Erfolgserlebnisse und du kannst dann später immer noch C 
hinzulernen.

Andy

von hmm (Gast)


Lesenswert?

Bascom: Diskussionsunwürdig.

von Sunny (Gast)


Lesenswert?

JAL ist am besten für anfänger weil kostenlos und einfach zu erlernen 
und zu verstehen.

http://www.casadeyork.com/jalv2/

von Marwin (Gast)


Lesenswert?

Andy schrieb:
> Eigentlich ist hier alles gesagt.

Eigentlich war im letzten Thread schon Alles gesagt. Und der wurde hier 
auch verlinkt.

von Thomas E. (thomase)


Lesenswert?

Sunny schrieb:
> JAL ist am besten
Genau.
Das hat sich voll durchgesetzt und wird mittlerweile von 99% aller 
Programmierer verwendet. Bis die nächste supereinfache, 
selbstverständliche und sich dem Prgrammierer selbst beibringende 
Sprache kommt.

mfg.

von Sven B. (scummos)


Lesenswert?

Thomas Eckmann schrieb:
> Sunny schrieb:
>> JAL ist am besten
Na, also das ist doch nun offensichtlich ein Troll gewesen *g

von F. F. (foldi)


Lesenswert?

Axel und Fabian,

vielen Dank für eure deutlichen Worte und sachlichen (und fundierten 
dazu)Argumente.

Wenn ich nun den C++ Wälzer (mit seinen 1000 Seiten) zur Seite lege und 
nun mit C anfangen möchte. Und ich rede hier ausschließlich von C für 
AVR Mikrocontroller, welches Buch, welche Bücher würdet ihr mir 
empfehlen?

Lieber Andy,

sehr nett mir den Verweis auf Bascom zu geben, aber dann würde ich 
Arduino weiter machen.
Mir geht es ja auch gerade darum, die Bibliotheken lesen und verstehen 
zu können.
Ein Beispiel:
Ich wollte den DS18B20 mit Arduino testen (gelang mir auch), aber schon 
das ändern der vorgegebenen Namen war ein Problem. Zum einen, weil das 
nicht so klappte wie ich das dachte und zum verstand ich nichts aus der 
Bibliothek. Genau deshalb sollte es C sein. Und ich dachte (vielleicht 
naiv), wenn da doch schon C mit eingebaut ist, dann lern ich doch zwei 
auf einmal.

Es gibt auch keine Geringschätzigkeit Assembler gegenüber. Ganz im 
Gegenteil, finde ich sogar richtig gut (liegt mir wahrscheinlich sogar 
mehr als alles andere).

von Prinz Prozac (Gast)


Lesenswert?

Hallo Reinald.

> Hallo,
> ich habe mir in letzter Zeit immer häufiger die Frage gestellt, in
> welcher Sprache ich meine µC programmieren sollte...

Ich werfe mal als Alternative zu beiden freeRTOS und PEARL in die 
Diskussion, und bin gespannt, was passiert. ;O)

> und frage mich nun welche Sprache wohl "leichter", übersichtlicher und
> zukunftsorientierter wäre.

"Leicht" und "Übersichtlich" ist auch eine Geschmacksfrage. Nicht 
umsonst gibt es Leute, die Windows, und andere, die Linux bevorzugen.

> Natürlich wäre es auch wichtig, dass man geeigneten Support im Inet dazu
> findet. :-/

Die beste Doku findet man meist über offene Systeme, ist aber manchmal 
auch etwas sperrig. Für den "Einstig" sind kommerzielle Systeme darum 
manchmal leichter, weil die Firmen viel tun, bis die Leute einmal 
angefixt sind.....

> Auf eure Meinungen freu ich mich schon sehr.

Auf meine Meinung solltest Du nicht wirklich was geben, weil ich ein 
Spinner bin. Denk aber trozdem drüber nach, vieleicht ist Deine wahre 
Bestimmung auch, ein Spinner zu sein. ;O)

von Sunny (Gast)


Lesenswert?

Wenn du Bascom nicht verstehst, dann wirst du C auch nicht verstehen.C 
ist noch viel schwieriger und unübersichtlicher als Bascom.In C 
programieren nur Freaks die alles auf dem schwieriegsten weg machen 
wollen oder die jenigen die glauben dass C irgendwie besonders ist, aber 
es ist genauso eine Sprache wie jede andere.In einigen Fällen ist sie 
besser und in anderen schlechter.

von Caster (Gast)


Lesenswert?

Sunny schrieb:
> Wenn du Bascom nicht verstehst, dann wirst du C auch nicht verstehen.C
> ist noch viel schwieriger und unübersichtlicher als Bascom.

So ein Quatsch! Umgekeht wird ein Schuh draus.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Sunny schrieb:
> Wenn du Bascom nicht verstehst, dann wirst du C auch nicht verstehen.C
> ist noch viel schwieriger und unübersichtlicher als Bascom.In C
> programieren nur Freaks die alles auf dem schwieriegsten weg machen
> wollen oder die jenigen die glauben dass C irgendwie besonders ist, aber
> es ist genauso eine Sprache wie jede andere.In einigen Fällen ist sie
> besser und in anderen schlechter.

C ist erheblich einfacher wie Basic - klarer und nicht Wischiwaschi.

von Caster (Gast)


Lesenswert?

hmm schrieb:
> Bascom: Diskussionsunwürdig.

Falsch! Auch Mist ist zu etwas nütze.

von KickBag (Gast)


Lesenswert?

leinad R. schrieb:
> ich habe mir in letzter Zeit immer häufiger die Frage gestellt, in
> welcher Sprache ich meine µC programmieren sollte...

Wenn du dich immer häufiger fragst, dann frage ich mich, wie lange das 
Teil nun schon rumliegt.

Fang halt endlich mal an. Tritt in den Hintern!

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.