hallo, einen AVR-Controller kann man ja wunderbar mit C programmieren. wie sieht es da mit C++ aus? - schiesst man da mit Kanonen auf Spatzen? - ist der Controller damit "überfordert"? - welche(r) C++ Compiler kann/soll man verwenden? [ich hab noch keine Erfahrungen mit AVRs - aber ein STK500 usw. ist schon im Anmarsch]
Les dir mal diesen Link durch: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Dass dürfte dir weiterhelfen.
Naja glaub das Dokument sagt diesbezüglich nich allzuviel aus - oder seh ich das nun falsch- , die Frage ist ja offensichtlich ob sich nun dinge wie Klassen verwirklichen lassen. Eigentlich habe ich diese Frage auch, kann jemand sagen ob er schon Klassen verwendet hat (erfolgreich oder nicht)
Klar lassen sich Klassen verwenden. Warum auch nicht? Sie sind im Prinzip nichts besonderes. Es werden lediglich Variablen und Fuktionen, die mit diesen operieren, auf Sprachebene gekoppelt. Was nicht funktioniert, sind Exceptions. Außerdem gibt's keine C++-Standardlib. Abgesehen davon sollte alles gehen.
Ich verwende Win-AVR (AVR-GCC). C++-Quellcode kannst Du wie gewohnt kompilieren und auf dem AVR ausfuehren. Die C++-Standardlib kostet natuerlich etwas Speicher. Außerdem kommt für jede Klasse noch etwas Overhead dazu. Dafuer hat man halt den Luxus OO zu programmieren. Zeitkritische Anwendungen habe ich damit noch nicht geloest.
> Die C++-Standardlib kostet natuerlich etwas Speicher. Da es bei avr-g++ keine gibt, ist das ja dann kein Problem :) > Außerdem kommt für jede Klasse noch etwas Overhead dazu. Hast du mal ein Beispiel? Ich hatte einen solchen Overhead bisher nicht.
Overhead gibt es, wenn virtuelle Funktionen verwendet werden, weil dann die vtable "mitgeschleppt" werden muss.
Das ist mir schon klar. Aber ich halte es für sinnlos, zu behaupten, C++ habe einen Overhead, weil ein Feature, das es in C gar nicht gibt, zusätzliche Ressourcen braucht. Wenn man in C eine entsprechende Funktionalität haben will, müßte man von Hand eine Funktionstabelle aufbauen, die dann auch nicht besser wegkommen dürfte.
Ich versuche grad mein erstes C++ Programm zum Laufen zu bringen. Leider komme ich nicht so recht mit dem makefile klar. Könntet ihr mal bitte ein allgemein gültiges Makefile für C++ posten. Vielen Dank
@Rolf: Der "Overhead" der vtable ist ja nur da, wenn virtuelle Funktionen verwendet werden; verzichtet man darauf, entfällt der "Overhead". Klassen mit nichtvirtuellen Funktionen erzeugen AFAIK gegenüber C keinen "Overhead", alles relevante wird zur Übersetzungszeit vom Compiler ausgewertet. Man kann auf µC ganz vorzüglich mit C++ arbeiten, man sollte sich nur dessen bewusst sein, was es bedeutet, bestimmte Konstrukte zu verwenden. Das ist aber bei anderen Programmiersprachen auch nicht anders. Die Möglichkeit, Klassen etc. zu verwenden, bringt einem immerhin dem heiligen Gral des "code reuse" näher ...
> @Rolf: > Der "Overhead" der vtable ist ja nur da, wenn virtuelle Funktionen > verwendet werden; verzichtet man darauf, entfällt der "Overhead". Ja, klar. Eben deshalb meinte ich ja, daß man im Bezug darauf den Reourcenverbrauch nur dann mit dem von C vergleichen kann, wenn man in C auch ein vergleichbares Feature umsetzt. Wenn ich in C++ keine virtuellen Funktionen habe, gibt's auch den Overhead nicht. Wenn ich umgekehrt in C die Funktionalität virtueller Funktionen nachbilden will, kostest das auch Ressourcen. > Klassen mit nichtvirtuellen Funktionen erzeugen AFAIK gegenüber C > keinen "Overhead", alles relevante wird zur Übersetzungszeit vom > Compiler ausgewertet. Das ist richtig. Eine Klasse mit nichtvirtuellen Funktionen ist im Prinzip nichts weiter als eine struct kombiniert mit Funktionen, die darauf zugreifen. > Man kann auf µC ganz vorzüglich mit C++ arbeiten, man sollte sich > nur dessen bewusst sein, was es bedeutet, bestimmte Konstrukte zu > verwenden. Das gilt insbesondere bei sehr knappen Ressourcen. Aber eine weise Verwendung von C++ kann in manchen Programmen zu deutlich eleganterem Code führen, der aber keinen oder nur einen sehr geringen Overhead gegenüber C hat. Dabei sind nicht nur Klassen sehr praktisch, sondern auch Templates (da bei denen viel zur Compilezeit durchgeführt werden kann), wobei es bei denen natürlich ebenfalls darauf ankommt, sie weise einzusetzen.
Keine virtuellen Methoden und Exceptions ausschalten bringt einiges. Dann ist aus dem C++ allerdings nur noch ein komfortableres C geworden...
Hier ein interessanter Vergleich zu C/C++, allerdings nicht speziell für uCs. http://www.eventhelix.com/RealtimeMantra/Object_Oriented/default.htm ciao, Georg
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.