Pagina 1 di 1

Creare macro (o come si chiamano) in mplab

Inviato: gio set 27, 2012 13:16
da Bit79
Salve a tutti,
in alcuni programmi mi capita di utilizzare blocchi di istruzioni ripetuti molte volte, ma che non merita siano inseriti in una subroutine, poichè cambiano alcune costanti, e passargliele attraverso alcune variabili non sarebbe convieniente.
Faccio un esempio:

MOVLW low x_coord
CALL SD_CMD
MOVLW high x_coord
CALL SD_CMD
MOVLW low y_coord
CALL SD_CMD
MOVLW high y_coord
CALL SD_CMD

dove x_coord e y_coord sono due costanti a 16 bit definite in mplab.
Il blocco mi serve più volte, ovviamente con differenti valori delle costanti. Inserire tutto in una routine, e poi dovergli passare i valori attraverso 4 variabili (a 8 bit) non conviene, poichè è comunque necessario scrivere le solite 8 righe per caricare le costanti, oltre a chiamare la subroutine.

E' possibile istruire il compilatore a scrivere il blocco sopra, richiamandolo nel programma con una pseudo istruzione tipo:

fai_questo_utilizzando: x_coord, y_coord

Poi compilando il programma il complilatore scrive le istruzioni del blocco...
Ovviamente il blocco dovrà essere definito a parte, meglio se nello stesso file asm.

Ciao!

Re: Creare macro (o come si chiamano) in mplab

Inviato: gio set 27, 2012 22:46
da Bit79
Trovato!
Prima di tutto bisogna definire la macro, e gli eventuali parametri da passarle:

set_coord macro x_coord, y_coord
MOVLW low x_coord
CALL SD_CMD
MOVLW high x_coord
CALL SD_CMD
MOVLW low y_coord
CALL SD_CMD
MOVLW high y_coord
CALL SD_CMD
endm

Poi si può richiamare la macro tutte le volte che si vuole, passandole i parametri necessari:

set_coord 0x1234, 0x5678
set_coord 0x9ABC, 0xDEF0

Nel codice compilato non comparirà la chiamata alla macro (non è una subroutine) ma verrà copiato il codice contenuto nella macro stessa.