Цитата
Можно какимто способом обрезать лишние операции ?
Я так понимаю, протест вызывает использование регистровой пары Z?
Пробуйте так:
Код
volatile unsigned char tmr_lo;
volatile unsigned char tmr_hi;
#pragma vector=TIMER0_OVF_vect
__interrupt void _myint(void)
{
unsigned char c;
TCNT0=0x1A;
c=tmr_lo;
c++;
tmr_lo=c;
if (!c)
{
c=tmr_hi;
c++;
tmr_hi=c;
}
}
и на вкладке управления оптимизацией снять галочку clustering.
Вот результирующий код:
Код
RSEG CODE:CODE:NOROOT(1)
// 22 __interrupt void _myint(void)
_myint:
// 23 {
ST -Y, R17
ST -Y, R16
IN R17, 0x3F
// 24 unsigned char c;
// 25 TCNT0=0x1A;
LDI R16, 26
OUT 0x32, R16
// 26 c=tmr_lo;
LDS R16, tmr_lo
// 27 c++;
INC R16
// 28 tmr_lo=c;
STS tmr_lo, R16
// 29 if (!c)
TST R16
BRNE ??_myint_0
// 30 {
// 31 c=tmr_hi;
LDS R16, tmr_hi
// 32 c++;
// 33 tmr_hi=c;
INC R16
STS tmr_hi, R16
// 34 }
// 35 }
??_myint_0:
OUT 0x3F, R17
LD R16, Y+
LD R17, Y+
RETI
Цитата
2) перевести проект на CodeVisionAVR.
Этого делать точно не надо
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин