mikrocontroller.net

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


Autor: Jürgen Mayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]

Autor: Alexander __ (bastlwastl)
Datum:

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

Autor: Jürgen Mayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

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

Jürgen

Autor: AntonWert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Theo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Unbekannter (Gast)
Datum:

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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein interessanter Vergleich zu C/C++,
allerdings nicht speziell für  uCs.

http://www.eventhelix.com/RealtimeMantra/Object_Or...

ciao,
  Georg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.