PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : code für ATmega168 compilieren



cumi
05.06.2006, 14:32
Hallo Zusammen

Ich möchte gerne Code für den ATmega168 compilieren.
Ich benutze zur Zeit:
binutils-2.15
gcc-3.42
avr-libc-1.2.3
und arbeite mit eclipse unter Linux.

Wenn ich mit "-mmcu=atmega168" compilieren möchte bringt der compiler folgendes:

unknown MCU `atmega168' specified
Known MCU names:
avr2
...

Ich benutze die Avrlibc nicht direkt. Die ist so hässlich strukturiert und konzeptionell unschön, dass ich mir die relevaten Teile auskopiert habe und die Haederfiles für die IO-Definitionen selber verwalte.

Von was brauche ich eine neue Version? Respektive von was hängt es ab, für welche Typen der avr-gcc code compilieren kann?

Vielen Dank für eure Hilfe!
cumi

cumi
07.06.2006, 17:18
Braucht den Tmega168 niemand? Es gibt doch sicher jemand, der Code unter Linux für den Tmega168 compiliert, oder?

SprinterSB
07.06.2006, 17:25
Die unterstützten Derivate u.a. bekommst du gelistet mit

avr-gcc --target-help

cumi
07.06.2006, 17:42
vielen dank sprinter.
Dort wird er nicht angezeigt.
Gibt es eine neue Version, die den atmega168 unterstüzt?
Oder gibt es ev einen anderen, für den man den code gleich compilieren kann?
Ich verwende zurzeigt die Version 3.4.2 vom avr-gcc. Diese unterstüzt folgende AVRs:

Known MCU names:
avr1 avr2 avr3 avr4 avr5 at90s1200 attiny10 attiny11 attiny12 attiny15
attiny28 at90s2313 at90s2323 at90s2333 at90s2343 attiny22 attiny26
at90s4433 at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 at86rf401
atmega603 atmega103 at43usb320 at43usb355 at76c711 atmega8 atmega83
atmega85 atmega8515 atmega8535 atmega16 atmega161 atmega162 atmega163
atmega169 atmega32 atmega323 atmega64 atmega128 at94k
no emulation specific options.

cumi

SprinterSB
07.06.2006, 17:54
Known MCU names:
avr1 avr2 avr3 avr4 avr5 at90s1200 attiny10 attiny11 attiny12 attiny15
attiny28 at90s2313 at90s2323 at90s2333 at90s2343 attiny22 attiny26
at90s4433 at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 at86rf401
attiny13 attiny2313 attiny261 attiny461 attiny861 attiny24 attiny44
attiny84 attiny25 attiny45 attiny85 atmega603 atmega103 at43usb320
at43usb355 at76c711 atmega48 atmega8 atmega83 atmega85 atmega88
atmega8515 atmega8535 at90pwm2 at90pwm3 atmega16 atmega161 atmega162
atmega163 atmega164 atmega165 atmega168 atmega169 atmega32 atmega323
atmega324 atmega325 atmega329 atmega3250 atmega3290 atmega64 atmega640
atmega644 atmega128 atmega1280 atmega1281 atmega645 atmega649 atmega6450
atmega6490 at90can32 at90can64 at90can128 at94k

Der tut's doch. Erfahrungen mit ATmega168 etc hab ich keine.

cumi
08.06.2006, 14:29
hmm, bist du sicher, dass das der 3.4.5 ist?



# avr-gcc --version
avr-gcc (GCC) 3.4.5




# avr-gcc --target-help

Target specific options:
-msize Output instruction sizes to the asm file
-mshort-calls Use rjmp/rcall (limited range) on >8K devices
-mno-tablejump Do not generate tablejump insns
-mtiny-stack Change only the low 8 bits of the stack pointer
-mcall-prologues Use subroutines for function prologue/epilogue
-mno-interrupts Change the stack pointer without disabling interrupts
-mint8 Assume int to be 8 bit integer
-mmcu= Specify the MCU name
-minit-stack= Specify the initial stack address

There are undocumented target specific options as well.
AVR options:
-mmcu=[avr-name] select microcontroller variant
[avr-name] can be:
avr1 - AT90S1200, ATtiny1x, ATtiny28
avr2 - AT90S2xxx, AT90S4xxx, AT90S8xxx, ATtiny22
avr3 - ATmega103, ATmega603
avr4 - ATmega83, ATmega85
avr5 - ATmega161, ATmega163, ATmega32, AT94K
or immediate microcontroller name.
-mall-opcodes accept all AVR opcodes, even if not supported by MCU
-mno-skip-bug disable warnings for skipping two-word instructions
(default for avr4, avr5)
-mno-wrap reject rjmp/rcall instructions with 8K wrap-around
(default for avr3, avr5)
Known MCU names:
avr1 avr2 avr3 avr4 avr5 at90s1200 attiny10 attiny11 attiny12 attiny15
attiny28 at90s2313 at90s2323 at90s2333 at90s2343 attiny22 attiny26
at90s4433 at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 at86rf401
atmega603 atmega103 at43usb320 at43usb355 at76c711 atmega8 atmega83
atmega85 atmega8515 atmega8535 atmega16 atmega161 atmega162 atmega163
atmega169 atmega32 atmega323 atmega64 atmega128 at94k
no emulation specific options.


Ich versuche mal noch einen noch neueren. Wobei den neusten kann ich nicht compilieren. Gibt es irgendwo eine Liste welche Version was kann?

linux_80
08.06.2006, 20:15
Hallo,


avr-gcc (GCC) 3.4.6
und da ist der M168 mit dabei.


Known MCU names:
avr1 avr2 avr3 avr4 avr5 at90s1200 attiny10 attiny11 attiny12 attiny15
attiny28 at90s2313 at90s2323 at90s2333 at90s2343 attiny22 attiny26
at90s4433 at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 at86rf401
attiny13 attiny2313 attiny261 attiny461 attiny861 attiny24 attiny44
attiny84 attiny25 attiny45 attiny85 atmega603 atmega103 at43usb320
at43usb355 at76c711 atmega48 atmega8 atmega83 atmega85 atmega88
atmega8515 atmega8535 at90pwm2 at90pwm3 atmega16 atmega161 atmega162
atmega163 atmega164p atmega165 atmega165p atmega168 atmega169 atmega169p
atmega32 atmega323 atmega324p atmega325 atmega329 atmega3250 atmega3290
atmega406 atmega64 atmega640 atmega644 atmega644p atmega128 atmega1280
atmega1281 atmega645 atmega649 atmega6450 atmega6490 at90can32 at90can64
at90can128 at90usb646 at90usb647 at90usb1286 at90usb1287 at94k

cumi
08.06.2006, 20:19
danke für deine Antwort!

hmm, irgendwie strub.
Naja dann compilier ich mal noch dieser versoin. oder hängt dies noch von der avrlibc (oder wie die genau heisst) ab?

cumi
08.06.2006, 20:58
so, also jetzt habe ich den 3.4.6 folgendermassen compiliert. also zuers habe ich mir die binutils gebaut:

wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.15.tar.bz2
tar -xjvf binutils-2.15.tar.bz2
cd binutils-2.15/
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls
make
make install
cd ../../
dann der gcc:

wget ftp://ftp.gnu.org/gnu/gcc/gcc-3.4.2/gcc-core-3.4.6.tar.bz2
tar -jxvf gcc-core-3.4.6.tar.bz2
cd gcc-3.4.2
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c
make
make install
cd ../../
nun die ausgabe von avr-gcc --target-help:

Known MCU names:
avr1 avr2 avr3 avr4 avr5 at90s1200 attiny10 attiny11 attiny12 attiny15
attiny28 at90s2313 at90s2323 at90s2333 at90s2343 attiny22 attiny26
at90s4433 at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 at86rf401
atmega603 atmega103 at43usb320 at43usb355 at76c711 atmega8 atmega83
atmega85 atmega8515 atmega8535 atmega16 atmega161 atmega162 atmega163
atmega169 atmega32 atmega323 atmega64 atmega128 at94k
no emulation specific options.
und die version:


avr-gcc (GCC) 3.4.6

jemand eine Idee, was ich falsch mache?

linux_80
08.06.2006, 22:16
Hallo,


The latest release of GNU binutils is 2.16.1. (http://www.gnu.org/software/binutils/)

die hab ich auch, incl. M168.

PS: weiß allerdings nicht obs an dem liegt !

Edit:
jetzt hab ich gefunden, weil binutils-2.16 auch schon ein Jahr alt ist, kam mir das doch Spanisch vor.
Also es gibt da patches für binutil und gcc, die die neuen Devices mit einbauen. Hab den richtigen Link noch nicht gefunden, im moment bin ich bis hierher gekommen:
http://savannah.nongnu.org/patch/index.php?func=detailitem&item_id=2923#attached

cumi
09.06.2006, 11:28
jupi, jetzt funktioniert.
Es lag an den binutils. Ich habe jetzt die Version 2.16.1 compiliert und der avr-gcc 4.0.0 und jetzt gets.

Vielen Dank für eure Hilfe!