(EDITAR: Se agregó el código de desensamblaje C18)
Necesito optimizar una función escrita en C para un PIC18f4585. Estoy usando C18 para compilar.
La función que estoy intentando volver a escribir en el ensamblaje es:
void readResetTimers (void)
{
register unsigned char tmr0_temp;
register unsigned char tmr1_temp;
tmr0_temp = TMR0L;
TMR0L = 0;
tmr1_temp = TMR1L;
TMR1L = 0;
tmr0_value = tmr0_temp;
tmr1_value = tmr1_temp;
}
Pensé que podría usar el código de ensamblaje para cargar el valor de cada registro en las variables tmr0_value & El valor tmr1 como se declara en el espacio de nombres global, sin embargo, mi sistema no funciona cuando sustituyo el siguiente código en:
void readResetTimers (void)
{
_asm
MOVF TMR0L, 0, 1
MOVWF tmr0_value, 1
CLRF TMR0L,0
MOVF TMR1L, 0, 1
MOVWF tmr1_value, 1
CLRF TMR1L,0
_endasm
}
Cualquier idea sería apreciada, Saludos.
void readResetTimers (void)
04D4 CFD9 MOVFF 0xfd9, 0xfe6
04D6 FFE6 NOP
04D8 CFE1 MOVFF 0xfe1, 0xfd9
04DA FFD9 NOP
04DC 0E02 MOVLW 0x2
04DE 26E1 ADDWF 0xfe1, F, ACCESS
405: {
406: register unsigned char tmr0_temp;
407: register unsigned char tmr1_temp;
408:
409: /* Read the two timers into CPU registers and reset them
410: * as quickly as absolutely possible.
411: */
412:
413: tmr0_temp = TMR0L;
04E0 50D6 MOVF 0xfd6, W, ACCESS
04E2 6EDF MOVWF 0xfdf, ACCESS
414: TMR0L = 0;
04E4 6AD6 CLRF 0xfd6, ACCESS
415: tmr1_temp = TMR1L;
04E6 0E01 MOVLW 0x1
04E8 CFCE MOVFF 0xfce, 0xfdb
04EA FFDB NOP
416: TMR1L = 0;
04EC 6ACE CLRF 0xfce, ACCESS
417:
418: tmr0_value = tmr0_temp;
04EE CFDF MOVFF 0xfdf, 0xe4
04F0 F0E4 NOP
419: tmr1_value = tmr1_temp;
04F2 CFDB MOVFF 0xfdb, 0xe5
04F4 F0E5 NOP
431:
432: }