.. 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