Le MACRO
Il fatto assai comune, i nomi di alcune nuove istruzioni, come BC,
PUSH, RCALL, MOVFF possono essere stati utilizzati per macro con funzioni spesso
analoghe nei sorgenti mid-range, richiede che, per non avere segnalazioni di errore nel compilatore e per evitare effetti
imprevedibili nell' esecuzione del programma.
Dove la macro fa il lavoro svolto da una istruzione del set 18F, ad esempio:
MOVFF MACRO
src, dst
movf src, w
movwf dst, w
ENDM |
ha la stessa funzione dell' istruzione MOVFF e quindi diventa inutile e va
eliminata.
Dove la macro fa un lavoro differente dall' istruzione dello stesso nome,
occorrerà sostituire i nomi delle macro con altri adeguati.
Ma, sopratutto, sarà indispensabile verificare che le macro siano adeguate
al nuovo ambiente, principalmente per quanto riguarda i nomi, i test sui flag,
gli switch di banchi e pagine, la lettura di tabelle, i jump e i branch, ecc..
Ad esempio la macro esemplificata MOVFF nei mid-range richiede che src e dst
siano nello stesso banco. L' istruzione movff degli 18F sposta qualunque
regsitro in qualunque altro registro senza limitazioni, dato che permette
indirizzamento su 2M.
E' quindi possibile che, ad esempio, si siano scritte macro che tengono conto
del problema dei banchi ( o delle pagine, come le classiche PAGE_CALL o
LONG_CALL) , necessità che negli enhenced non esistono più (per le pagine) o
sono gestite diversamente (per i banchi).
Un' altra famiglia di macro da verificare è quella che contiene indirizzi
assoluti, come:
;branch if plus-- test bit 7 set
bpl MACRO file,address
movfw file
andlw b'10000000'
btfsc
3,2
goto address
ENDM |
dove btfsc 3,2
richiama lo STATUS come indirizzo assoluto, che negli 18F è diverso.
Azione
La soluzione ideale è eliminare le
definizioni di macro usate per i PIC16 e, se necessario, riscriverne un nuovo set,
adatto ai PIC18F. |
|