mikrocontroller.net

Forum: Compiler & IDEs WinAVR und klassen im C++ Code


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

weiß jemand ob man auch irgendwie die ATMELS mit WinAVR mit Klassen
Programieren kann. Oder ist das soweit ich das verstanden habe reiner C
Code

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C++ kann man verwenden, allerdings nur zum Teil.

Es gab hier schonmal eine Diskussion über das Thema, ich finde sie nur
leider gerade nicht. :/


Kurzzusammenfassung:
- Klassen funktionieren.
- new/delete funktionieren, wenn man sie selbst auf malloc/free
weiterleitet.
- Vererbung funktioniert (Mehrfachvererbung und virtuelle Basisklasse
hab ich nicht getestet).
- Virtuelle Methoden funktionieren (großer Pluspunkt).
- Rein virtuelle Methoden funktionieren (fehlt nur ein Symbol, die
Fehlermeldung sagt welches).
- Templates funktionieren (soweit ich weiß).
- Konstruktion von globalen bzw. statischen C++-Objekten funktioniert
(soweit ich weiß, bin mir in dem Punkt gerade nicht sicher).
- Methodenzeiger müssten eigentlich funktionieren, habs aber nicht
getestet.

- Referenzen funktionieren leider nicht so gut (der Compiler hat da
AFAIK Probleme mit dem alignment), führen noch oft zu
Compiler-Fehlern.
- STL funktioniert praktisch nicht (kannst es mit STLport ausprobieren,
z.T. funktioniert's).




Fakt ist, dass es noch keine avr-libc++ gibt. Die ganzen
C++-Standardfunktionen hast du also nicht zur Verfügung. Es gibt zum
Beispiel kein <cstdlib>, nur die C-Version <stdlib.h>.

Ich würde dir raten STLport[1] zu installieren und es damit zu
versuchen (ich kann aber nicht garantieren, dass der Rat sinnvoll ist).
STLport kannst du ziemlich fein anpassen, sodass einige Teile mit
avr-gcc zusammenspielen sollten.


HTH, Chris


[1] http://www.stlport.org/download.html

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Wenn du nur objekt-orientiert programmieren willst, aber ohne
STL, brauchst du STLport natürlich nicht installieren.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe folgenden Code mit WinAVR probiert

class Test
{
public:
void methode(){
.....
}
private:
};

der Compiler konnte aber damit nichts anfangen. Im Visual Studio geht
das einwandfrei.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Dateiname? Der GCC erkennt anhand des Suffix um welche Sprache es sich
handelt. Bei *.c nimmt er den C-Compiler und der kann bekantlich mit
C++ Klassen nichts anfangen. Verwende deshalb *.C, *.cc, *.cpp, *.c++,
*.cp oder *.cxx oder gib die Sprache mit -x direkt an.

Matthias

Autor: MSE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens:

Mein WinAvr kann!

Gruß, Michael

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen dank es funktioniert!!!

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.