AVR Studio 6 und C++ OOP

Gast #2677830
Hallo zusammen,

nachdem ich in der Ankündigung des AVR Studio 6 die vollmundige Aussage 
vorfand, dass dieses nun C++ Programmierung unterstütze, habe ich es mir 
heruntergeladen und ausprobiert.
Es war mir leider nicht möglich, auch nur eine einzige Mickymaus-C++ 
Klasse zu deklarieren. Es kommen die unmöglichsten Fehlermeldungen dabei 
raus, und auf Anfrage (Ticket) gab es lediglich die Antwort, dass 
"stdlib" nicht unterstützt werde (???).
Leider war auch nach mehrmaliger Anfrage überhaupt nichts zu diesem 
Thema zu erfahren, daher nun meine Frage an das Forum:
Unterstützt jetzt das AVR Studio objektorientierte Programmierung mit 
C++ oder nicht ? Und wenn ja, gibt es da irgendwelche Besonderheiten, 
die man beachten muß, wenn man Klassen deklarieren möchte ?

Dieses Problem brennt mir auf den Nägeln; ich bin für jeden Hinweis sehr 
dankbar.

Das AVR Studio basiert auf dem Visual Studio, und es wird in der 
Toolchain der gcc Compiler benutzt. Beide sind problemlos in der Lage, 
objektorientiert zu arbeiten; also verstehe ich eigentlich nicht, warum 
es da Probleme geben soll.

Und bitte: Keine Vorschläge, das doch mit C zu machen.

C++ ist die schnellste und effektivste Programmiersprache unserer Zeit, 
und objektorientierte Programme sind sicherer, besser und effektiver als 
C oder Assembler Code.

Vielen Dank im Voraus !
Gast
Gerhard Biebl schrieb:
> C++ ist die schnellste und effektivste Programmiersprache unserer Zeit,
> und objektorientierte Programme sind sicherer, besser und effektiver als
> C oder Assembler Code.

aber leider nicht geeignet für kleine µC.

Templates kannst du vergessen, diese werden auf jeden Fall nicht 
unterstützt. Auch Dynamische speicherverwaltung (new/delete) ist nicht 
sinnvoll, aber möglich.


Die könntest ja auch mal den output von deinem Build vorgang posten, 
dann erkennt man eventuell was schief geht. Bitte auch gleich den 
Quelltext du du versucht hast.
Gast
Du solltest mal ein paar mehr Informationen rausrücken. Z.B. welcher AVR 
und wie sieht die Fehlermeldung aus? Ein Codebeispiel wäre auch nicht 
schlecht.

Ansonsten kannst du ja mal hier im Forum suchen. Es gibt reichlich 
Threads über AVR-GCC und C++.

Z.B.:

Beitrag "C++ in AVR Studio verwenden-> Funktioniert nicht!"

> C++ ist die schnellste und effektivste Programmiersprache unserer Zeit,
> und objektorientierte Programme sind sicherer, besser und effektiver als
> C oder Assembler Code.

Das halte ich für ein Gerücht ;).
Gast
Gerhard Biebl schrieb:
> Es war mir leider nicht möglich, auch nur eine einzige Mickymaus-C++
> Klasse zu deklarieren. Es kommen die unmöglichsten Fehlermeldungen dabei
> raus, und auf Anfrage (Ticket) gab es lediglich die Antwort, dass
> "stdlib" nicht unterstützt werde (???).

Eigentlich heißt sie libstdc++. Es ist die GCC-Implementierung der 
C++-Standardbibliothek. Die gibt es nicht für AVR. Das wäre auch nur für 
einen recht kleinen Anteil der Bibliothek sinnvoll, denn die meisten 
Klassen setzen dynamischen Speicher im großen Stil ein, was bei so 
kleinen µCs in der Regel überhaupt nicht sinnvoll ist.

> Unterstützt jetzt das AVR Studio objektorientierte Programmierung mit
> C++ oder nicht ?

Ja, aber mit Einschränkungen. Das liegt aber am avr-g++.

> Und wenn ja, gibt es da irgendwelche Besonderheiten, die man beachten muß,
> wenn man Klassen deklarieren möchte ?

Keine Exceptions, keine Standardklassen, und soweit es geht auf 
dynamischen Speicher verzichten.

> Das AVR Studio basiert auf dem Visual Studio,

Echt?

> C++ ist die schnellste und effektivste Programmiersprache unserer Zeit,
> und objektorientierte Programme sind sicherer, besser und effektiver als
> C oder Assembler Code.

Wenn man genau weiß, was man tut und was der Compiler draus macht, kann 
man die auch auf AVRs nutzbringend einsetzen. Aber das ist 
Grundvoraussetzung, um effiziente Programm dort schreiben zu können.

Peter II schrieb:
> Templates kannst du vergessen, diese werden auf jeden Fall nicht
> unterstützt.

Unsinn. Templates funktionieren wunderbar und können auch, wenn man 
weiß, was man tut, sehr sinnvoll sein, auch auf einem AVR.

> Auch Dynamische speicherverwaltung (new/delete) ist nicht
> sinnvoll, aber möglich.

Allerdings nicht out-of-the-box. Man muß sich die Operatoren selbst 
definieren.

> Die könntest ja auch mal den output von deinem Build vorgang posten,
> dann erkennt man eventuell was schief geht. Bitte auch gleich den
> Quelltext du du versucht hast.

Das wäre auf jeden Fall sinnvoll.
Gast
Peter II schrieb:
> Marwin schrieb:

>> Es gibt sehr viele Mikrocontroller abseits der AtTiny-Reihe.
> ist ja schön, und wie viel werden davon im  AVR Studio 6 Programmiert?

Was fuer eine Frage - meinst du es gibt eine Statistik von Atmel 
darueber, welche Controller wie oft von welcher Version des AVR Studio 
programmiert werden?!?
Peter II schrieb:
> Marwin schrieb:
>> Es gibt sehr viele Mikrocontroller abseits der AtTiny-Reihe.
>
> ist ja schön, und wie viel werden davon im  AVR Studio 6 Programmiert?

Es heißt jetzt Atmel Studio und nicht mehr AVR Studio. Und wenn Du 
unbedingt C++ machen willst, ist ein ARM besser geeignet. Auch den 
kannst Du von Atmel kaufen und im Atmel Studio 6 mit dem dazu passenden 
JTAG-Interface programmieren.

fchk
ja, wenn man dem gcc (auch so aufgerufen) eine *.cpp vorwirft, wird er 
die als C++ übersetzen.
Der Unterschied ist nur, daß bei einem Aufruf als g++ auch die 
Std-C++-Libs mit gelinkt werden - was bei AVR also nichts bewirken 
sollte.
Gast
Sobald ein 'new' im Code vorkommt, gibts die meldung:

"undefined reference to 'operator new(unsigned int)'"

Hab gelesem das man sich new/delete selbst schreiben muss.
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453

Ob C++ nun schneller als C oder Asm ist, hängt davon ab was der Compiler 
drauß macht. Und ob es ein ARM, ATmega oder ATtiny ist, ist völlig 
Stulle. Wenn der Compiler mist macht, ist der ARM auch nicht besser als 
ein 68000.
Gast
>Wenn der Compiler mist macht, ist der ARM auch nicht besser als
>ein 68000.

Der Compiler macht keinen Mist, eher der Programmierer;)
Ein schlechter Assembler Programmierer erzeugt auch keinen
besseren Code als ein C Compiler. Hier werden immer wieder
Äpfel mit Birnen verglichen.
Gast
Natürlich ist es ein "zusammenspiel" von Programmierer und Compiler. 
Aber du kannst noch so gut programmieren, wenn der Compiler den Code 
nicht vernünftig umsetzten kann (einfach weil der compiler schlecht 
ist), dann helfen auch die besten Programmierkünste nichts ;)
Gast
> Ob C++ nun schneller als C oder Asm ist, hängt davon ab was der Compiler
> drauß macht. Und ob es ein ARM, ATmega oder ATtiny ist, ist völlig
> Stulle. Wenn der Compiler mist macht, ist der ARM auch nicht besser als
> ein 68000.

Ist was Wahres dran, man kann auch mit C schlechten und ineffizienten 
Code schreiben. Dennoch wird ein C Compiler fast immer besseren Code 
liefern als ein C++ Compiler. Das liegt schon alleine am reduzierten 
Sprachumfang, wodurch sehr effizient in den jeweilige ASM-Code der 
Zielarchitektur übersetzt werden kann.

Wenn man mal überlegt, was bei einer einfachen Vererbung mit einer 
Überschreibung einer Methode für Aufwand zur Verwaltung notwendig ist: 
Namemangling der Symbole, Auflösung der Vtable und die ganzen Kon- und 
Destruktoraufrufe... Und wie bereits oben erwähnt wurde: kommen 
Container bzw STL ins Spiel, kann's was den Speicherbedarf sehr eklig 
werden. Jeder, der mal STL-Container über DLL-Grenzen weg exportieren 
musste, kann ein Lied davon singen, wie unschön die STL sein kann.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.