[an error occurred while processing this directive]
Оптимизация в IAR AVR 2.28a
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено AndyДюх 04 декабря 2002 г. 11:56

Составил простую программку для AT90S8515. IAR 2.28a

void main (void)
{
char TimeCount=0xff-154;
char Maska=2;
//Setup();
_CLI();
TCNT0=TimeCount;
TCCR0=1;
do{
do{}while(!(TestBit(TIFR,TOV0)));
TCNT0=TimeCount;
TIFR=Maska;
_NOP();
}while(1>0);
}

Включил максимальный уровень оптимизации по скорости и вот что получил

*0000000D:main
*0000000D:
*0000000D: _CLI();
+0000000D: 94F8 CLI
*0000000E: TCNT0=TimeCount;
+0000000E: E605 LDI R16,0x65 ; 0x65 = 0b01100101 = 101
+0000000F: BF02 OUT 0x32,R16
*00000010: TCCR0=1;
+00000010: E001 LDI R16,0x01 ; 0x01 = 0b00000001 = 1
+00000011: BF03 OUT 0x33,R16
*00000012: do{}while(!(TestBit(TIFR,TOV0)));
+00000012: B718 IN R17,0x38
+00000013: FF11 SBRS R17,1
+00000014: CFFD RJMP do{}while(!(TestBit(TIFR,TOV0)));
*00000015: TCNT0=TimeCount;
+00000015: E605 LDI R16,0x65 ; 0x65 = 0b01100101 = 101
+00000016: BF02 OUT 0x32,R16
*00000017: TIFR=Maska;
+00000017: E002 LDI R16,0x02 ; 0x02 = 0b00000010 = 2
+00000018: BF08 OUT 0x38,R16
*00000019: _NOP();
+00000019: 0000 NOP
*0000001A: }while(1>0);
+0000001A: CFF7 RJMP do{}while(!(TestBit(TIFR,TOV0)));

Я выделил то чего мне не нравиться – экономяться регистры, а мне надо экономить время!
Как это зделать?

Кстати тоже самое от 1.4 выглядит так:
*00000039:main
*00000039:void main (void)
*00000039: _CLI();
+00000039: 94F8 CLI
*0000003A: TCNT0=TimeCount;
+0000003A: E605 LDI R16,0x65 ; 0x65 = 0b01100101 = 101
+0000003B: BF02 OUT 0x32,R16
*0000003C: TCCR0=1;
+0000003C: E001 LDI R16,0x01 ; 0x01 = 0b00000001 = 1
+0000003D: BF03 OUT 0x33,R16
+0000003E: E605 LDI R16,0x65 ; 0x65 = 0b01100101 = 101
+0000003F: E012 LDI R17,0x02 ; 0x02 = 0b00000010 = 2
*00000040:?0006
*00000040: char Maska=2;
*00000040: char TimeCount=0xff-154;
*00000040: do{}while(!(TestBit(TIFR,TOV0)));
+00000040: B728 IN R18,0x38
+00000041: 7022 ANDI R18,0x02 ; 0x02 = 0b00000010 = 2
+00000042: F3E9 BREQ ?0006
*00000043: TCNT0=TimeCount;
+00000043: BF02 OUT 0x32,R16
*00000044: TIFR=Maska;
+00000044: BF18 OUT 0x38,R17
*00000045: _NOP();
+00000045: 0000 NOP
*00000046: }while(1>0);
+00000046: CFF9 RJMP ?0006

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru