ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
4 декабря
151558
Санчес (22.03.2009 15:59, просмотров: 2443) reZident
Оптимизация в 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), но, может быть, можно какую-нибудь дополнительную оптимизацию задействовать?