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