Forum: Mikrocontroller und Digitale Elektronik AVR: C / C++


von Jürgen Mayer (Gast)


Lesenswert?

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]

von Alexander _. (bastlwastl)


Lesenswert?

Les dir mal diesen Link durch:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Dass dürfte dir weiterhelfen.

von Jürgen Mayer (Gast)


Lesenswert?

hallo,

danke - das werde ich mir dann als nächstes vorknöpfen

Jürgen

von AntonWert (Gast)


Lesenswert?

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)

von Rolf Magnus (Gast)


Lesenswert?

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.

von Theo (Gast)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Overhead gibt es, wenn virtuelle Funktionen verwendet werden, weil dann
die vtable "mitgeschleppt" werden muss.

von Rolf Magnus (Gast)


Lesenswert?

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.

von Ulli (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

@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 ...

von Rolf Magnus (Gast)


Lesenswert?

> @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.

von Unbekannter (Gast)


Lesenswert?

Keine virtuellen Methoden und Exceptions ausschalten bringt einiges.
Dann ist aus dem C++ allerdings nur noch ein komfortableres C
geworden...

von Georg (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.