-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: AVR Studio 5 und C++

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656

    AVR Studio 5 und C++

    Anzeige

    Hallo Forum,

    ich habe ein paar Fragen:
    hat es eigentlich von euch schon jemand hinbekommen mit dem AVR Studio 5 C++ Quelltext zu kompilieren? Standardmäßig wird ja der normale avr-gcc Compiler verwendet. Lässt sich das einfach auf den avr-c++ Compiler umstellen oder brauche ich ein externes Makefile? Ich habe keine Einstellung gefunden, mit der der Compiler umgestellt werden kann, Makefiles habe ich jedoch noch nie selbst geschrieben, sondern immer generieren lassen.
    Macht es überhaupt Sinn, für die AVRs in C++ zu programmieren oder ist der C++ Compiler noch nicht so ausgereift? Es wäre eben schön, wenn ich AVRs auch objektorientiert programmieren könnte. Ich möchte aber keinen übermäßig großen Flashverbrauch oder Laufzeitfehler, da der Compiler manche Strukturen nicht anwenden kann.
    Gibt es zwischen den ATMega und den neuen ATxMega Controllern programmier- und hardwaretechnisch große Unterschiede oder haben die xMegas nur mehr Features, Register, 16-Bit Architektur,...?

    Grüße
    BurningWave
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Hi,
    grundsätzlich kann man im AVR-Studio auch C++ kompilieren. Der avr-c++-Compiler wird automatisch angeschmissen, wenn eine Datei mit cpp-Endung im Projekt ist.
    Allerdings sind einige C++-spezifische Sachen nicht implementiert, wie z.B. die Operatoren new und delete.
    Mehr dazu findest Du im avr-libc-user-manual unter Kapitel 11.7 auf Seite 66.
    Bis jetzt habe ich noch nie einen AVE in C++ programmiert - ob es Sinn macht, kann ich Dir daher nicht sagen.

    Zu den XMegas:
    Programmiertechnisch sind die Register bei den XMegas etwas anders aufgebaut, sie werden ähnlich wie ein Struct angesprochen. Bei den Port-Registern gibt es da z.B. PORTC.OUT oder PORTC.DIR. Man gewöhnt sich aber schnell dran und der Editor vom Studio 5 hilft einem da ja auch weiter.
    Hardwaremässig gibt es viele neue Sachen, wie z.B. das Event-System. Da habe ich aber auch noch nicht mit gearbeitet. Der größte Unterschied ist mir bisher beim ADC aufgefallen, der ist etwas komplizierter geworden.
    Die XMegas haben übrigens weiterhin eine 8-Bit Struktur.

    Ach ja, noch ein wichtiger Unterschied: Die XMegas laufen nur noch mit max. 3,3V.

    Gruß,
    askazo
    Geändert von askazo (15.06.2011 um 21:59 Uhr)
    - Das Leben ist zu kurz, um in C zu programmieren -

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Ich habe ein kurzes Testprojekt mit einer .cpp-Datei erstellt, aber der Compiler will sie nicht annehmen, AVR Studio benutzt trotzdem den avr-gcc, der sich darauf beschwert, dass er main() nicht findet. Kompilieren mit -x c++ hilft auch nicht weiter...
    Sorry, aber wo findest du im avr-libc-user-manual das Kaiptel 11.7. Alle Manuals, die ich mit Google gefunden habe, enthalten maximal Kapitel 9? ^^

    Die XMegas klingen auf jeden Fall interessant. Das mit den Registern als Strukturen finde ich sehr praktisch. Das einzige Problem ist, dass ich noch nie wirklich SMD gelötet habe und wohl dazu erst mal eine Platine ätzen müsste oder gibt es Adapterplatinen bzw. µCs im normalen DIP-Gehäuse?
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Hm, ich habe jetzt mal ein kleines c++-Projekt angelegt, aber so wirklich weiter komme ich auch nicht. Ich bekomme erst mal eine Warnung aus der io.h, dass der device type nicht definiert wäre, und dann noch folgenden Fehler:
    Error 2 AVR architecture of input file `main.o' is incompatible with avr:51 output
    Wenn man ein bißchen im Web stöbert, findet man allerdings in der Tat User, die schon C++ Code im Studio 5 erfolgreich kompiliert haben.
    Das libc-Use-manual findest Du übrigens unter C:\Programme\Atmel\AVR Studio 5.0\AVR Toolchain\doc\avr-libc oder im Web unter http://www.nongnu.org/avr-libc/

    Seltsam finde ich allerdings, dass er bei Dir nicht mal den avr-g++ aufruft. Hast Du in einem bestehenden C-Projekt nur die Dateiendung geändert? Dann musst Du auf jeden Fall noch mal ein Clean laufen lassen.

    Im DIP-Gehäuse gibt es die XMegas nicht. Aber bei Reichelt gibt es Adapterplatinen - sind nur recht teuer...
    Ohne SMD-Löterfahrung ist ein QFP mit 0,5mm Pitch allerdings schon eine Herausforderung.

    Gruß,
    askazo
    - Das Leben ist zu kurz, um in C zu programmieren -

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Seltsam, ich habe ein neues AVR-GCC Executable Project erstellt, die Dateierweiterung, der vom AVR Studio erstellten Quelldatei, geändert, die Projektmappe bereinigt und kompiliert. Es wird der avr-gcc aufgerufen, der meldet: "undefined reference to 'main'". Das Syntaxhighlighting wird auch deaktiviert, sobald ich die Dateierweiterung geändert habe. Ich vermute mal, dass ich irgendwas beim Erstellen des Projekts falsch mache. Ich habe aber nur AVR Assembler und AVR-GCC Projekte zur Auswahl, keine AVR-C++ Projektvorlage.

    In der Tat, das zu löten wird schwer, aber machbar ist es, denke ich. Kann ich die XMegas ganz normal über ISP flashen?
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Ich habe jetzt mal genau Deinen Weg genommen, also neues Projekt (AVR-GCC Executable) erstellt, Dateiendung in cpp geändert (Inhalt der Datei nicht verändert) und kompiliert. Es wird definitiv der c++ Compiler aufgerufen.
    Hast Du die aktuellste Version vom Studio drauf (5.0.1163)? Vielleicht ist's noch ein Bug in der Beta-Version, wenn Du die noch benutzt.

    Machbar ist das. Kleiner Tipp: mit ein bißchen Flußmittelgel bekommt man Brücken zwischen den Pins sehr leicht wieder weg.
    ISP wird vom XMega allerdings nicht mehr unterstützt. Geht nur noch mit JTAG oder der neuen PDI-Schnittstelle. Mit Selbstbau-Programmern ist da leider nichts mehr zu machen.
    - Das Leben ist zu kurz, um in C zu programmieren -

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    So ich habe ein Update gemacht und es funktioniert jetzt tatsächlich soweit. Jedoch bekomme ich bei folgendem Beispielcode:
    Code:
    #include <avr/io.h>
     
    class test
    {
    public:
     test() {xyz = false; PORTB = 0x00;}
     ~test() {PORTB = 0x00;}
     bool SetOutput(bool x)
     {
      if(x)
       PORTB = 0xFF;
      else
       PORTB = 0x00;
     
      xyz = x;
      return x;
     }   
     
    private:
     bool xyz;
    };
     
     
    int main(void)
    {
     test x;
     x.SetOutput(true);
     
     while(1);
     
     return 0;
    }
    folgende Fehler:
    Warnung 1 #warning "device type not defined" c:\program files (x86)\atmel\avr studio 5.0\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include/avr/io.h 446 6 CPP_Test
    Fehler 2 'PORTB' was not declared in this scope D:\Eigene Programme und Dateien\ATMEL\Eigene Projekte\Test\CPP_Test\CPP_Test\CPP_Test.cpp 6 23 CPP_Test
    Fehler 3 'PORTB' was not declared in this scope D:\Eigene Programme und Dateien\ATMEL\Eigene Projekte\Test\CPP_Test\CPP_Test\CPP_Test.cpp 7 11 CPP_Test
    Fehler 4 'PORTB' was not declared in this scope D:\Eigene Programme und Dateien\ATMEL\Eigene Projekte\Test\CPP_Test\CPP_Test\CPP_Test.cpp 11 4 CPP_Test
    Fehler 5 'PORTB' was not declared in this scope D:\Eigene Programme und Dateien\ATMEL\Eigene Projekte\Test\CPP_Test\CPP_Test\CPP_Test.cpp 13 4 CPP_Test
    Hat jemand eine Idee, woran das liegt?

    Braucht man, um die XMegas zu programmieren, unbedingt einen relativ teuren Programmer von ATMEL (z.B. JTAGICE) oder geht das auch mit einem günstigeren? Kennt jemand einen funktionierenden, der nicht so teuer ist?
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Seltsamerweise scheint der c++-Compiler den eingestellten Controller nicht zu erkennen und kann daher nicht die passende io.h einbinden.
    Das kannst Du aber manuell machen, indem Du vor dem #include ein #define __Controllername__ einfügst, also z.B. #define __AVR_ATmega128__

    Das günstigste Tool, was mir spontan einfällt, ist der AVR Dragon. Kostet zwar immer noch über 60€, kann dafür aber auch InSystem debuggen.
    - Das Leben ist zu kurz, um in C zu programmieren -

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    OK danke, hat funktioniert.

    Der AVR Dragon scheint wohl eine Überlegung wert zu sein. Aber ich muss mich mit den XMegas generell noch ein bisschen beschäftigen. ATMEL bringt ja ständig neue µCs auf den Markt und der Programmer sollte schon insofern zukunfsorientiert sein, dass sich auch die neuesten Generationen flashen lassen.
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Ich denke schon, dass der Dragon recht zukunftssicher ist.
    Er unterstützt JTAG, PDI, SPI, aWire und sogar High Voltage Programming.
    Ich glaube nicht, dass Atmel da in Zukunft noch eine weitere Schnittstelle einführt.
    - Das Leben ist zu kurz, um in C zu programmieren -

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. AVR Studio 5
    Von Achim S. im Forum C - Programmierung (GCC u.a.)
    Antworten: 22
    Letzter Beitrag: 02.08.2011, 23:04
  2. AVR Studio 5
    Von lokirobotics im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 24.03.2011, 18:26
  3. AVR STudio
    Von flo315 im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 10.09.2007, 22:07
  4. AVR Studio
    Von Reeper im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 01.05.2006, 21:05
  5. AVR Studio
    Von anabolik im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 27.11.2005, 11:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •