Forum: Mikrocontroller und Digitale Elektronik AvrStudio 6: Wie eigenen Startup Code einbinden? nostartfiles nutzt nix !


von DerDan (Gast)


Lesenswert?

Hallo,

wie bindet man im AVR Studio 6 ein eigenen Startup code ein 
(AVRxMega32A4)?
ich habe die Datei "gcrt1.S" aus der newlib kopiert und eingebunden.

Leider bemängelt der Linker:
1
Error  1  multiple definition of `__vectors'  C:\p4\develope\Schoelly\AVR32Studio\XMEGA64_Boot\XMega32_Boot\XMega32_Boot\Debug/../src/gcrt1.s  52  1  XMega32_Boot
2
Error  2  Disabling relaxation: it will not work with multiple definitions    1  1  XMega32_Boot
3
Error  3  multiple definition of `__bad_interrupt'  C:\p4\develope\Schoelly\AVR32Studio\XMEGA64_Boot\XMega32_Boot\XMega32_Boot\Debug/../src/gcrt1.s  195  1  XMega32_Boot

das die Vektor Tabelle doppelt vorhanden ist und das obwohl ich das Flag
1
nostartfiles
gesetzt habe.

Wie kann man verhindern das der Startup Code aus der Lib verwendet wird?
Ziel ist es einen Startup Code zu haben, welcher außer dem Reset Vektor 
keine weiteren Interrupt Vektoren enthält. (Bootloader, Code sparen)


mfg

DerDan

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Dann schau dir mal an, was AS dem Linker übergibt. -nostartfiles 
funktioniert nämlich. Also -v bei den Optionen angeben und checken.

von DerDan (Gast)


Lesenswert?

Hallo
das erzeugt mir die Ausgabe, wenn ich "-v" in den Optionen mit angebe.
Ich hab ein paar Zeilenumbrüche eingefügt damit man es besser lesen 
kann.
Die Zeilen mit den "######" hab ich markiert.
und obwohl -nostartfiles angegeben ist, wird crtx32a4.o mit eingebunden.
Wie kann man das verhindern?

mfg

derDan

1
     c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../libexec/gcc/avr/4.6.2/collect2.exe 
2
       --relax 
3
       -m avrxmega2 
4
       -o XMega32_App.elf 
5
#######c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avrxmega2/crtx32a4.o 
6
       -Lc:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avrxmega2 
7
       -Lc:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avrxmega2 
8
       -Lc:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2 
9
       -Lc:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc 
10
       -Lc:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib 
11
       src/asf/xmega/boards/stk600/rc064x/init.o 
12
       src/asf/xmega/drivers/cpu/ccp.o 
13
       src/asf/xmega/drivers/ioport/ioport.o 
14
       src/gcrt1.o src/usart_example.o 
15
#######-nostartfiles 
16
       -Map=XMega32_App.map 
17
       --start-group 
18
       --end-group 
19
       --gc-sections 
20
       -section-start=.text=0x0 
21
       -section-start=.text2=0x7f00 
22
       -section-start=.BOOT=0x20000 
23
       --relax 
24
       -lgcc 
25
       -lc 
26
       -lgcc

von DerDan (Gast)


Lesenswert?

Hallo,

ich vermute, dass "collect2.exe" das "nostartfiles" selber ignoriert.

Kennt das jemand?

von XGuru (Gast)


Lesenswert?

Hallo,


ich denke du solltest den Linker mal über die Kommandozeile aufrufen um 
zu sehen was da passiert?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

DerDan schrieb:

> obwohl -nostartfiles angegeben ist, wird crtx32a4.o mit eingebunden.

Kann ich nicht nachvollziehen und avr-gcc 4.6.2. Hier der Aufruf von 
vollect2 für einen ATmega168 (ATXmega32A4 wird nicht von 4.6.2 
unterstützt):

$ avr-gcc -mmcu=atmega168 foo.c -v -save-temps

e:/winavr/4.6.2/bin/../libexec/gcc/avr/4.6.2/collect2.exe -m avr5 -Tdata 
0x800100 
e:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr5/crtm16 
8.o  -Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/avr5 
-Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr5 
-Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2 
-Le:/winavr/4.6.2/bin/../lib/gcc 
-Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib foo.o 
-lgcc -lc -lgcc

Und mit -nostartfiles:

$ avr-gcc -mmcu=atmega168 foo.c -v -nostartfiles -save-temps

e:/winavr/4.6.2/bin/../libexec/gcc/avr/4.6.2/collect2.exe -m avr5 -Tdata 
0x800100 -Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/avr5 
-Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr5 
-Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2 
-Le:/winavr/4.6.2/bin/../lib/gcc 
-Le:/winavr/4.6.2/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib foo.o 
-lgcc -lc -lgcc


> Wie kann man das verhindern?

Das musst also beim Distributor deiner Toolchain nachfragen was da 
falsch läuft.

Sieht aus als wär da was verbockt worden in AS oder in den Tools...

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.