PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR Studio 5 und C++



BurningWave
15.06.2011, 20:56
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

askazo
15.06.2011, 21:51
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

BurningWave
15.06.2011, 22:38
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?

askazo
16.06.2011, 09:09
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 outputWenn 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 (http://www.reichelt.de/?ARTICLE=50252;PROVID=1024) - sind nur recht teuer...
Ohne SMD-Löterfahrung ist ein QFP mit 0,5mm Pitch allerdings schon eine Herausforderung.

Gruß,
askazo

BurningWave
16.06.2011, 11:42
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?

askazo
16.06.2011, 12:13
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 (http://www.reichelt.de/?ARTICLE=32673;PROVID=1024) 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.

BurningWave
16.06.2011, 15:01
So ich habe ein Update gemacht und es funktioniert jetzt tatsächlich soweit. Jedoch bekomme ich bei folgendem Beispielcode:


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

askazo
16.06.2011, 16:38
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 (http://www.reichelt.de/?ARTICLE=97200;PROVID=1024). Kostet zwar immer noch über 60€, kann dafür aber auch InSystem debuggen.

BurningWave
16.06.2011, 17:14
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.

askazo
16.06.2011, 17:35
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.

rocky_j
20.06.2011, 13:31
Hi,

du kannst auch den AVR ISP MKII nehmen, der kann ISP und PDI und wird über USB angeschlossen, kostet ~40€ glaube ich.

mfg

rocky_j

om-design
05.07.2011, 11:19
AVR XMEGA-Eval-Board für 29 US-Dollar

Erscheinungsdatum: 3 November 2009 (Elektor)
http://www.elektor.de/elektronik-news/avr-xmega-eval-board-fur-29-us-dollar.1139223.lynkx

Atmel hat ein sehr günstiges Eval-Board für den leistungsfähigen AVR XMEGA-Controller vorgestellt.
Das über USB versorgte "Xplain"-Board soll für 29 US-$ zu haben sein (unverbindliche Preisempfehlung).
Basis ist ein ATxmega128A1 mit 128 KB (In-System-Programmable) Flash. 8 KB stehen für einen Bootloader zur Verfügung,
diese können allerdings auch als zusätzlicher Programmspeicher genutzt werden.
Der ATxmega128A1 ist mit allem ausgestattet, was die neue XMEGA-Familie reizvoll macht:
Ein DMA-Controller, 12-bit-ADC und -DAC, AES- und DES-Verschlüsselung sowie verschiedene Stromsparmodi sind nur einige der Beispiele.


Auf dem Board sind ein Audioverstärker samt Lautsprecher, ein Poti, ein Temperatursensor,
8 MB SDRAM und 8 MB Data Flash, 8 Buttons und 8 LEDs vorhanden.
Diverse Controllerpins sind auf Stiftleisten nach außen geführt,
so dass man die digitalen und analogen Ein- und Ausgänge sowie
diverse Interfaces wie USART, SPI und TWI (I2C-kompatibel) austesten kann.

Der Controller enthält bereits ein Demoprogramm. Dokumentation, Schaltpläne und weitere Programmbeispiele können beim Hersteller heruntergeladen werden.
Das Board ist mit verschiedenen weiteren Hardware- und Softwaretools für AVR-Controller kompatibel (JTAGICE mkII Debugger, AVRISP mkII Programmer, AVR Studio).



Mehr Infos und Dokumentation:
www.atmel.com/xplain


JB, das kannst du selbst nie zu diesem Preis bauen!!
Ausserdem lößt das alle SMD Fertigungsprobleme.
Ich finde das wäre bestimmt ein guter Einstieg für X-serie.
http://de.farnell.com/atmel/atavrxplain/kit-eval-xplain-f-atxmega128a1/dp/1778504?Ntt=xplain (39€ plus Versand)


Aber vergiss nicht du brauchst einen JTAG Programmierer, (vorerst doch mal ein Dragon)
Vieleicht gibt es irgend mal einen JTAGICE mkii Nachbau (original kostet ca 250€)
Ich hab selber einen Chinesischen JTAGICE, über eBay in Hongkong gekauft, hat ca 60€ plus 20€ DHL gekostet.


Olli

BurningWave
05.07.2011, 16:58
Ist sicher ein gutes Board, jedoch ist es für Evaluierungszwecke gedacht. Wenn ich eine fertige Schaltung habe, dann löst das das SMD-Problem bei eigenen Schaltungen auch nicht. Außerdem geht es nicht erstrangig um den Preis, sondern um den "selbst bauen"-Faktor ;)

Was sind denn wesenliche Unterschiede zwischen dem AVR Dragon und dem JTAGICE von den Features her?

om-design
17.07.2011, 09:57
Als ich so ca. Nov.2020 auch einen Programmer für Xmega gesucht habe, bin ich auf AVR-Dragon gestoßen.
Aber aus Specs ging hervor, das man Dragon nur bis 32KB einsetzen könne (zumindest zum Debuggen).
Mein gerade fertig gewordener Prototype (3 Achsen CNC-Controller) ist mit einen Xmega256A3 bestückt. (256KB FLash ...)
AVRstudio 5 gab es da auch noch nicht.
Ich wollte aber unbedingt Debugging haben, denn ein nur so "drauflosprogrammieren & Run", kam da nicht mehr in Frage !
Hab daher in eBay den aus China gefunden.
Hat dann mit AVR Studio 4 auch funktioniert. Kleiner Firmwareupdate und ich konnte Sourcecode Debuggen.

Nur jetzt nach der Umstellung auf Studio 5 hab ich auch Probleme mit Firmwareupdate, da bin ich auf Chinesen angewiesen.
Die haben mir schon mal ein update für Studio5 geschickt, aber da gibt es auch noch massive Probleme.
Gut da war auch noch alles für Studio5 pre angesetzt.

Wie auch immer ich plane demnächst auch noch einen AVR-Dragon zu besorgen,
damit ich den Stand mit original Atmel besser beurteilen kann.
Die Firmwareupdates sind ja mit AVR Studio5 für die meisten Programmer updated worden, und im SW-Paket inbegriffen.

Was die Programmer im Detail können, ist irgendwo in den Dokus von AVR ersichtlich.

Oliver

om-design
17.07.2011, 10:29
Berichtigung zuvor 2010 nicht 2020 (nur eine Taste deneben).


In diesem Tread sollte es ja hauptsächlich um AVR Studio 5 und C++ gehen.

Ich hab mir schon vor ca 2 Jahren ein Programmierumgebung wie bei Visualstudio gewünscht.
Jetzt haben wir das, und sogar kostenlos !!!
Es ist zwar derzeit noch ein bisschen "ruggelig" aber wird schon noch werden. :)

Ein Programmieren mit "Intelisens", C++, Debugging, mehrere Stops an Haltepunkte, Variablewerte Begutachten usw.,

ist einfach ein anderes "Zeitalter" als nur Programmieren und Run.

Auf ein neues "Programmierzeitalter" für Microcontroller. ! :p


Oliver
19349