Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller in c++ Programmieren


von Alex (Gast)


Lesenswert?

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?

von Basti M. (counterfeiter)


Lesenswert?

Hier dein Fisch: ><((((º>

Jetzt kannst du gern mal auf diesem Forum suchen, da gibts schon ne 
Tonne an Beiträgen, Trolls und Fischen...

von Düsendieb (Gast)


Lesenswert?

als erstes mal auf diesen Link klicken:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
und lesen

von Alex (Gast)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Dominik S. (dasd)


Lesenswert?

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

von Simon H. (simi)


Lesenswert?

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

von Marwin (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ralf G. (ralg)


Lesenswert?

Marwin schrieb:
> wenn die gleiche Frage zum 100ten Mal  gestellt wird.

da fehlt eine '0'.

von Oliver (Gast)


Lesenswert?

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

von cppler (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

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.