AVR: C / C++

Gast #234085
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]
Gast #234088
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)
Gast #234089
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.
Gast #234090
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.
Gast #234091
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.
Gast #234093
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.
Gast #234094
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
Persönliche Seite #234095
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 ...
Gast #234096
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.