.. Bei obigem Codebeispiel denke ich mir bisher, dass hier das Maschinencode-Ergebnis vom Compiler doch schon recht kurz und knackig ausfallen müsste. Oder lohnt es sich auch solche Sequenzen zu optimieren? ..
			
		
 
	 
 Da stelln wa uns ma jaantz domm.
Und schauen uns die jeweilige *.lls an, nachdem wir in zwei unterschiedlichen Optimierungsstufen compiliert haben. Umgebung: AVRStudio4.18 Build 700, WinAVR-20100110, Win7pro. Die originalen Zeilen sind rot markiert - und an die Fehlermeldungen angepasst.
Optimiert mit -0s
	Code:
	arno_01-lss-Opt_-0s
Optimierung -0s
arno_01.elf:     file format elf32-avr
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  Izthrznt      =    20000;     // Der ZeitHorizont in ISR(TIMER2_COMPA_vect)
    12e0:    80 e2           ldi    r24, 0x20    ; 32
    12e2:    9e e4           ldi    r25, 0x4E    ; 78
    12e4:    90 93 40 04     sts    0x0440, r25
    12e8:    80 93 3f 04     sts    0x043F, r24
  Izeit_A       = Izthrznt;     //
    12ec:    80 91 3f 04     lds    r24, 0x043F
    12f0:    90 91 40 04     lds    r25, 0x0440
    12f4:    90 93 33 04     sts    0x0433, r25
    12f8:    80 93 32 04     sts    0x0432, r24
  Isecundn      =        0;     // Sekundenzähler, max 9 Stunden - NUR hier nullen
    12fc:    10 92 fd 03     sts    0x03FD, r1
    1300:    10 92 fc 03     sts    0x03FC, r1
** **************************************************************************** */
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//  DDRD = B11111111;
//  PORTC = B00110000;
  DDRD  = 0B11111111;
    1304:    8f ef           ldi    r24, 0xFF    ; 255
    1306:    8a b9           out    0x0a, r24    ; 10
  PORTC = 0B00110000;
    1308:    80 e3           ldi    r24, 0x30    ; 48
    130a:    88 b9           out    0x08, r24    ; 8
  while(PINC&8){}
    130c:    33 99           sbic    0x06, 3    ; 6
    130e:    fe cf           rjmp    .-4          ; 0x130c <main+0xb8>
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/* **************************************************************************** **
** **************************************************************************** */
// - - - - - - - - - - - - - - - -
  Svpt          =        0;     // Servopointer, => ~tmr~/ISR (TIMER1_COMPA_vect)
    1310:    10 92 20 04     sts    0x0420, r1
  TC1TMR_init ( );              // OCR1AV und ~BV in ~com~ gesetzt
    1314:    0e 94 d3 01     call    0x3a6    ; 0x3a6 <TC1TMR_init>
// - - - - - - - - - - - - - - - -
 Optimiert mit -03 => der Code des >>gesamten Programms<< ist dabei ein vielfaches länger :-/
	Code:
	arno_01-lss-Opt_-03
Optimierung -03
arno_01.elf:     file format elf32-avr
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  Izthrznt      =    20000;     // Der ZeitHorizont in ISR(TIMER2_COMPA_vect)
    b954:    80 e2           ldi    r24, 0x20    ; 32
    b956:    9e e4           ldi    r25, 0x4E    ; 78
    b958:    90 93 40 04     sts    0x0440, r25
    b95c:    80 93 3f 04     sts    0x043F, r24
  Izeit_A       = Izthrznt;     //
    b960:    80 91 3f 04     lds    r24, 0x043F
    b964:    90 91 40 04     lds    r25, 0x0440
    b968:    90 93 33 04     sts    0x0433, r25
    b96c:    80 93 32 04     sts    0x0432, r24
  Isecundn      =        0;     // Sekundenzähler, max 9 Stunden - NUR hier nullen
    b970:    10 92 fd 03     sts    0x03FD, r1
    b974:    10 92 fc 03     sts    0x03FC, r1
** **************************************************************************** */
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//  DDRD = B11111111;
//  PORTC = B00110000;
  DDRD  = 0B11111111;
    b978:    4a b9           out    0x0a, r20    ; 10
  PORTC = 0B00110000;
    b97a:    80 e3           ldi    r24, 0x30    ; 48
    b97c:    88 b9           out    0x08, r24    ; 8
  while(PINC&8){}
    b97e:    33 99           sbic    0x06, 3    ; 6
    b980:    fe cf           rjmp    .-4          ; 0xb97e <main+0xd0>
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/* **************************************************************************** **
** **************************************************************************** */
// - - - - - - - - - - - - - - - -
  Svpt          =        0;     // Servopointer, => ~tmr~/ISR (TIMER1_COMPA_vect)
    b982:    10 92 20 04     sts    0x0420, r1
  TC1TMR_init ( );              // OCR1AV und ~BV in ~com~ gesetzt
    b986:    0e 94 3d 01     call    0x27a    ; 0x27a <TC1TMR_init>
// - - - - - - - - - - - - - - - -
 
						
					
Lesezeichen