Forum: Mikrocontroller und Digitale Elektronik Hardware-Umstieg: EIN AS-Projekt auf xmega & atmega


von Nick Nack (Gast)


Lesenswert?

Hallo zusammen

ich habe ein Projekt das auf zwei verschiedenen Hardware-Versionen 
laufen soll...eine Version mit Xmega256A3 und eine mit Atmega1284.

Vieles muss ich natürlich dafür mit "#if" "else" ... etc. anpassen aber 
nun zur Hauptfrage:
Wie kann ich im Atmel Studio 6 den Prozessortyp per define umstellen und 
compilier-fähig bekommen?

Kennt ihr gute Tutorials die mir die Einarbeitung in die 
Xmega-Hardware(bereits vorhanden) erleichtern?

Vielen Dank im Voraus
NickNack

von Peter D. (peda)


Lesenswert?

Nick Nack schrieb:
> Vieles muss ich natürlich dafür mit "#if" "else" ... etc. anpassen

Wirklich so viel?
Ich würde alle Hardwarezugriffe kapseln und dann nur vom Hauptprogramm 
aufrufen.

Schau Dir mal die erzeugten Symbole an, da muß eins das Target 
definieren.
Das kannst Du für das #if benutzen.

von Timmo H. (masterfx)


Lesenswert?

Das kannst du mit _AVR_Device_ bestimmen. Der Teil "Device" ist 
abhängig vom "-mmcu=" welches durch AVR-Studio gesetzt wird
1
Setting -mmcu=device defines this built-in macro which reflects the device's
2
name. For example, -mmcu=atmega8 defines the built-in macro __AVR_ATmega8__,
3
-mmcu=attiny261a defines __AVR_ATtiny261A__, etc.

Du kannst im Code also sowas machen wie
1
#if __AVR_ATmega8__
2
  DDRB = 0x0F;
3
#elif defined (__AVR_ATXmega32A4__)
4
  PORTB.DDR = 0x0F;
5
#endif
Es gibt sonst auch noch _AVR_ARCH_, _AVR_XMEGA_ etc zum 
Unterscheiden

: Bearbeitet durch User
von Nick Nack (Gast)


Lesenswert?

Wie kann ich "mmcu" nun per define setzen?

von Timmo H. (masterfx)


Lesenswert?

Per define nicht. Mmcu gehört zum Compiler aufruf. Das setzt also  Armel 
Studio für dich anhand des eingestellten uC's

von Nick Nack (Gast)


Lesenswert?

Timmo H. schrieb:
> Setting -mmcu=device defines this built-in macro which reflects the
> device's
> name. For example, -mmcu=atmega8 defines the built-in macro
> _AVR_ATmega8_,
> -mmcu=attiny261a defines _AVR_ATtiny261A_, etc.

Wo steht welches macro für den "ATXmega256A3U" und für den "Atmega1284P" 
definiert werden?

Folgendes funktioniert leider nicht:
#if _AVR_ATXmega256A3U_
setSysClockTo32MHz();
#endif

von Timmo H. (masterfx)


Lesenswert?

das "X" muss klein (sorry mein Fehler) und ein doppeltes Underline am 
Ende und Anfang (Forum Syntax hat es weggehauen)
Also
1
#if __AVR_ATxmega256A3U__
Steht auch in der avr/io.h

: Bearbeitet durch User
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.