Hi

Ich habe folgenden Code:
C-Code
Code:
// Globale Variablen
struct TASK tasks[MAXTASKS];
void *tastarray = &tasks;
ASM-Code
Code:
.data
.extern .word tastarray
wenn ich das nun linke:...
Code:
avr-gcc -mmcu=atmega128 -x assembler-with-cpp -Wa,-gdwarf2 -c -o asm.o asm.s
avr-gcc $INCLUDEDIR -mmcu=atmega128 -Wall -gdwarf-2 -O0 -c -o main.o main.c
avr-gcc -mmcu=atmega128 -s -m AVR5 main.o asm.o $LIBDIR -lm -o bin.elf
... bekomme ich folgende Fehlermeldung:
Code:
asm.o: In function `__vector_12':
/home/redeagle/avr/ts/./asm.s:83: relocation truncated to fit: R_AVR_LDI against symbol `tastarray' defined in .data section in main.o
/home/redeagle/avr/ts/./asm.s:84: relocation truncated to fit: R_AVR_LDI against symbol `tastarray' defined in .data section in main.o
Hat jemand 'ne Idee was ich falsch gemacht habe?
----
OK, fehler gefunden
Wenn man weiß was der Linker mit relocation truncated meint ist es recht einfach - die Variable ist 16bit groß, der Compiler hat aber nur platz für eine 8 bit variable hinterlassen. Und da bekommt der Linker die Variable nicht rein.