Nun hab ich mir das selber angeschaut, allerdings in C mit dem Ergebnis kann ich garnicht meckern, Code:
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;
}
Das wird aus add gemacht:
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
Und da alles zu Kompileirzeit bekannt ist wird die Funktion garnicht aufgerufen:
Code:
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>
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 haben 
Dann hab ich mir gedacht, ich lese ein Port ein, damit er doch add aufruft:
Code:
int main(void) {
uint8_t b=10;
uint8_t c;
DDRC = 255;
c=PINB;
PORTC = add(c,b);
while(1);
return 0;
}
Und? Käse, selbst hier ruft er die nicht auf !
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>
Achso, optimiert wurde mit -Os was anderes benutze ich sowieso nicht.
Gruß Sebastian
P.S. avr-gcc 4.1.0
Lesezeichen