Оптимизация в WinAVR-20090313 Поставил WinAVR-20090313, компилирую один свой исходник. По сравнению с WinAVR-20060421 код больше. Вот пример:
Было
if(!fl_cmd){
33a: 67 2b or r22, r23
33c: 31 f4 brne .+12 ; 0x34a <RGSB_Drive+0x18>
w1.b[1]=cmd[13];
33e: ec 01 movw r28, r24
340: 5d 85 ldd r21, Y+13 ; 0x0d
w1.b[0]=cmd[12];
342: 4c 85 ldd r20, Y+12 ; 0x0c
w2.b[1]=cmd[11];
344: 3b 85 ldd r19, Y+11 ; 0x0b
w2.b[0]=cmd[10];
346: 2a 85 ldd r18, Y+10 ; 0x0a
348: 0d c0 rjmp .+26 ; 0x364 <RGSB_Drive+0x32>
} else {
Стало
if(!fl_cmd){
33a: 61 15 cp r22, r1
33c: 71 05 cpc r23, r1
33e: 69 f4 brne .+26 ; 0x35a <RGSB_Drive+0x24>
w1.b[1]=cmd[13];
340: 1d 96 adiw r26, 0x0d ; 13
342: 6c 91 ld r22, X
344: 1d 97 sbiw r26, 0x0d ; 13
w1.b[0]=cmd[12];
346: 1c 96 adiw r26, 0x0c ; 12
348: 9c 91 ld r25, X
34a: 1c 97 sbiw r26, 0x0c ; 12
w2.b[1]=cmd[11];
34c: 1b 96 adiw r26, 0x0b ; 11
34e: 3c 91 ld r19, X
350: 1b 97 sbiw r26, 0x0b ; 11
w2.b[0]=cmd[10];
352: 1a 96 adiw r26, 0x0a ; 10
354: 2c 91 ld r18, X
356: 1a 97 sbiw r26, 0x0a ; 10
358: 0b c0 rjmp .+22 ; 0x370 <RGSB_Drive+0x3a>
} else {
В обоих случаях оптимизация -Os.
Понятно, что версия компилятора другая (4.3.2 вместо 3.4.6), но, может быть, можно какую-нибудь дополнительную оптимизацию задействовать?