Re: Hur gör man en snabb funktion i C?
Postat: 25 juni 2014, 18:28:21
I de äldre PIC16/PIC12 modellerna måste man börja sin interrupt rutin
med att spara undan vissa register och avsluta med att återställa.
Här är ett exempel på hur en ISR kan se ut (från databladet till PIC16F628):
Notera att detta enbart sparar WREG och STATUS, behöver man spara fler så blir det mer kod.
De nya modellerna sparas WREG, STATUS, BSR, FSR0L, FSR0H, FSR1L, FSR1H, FSR2H och PCLATH.
Och det sker alltså on-the-fly med automatik utan extra processortid.
> Ett lite enklare försök: Kan man rent programmeringsmässigt göra samma tidsbesparing på en
> äldre PIC genom att låta denna process ske i bakgrunden?
Nej.
med att spara undan vissa register och avsluta med att återställa.
Här är ett exempel på hur en ISR kan se ut (från databladet till PIC16F628):
Kod: Markera allt
MOVWF W_TEMP ;copy W to temp register, could be in either bank
SWAPF STATUS,W ;swap status to be saved into W
BCF STATUS,RP0 ;change to bank 0 regardless of current bank
MOVWF STATUS_TEMP ;save status to bank 0 register
:
: (ISR)
:
SWAPF STATUS_TEMP,W ;swap STATUS_TEMP register into W, sets bank to original state
MOVWF STATUS ;move W into STATUS register SWAPF W_TEMP,F ;swap W_TEMP
SWAPF W_TEMP,W ;swap W_TEMP into W
RETFIE
De nya modellerna sparas WREG, STATUS, BSR, FSR0L, FSR0H, FSR1L, FSR1H, FSR2H och PCLATH.
Och det sker alltså on-the-fly med automatik utan extra processortid.
> Ett lite enklare försök: Kan man rent programmeringsmässigt göra samma tidsbesparing på en
> äldre PIC genom att låta denna process ske i bakgrunden?
Nej.