Keine Ahnung wie der Kompiler das anstellt:
Code:
int main(void)
{
int i;
int ba = 6, tempo = 45, temp;
temp = 8505 - (ba * tempo);
// Schleife1 Anfang
for (i=0; i < temp; i++) {};
// Schleife 1 Ende
// Schleife2 Anfang
for (i=0; i < 8235; i++) {};
// Schleife2 Ende
while(1);
return(0);
}
Wird bei mir zu
Code:
0000005c <main>:
int main(void)
{
5c: cf e5 ldi r28, 0x5F ; 95
5e: d4 e0 ldi r29, 0x04 ; 4
60: de bf out 0x3e, r29 ; 62
62: cd bf out 0x3d, r28 ; 61
64: 8a e2 ldi r24, 0x2A ; 42
66: 90 e2 ldi r25, 0x20 ; 32
int i;
int ba = 6, tempo = 45, temp;
temp = 8505 - (ba * tempo);
// Schleife1 Anfang
for (i=0; i < temp; i++) {};
68: 8d 97 sbiw r24, 0x2d ; 45
6a: 97 ff sbrs r25, 7
6c: fd cf rjmp .-6 ; 0x68 <main+0xc>
6e: 8a e2 ldi r24, 0x2A ; 42
70: 90 e2 ldi r25, 0x20 ; 32
// Schleife 1 Ende
// Schleife2 Anfang
for (i=0; i < 8235; i++) {};
72: 8d 97 sbiw r24, 0x2d ; 45
74: 97 ff sbrs r25, 7
76: fd cf rjmp .-6 ; 0x72 <main+0x16>
// Schleife2 Ende
while(1);
78: ff cf rjmp .-2 ; 0x78 <main+0x1c>
Identischer Code! 68-6c bzw. 72-76, hier mein Output beim Kompilieren:
Code:
rm -f test.hex
rm -f test_eeprom.hex
rm -f test.elf
rm -f test.map
rm -f test.cof
rm -f test.lst
rm -f temp.lst
rm -f temp.o
avr-gcc -mmcu=atmega8 -Os -mno-interrupts -funsigned-char -funsigned-bitfields -Wall -Wstrict-prototypes -ggdb -c -DF_CPU=8000000UL -Wa,-acdhlmns=temp.lst temp.c -o temp.o
avr-gcc -mmcu=atmega8 -Os -mno-interrupts -funsigned-char -funsigned-bitfields -Wall -Wstrict-prototypes -ggdb temp.o -o test.elf -Wl,-Map=test.map --cref -lm
avr-objcopy -j .text -j .data -O ihex test.elf test.hex
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex test.elf test_eeprom.hex
avr-objdump -d -S test.elf > test.lst
0
Verblüffend.
Lesezeichen