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 !
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.
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 ;).
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.
... und das alles hätte man mit wenig Suche hier auch gefunden - irgendwann hatten wir das schon mal.
Peter II schrieb: > aber leider nicht geeignet für kleine µC. Es gibt sehr viele Mikrocontroller abseits der AtTiny-Reihe.
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?
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
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
Überprüf mal ob der g++ executiert wird... eigentlich sollte gcc *.cpp durch den g++ jagen... aber wer weiß...
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.
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.
>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.
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 ;)
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.