Nun hab ich mir das selber angeschaut, allerdings in C mit dem Ergebnis kann ich garnicht meckern, Code:
Das wird aus add gemacht:Code:#include <avr/io.h> uint8_t add(uint8_t a,uint8_t b) { return a+b; } int main(void) { uint8_t a=15; uint8_t b=10; DDRC = 255; PORTC = add(a,b); while(1); return 0; }
Und da alles zu Kompileirzeit bekannt ist wird die Funktion garnicht aufgerufen:Code:uint8_t add(uint8_t a,uint8_t b) { 8e: 68 0f add r22, r24 return a+b; } 90: 86 2f mov r24, r22 92: 99 27 eor r25, r25 94: 08 95 ret
Das einzigste was hier auffällt, man könnte die Funktion add komplett wegoptimieren, dann wäre es perfekt, aber man kann ja nicht alles habenCode:PORTC = add(a,b); a2: 89 e1 ldi r24, 0x19 ; 25 a4: 85 bb out 0x15, r24 ; 21 a6: ff cf rjmp .-2 ; 0xa6 <main+0x10>
Dann hab ich mir gedacht, ich lese ein Port ein, damit er doch add aufruft:
Und? Käse, selbst hier ruft er die nicht auf !Code:int main(void) { uint8_t b=10; uint8_t c; DDRC = 255; c=PINB; PORTC = add(c,b); while(1); return 0; }
Achso, optimiert wurde mit -Os was anderes benutze ich sowieso nicht.Code:c=PINB; a2: 86 b3 in r24, 0x16 ; 22 PORTC = add(c,b); a4: 86 5f subi r24, 0xF6 ; 246 a6: 99 27 eor r25, r25 a8: 85 bb out 0x15, r24 ; 21 aa: ff cf rjmp .-2 ; 0xaa <main+0x14>
Gruß Sebastian
P.S. avr-gcc 4.1.0







Zitieren

Lesezeichen