Ich bin dabei mir nen DMX-Decoder zu schreiben und im URAT-Interrupt
produziert der Gcc reproduzierbar einen Fehler indem er Variablen
übergeht:
Auszug aus main.c:
1 | ISR(USART_RXC_vect){
|
2 | uint8_t info = UCSRA; //Infos zu den Daten -> Zwischenspeicher
|
3 | uint8_t datatemp = UDR; //angekommene Daten -> Zwischenspeicher
|
4 |
|
5 | if((info & 1<<FE)&(datatemp==0)){
|
6 | recBuf[1]=255;
|
7 | }
|
8 | else recBuf[1]=0;
|
9 |
|
10 | }
|
wird zu:
Auszug aus lss Datei:
1 | 0000007c <__vector_11>:
|
2 | 7c: 1f 92 push r1
|
3 | 7e: 0f 92 push r0
|
4 | 80: 0f b6 in r0, 0x3f ; 63
|
5 | 82: 0f 92 push r0
|
6 | 84: 11 24 eor r1, r1
|
7 | 86: 8f 93 push r24
|
8 | 88: 8b b1 in r24, 0x0b ; 11
|
9 | 8a: 8c b1 in r24, 0x0c ; 12
|
10 | 8c: 10 92 63 00 sts 0x0063, r1
|
11 | 90: 8f 91 pop r24
|
12 | 92: 0f 90 pop r0
|
13 | 94: 0f be out 0x3f, r0 ; 63
|
14 | 96: 0f 90 pop r0
|
15 | 98: 1f 90 pop r1
|
16 | 9a: 18 95 reti
|
bei 88 und 8a liest er die beiden Usart register ein, aber eben in das
gleiche Register :/ ...
Eckdaten:
IDE = Eclipse helios
AVR-GCC = 4.3.5
EDIT: AVR = MEGA8
Aufruf (aus dem makefile):
avr-gcc -Wl,-Map,DMX_to_IR.map -mmcu=atmega8 -o"DMX_to_IR.elf" $(OBJS)
$(USER_OBJS) $(LIBS)