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?
Hier dein Fisch: ><((((º> Jetzt kannst du gern mal auf diesem Forum suchen, da gibts schon ne Tonne an Beiträgen, Trolls und Fischen...
als erstes mal auf diesen Link klicken: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial und lesen
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.