Forum: Mikrocontroller und Digitale Elektronik AVR Studio 6 und C++ OOP


von Gerhard Biebl (Gast)


Lesenswert?

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 !

von Peter II (Gast)


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

... und das alles hätte man mit wenig Suche hier auch gefunden - 
irgendwann hatten wir das schon mal.

von Marwin (Gast)


Lesenswert?

Peter II schrieb:

> aber leider nicht geeignet für kleine µC.

Es gibt sehr viele Mikrocontroller abseits der AtTiny-Reihe.

von Peter II (Gast)


Lesenswert?

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?

von Oliver (Gast)


Lesenswert?

Gerhard Biebl schrieb:
> Vielen Dank im Voraus !

Wie immer: Fehlermeldungen zeigen, Code zeigen, dazu die Kommandozeilen 
beim Kompilieren und linken.

Ansonsten hat schon das alte Studio 4 "C++ unterstützt" - was auch immer 
das heissen mag.

Oliver

von Marwin (Gast)


Lesenswert?

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?!?

von Frank K. (fchk)


Lesenswert?

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

von Hans (Gast)


Lesenswert?

Überprüf mal ob der g++ executiert wird... eigentlich sollte gcc *.cpp 
durch den g++ jagen... aber wer weiß...

von Klaus W. (mfgkw)


Lesenswert?

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.

von Hans (Gast)


Lesenswert?

==> compiler output + source vom nicht compilieren programm bitte :)

von UnDefined (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

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

von UnDefined (Gast)


Lesenswert?

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 ;)

von Db8fs (Gast)


Lesenswert?

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

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.