Hallo Forum,
ich muss Mikrokontroller in c++ programmieren, hab aber einige male
mitbekommen, dass es dort auch einige Stolpersteine gibt auf die man
achten muss.
Um die Anfängerfehler möglichst zu vermeiden frage ich hier nach Tipps.
Was muss man bei c++ berücksichtigen wenn man Mikrokontroller
programmiert und/oder gibt es zu diesem Thema irgendwo Literatur?
Deinen Fisch kannst gern behalten.
Ihr habt mich anscheinend falsch verstanden.
Ich bin kein Anfänger was das Mikrokontroller programmieren angeht.
Ich kenne C++ nicht nur nicht so gut.
Ich hab einige male mitbekommen, dass man in c++ nicht so eine gute
Ressourcenverwaltung hat wie in C. Oder, dass die Bibliotheken zb zu
groß sind.
Bevor ich einfach drauf los programmiere und mich dann frage wieso mein
Code auf einmal so langsam ist oder so groß. Wollte ich mich nach
Typischen Anfängerfehlern erkundigen.
Das mit dem Fisch verstehe ich jetzt auch nicht?
Alex schrieb:> Ich kenne C++ nicht nur nicht so gut.
Wie ist diese Aussage zu werten?
Sich gleichzeitig in µC, Elektronik und C (C++) einzuarbeiten ist eher
suboptimal.
Im Allgemeinen haben µCs (8 und zum Teil 16 Bit, auf die 32 Bit trifft
das nicht mehr zu) beschränkte Ressourcen vor allem nicht so viel Ram.
Aus dem Grund macht es wenig Sinn dynamische Speicherverwaltung zu
benutzen.
Auf diesen Systemen wird man eher klassisches C und keine
objektorientierten Erweiterungen nutzen.
Der Link oben und die Artikel hier im Forum Artikelübersicht:
http://www.mikrocontroller.net/articles/Hauptseite sollten dir
weiterhelfen.
Wenn du erst mal C lernen willstz macht es mehr Sinn das auf einem PC zu
tun.
Dort hast du deutlich bessere Debug-Möglichkeiten.
Alex schrieb:> Bevor ich einfach drauf los programmiere und mich dann frage wieso mein> Code auf einmal so langsam ist oder so groß.
Wird er nicht sein.
Wenn du die Möglichkeiten von C++ sinnvoll und massvoll einsetzt, dann
passiert dir genau gar nichts.
Halte dich einfach an denselben Satz Daumenregeln, den du auch in C
benutzt hast, und dir wird nicht viel passieren.
Dynamische Speicherverwaltung, die man in C vermeidet, wird ja nicht
deswegen besser oder schlechter, weil die Funktionalität jetzt 'new'
heißt anstelle von 'malloc'.
> Ich hab einige male mitbekommen, dass man in c++ nicht so eine> gute Ressourcenverwaltung hat wie in C.
Was immer das auch sein soll 'Resourceverwaltung'. Es ist großer Unsinn.
Mach auf einem AVR einen Bogen um alles was nach dynamischer
Speicherverwaltung stinkt (wie zb die Containerklassen aus der STL) und
du hast ein C++ Subset, dass immer noch sinnvoll und nützlich eingesetzt
werden kann.
Oh man... lest doch bitte erst bevor Ihr antwortet...
Udo Schmitt schrieb:> Sich gleichzeitig in µC, Elektronik und C (C++) einzuarbeiten ist eher> suboptimal.Udo Schmitt schrieb:> Wenn du erst mal C lernen willstz macht es mehr Sinn das auf einem PC zu> tun.Alex schrieb:> Ich bin kein Anfänger was das Mikrokontroller programmieren angeht.
Er will sich nicht in µCs einarbeiten und auch kein C lernen.
Er muss nur jetzt C++ statt C einsetzen.
1. C++ ist multiparadigmatisch. C++ benutzen heißt noch nicht zwingend
OO zu programmieren.
2. Im Endeffekt gilt ähnliches wie für C... Dynamische
Speicherverwaltung ist z.B. böse.
Wie man bei C auf "malloc" verzichten sollte solltest du bei C++ nicht
mit "new"s um dich werfen.
Es gibt Funktionen die man problemlos nutzen kann, weil der Overhead im
späteren Betrieb minimal ist und welche die man vermeiden sollte.
Siehe z.B. hier:
http://blog.brush.co.nz/2011/01/cpp-embedded/
PS:
Merke: Das Editorfenster 15 Minuten lang offen lassen und andere Sachen
machen - blöd :D
Da war KH natürlich deutlich schnelelr :D
Grundsätzlich hält sich übrigens C++ sehr strikt an den Leitsatz:
"You don't pay for what you don't need". Ein C++ Programm ist also per
se nicht grösser als ein C Programm, nur weil es mit einem C++ Compiler
compiliert wurde. Einzige Ausnahme (m.W.): Exception Handling. Das musst
(und kannst) Du im GCC explizit ausschalten, um keinen Overhead zu
bekommen.
Klar, dass ein C-Programm, wenn es von einem C++ Compiler compiliert
wurde, nicht grösser wird, kann man noch nachvollziehen. Aber das geht
wirklich sehr weit: Du kannst objektbasiert arbeiten, Klassen
definieren, Objekte instanziieren etcetc, und Du wirst feststellen, dass
so ein Objekt genau gleich gross ist wie die Struktur, die Du im C auch
hättest anlegen müssen, um die Daten zu verwalten. Sobald Du virtuelle
Methoden hast, werden die Objekte um genau so viel grösser, wie sie eben
grösser werden müssen. Wenn Du also so was ähnliches in C machen willst,
brauchst Du wiederum genau gleich viel Speicher.
--> Der Overhead von C++ gegenüber C ist nicht nur gering, sondern nicht
existent. Nur bietet es Dir Dinge einfach an, die dann halt etwas
kosten, und die Du in C auch machen könntest, allerdings komplizierter,
und die in C schlussendlich wieder genau gleich viel Ressourcen
benötigen wie die bequeme Variante in C++.
Gruäss
Simon
Alex schrieb:> Ich bin kein Anfänger was das Mikrokontroller programmieren angeht.
Dann solltest du wissen, wie man die Suchfunktion benutzt. Die Qualitaet
der Antworten wird nicht besser, wenn die gleiche Frage zum 100ten Mal
gestellt wird.
Simon Huwyler schrieb:> --> Der Overhead von C++ gegenüber C ist nicht nur gering, sondern nicht> existent. Nur bietet es Dir Dinge einfach an, die dann halt etwas> kosten, und die Du in C auch machen könntest, allerdings komplizierter,> und die in C schlussendlich wieder genau gleich viel Ressourcen> benötigen wie die bequeme Variante in C++.
Genau das ist der springende Punkt, der so gerne übersehen wird, wenn C
mit C++ verglichen wird. Und oft artet das dann in den berühmten Äpfel
mit Birnen Vergleich aus.
Alex schrieb:> ich muss Mikrokontroller in c++ programmieren
Müssen müssen muß man in den seltesten Fälle...
Alex schrieb:> Ich bin kein Anfänger was das Mikrokontroller programmieren angeht.
Solange du uns die Anwort auf die alles entscheidende Frage vorenthälst,
welchen Mikrokontroller du denn nun programieren willst, bist du
"blutiger Anfänger". Jeder andere hätte das als allererstes erwähnt,
oder die Frage gleich gar nicht gestellt. Es soll gerüchteweise am Markt
mehr als nur ein Mikrocontrollermodell geben.
Und vernünftige Antworten gibt es so auch nicht.
Oliver
Ob Du nun gekapselt programmierst und damit einfache Erweiterbarkeit
durch Vererbung und einfaches überschreiben von Funktionen hast oder
strukturiert programmierst und Dich dann selbst um Neudeklarationen und
Konsistenz zu kümmern bleibt sich gleich.
Es macht mehr Sinn mit OO anzufangen und dann gegebenfalls auf
prozedurale Sprachen "abzusteigen" als umgekehrt.
Wenn wir mehr über das eigentliche Problem und den verwendeten
Controller wüßten wäre das hilfreich.
Oliver schrieb:> Solange du uns die Anwort auf die alles entscheidende Frage vorenthälst,> welchen Mikrokontroller du denn nun programieren willst
Inwiefern ist diese Frage "alles entscheidend", wenn es um C++ geht?
Sie entscheidet rein gar nichts. Man kann in C++ Blödsinn für einen
ATtiny24 genauso gut oder genauso wenig wie für einen ARM9
programmieren.