Parametri Macro PIC

Inviato:
15 ott 2013, 10:11
da mros
Buongiorno a tutti
volevo sapere se è fattibile e consigliabile inserire nei parametri da passare ad una macro delle variabili.
esempio
cblock 0x20
prova
endc
_macro prova,2

Re: Parametri Macro PIC

Inviato:
15 ott 2013, 11:44
da c1b8
E' possibile, cosigliabile boh.
I parametri che puoi passare ad una macro sono costanti, variabili (non il contenuto della variabile), indirizzo di programma per goto o call.
Attento che passare una variabile significa passare l'indirizzo della variabile, non il suo contenuto.
Re: Parametri Macro PIC

Inviato:
18 ott 2013, 16:02
da mros
Ciao Fabio
quindi rifacendomi al mio esempio passando il parametro "prova" sto passando il suo indirizzo di memoria ?
In pratica devo passare dei parametri ad una macro a run-time cosa mi consigli di fare?
rosario
Re: Parametri Macro PIC

Inviato:
18 ott 2013, 16:50
da c1b8
Una macro è una "facility" messa a disposizione dall'ambiente di sviluppo per non scrivere lo stesso codice più volte. Quando vai a compilare il programma, le righe di codice che compongono la macro vengono copiate nel punto in cui la macro viene richiamata, come se tu manualmente avessi scritto quelle righe in quel punto.
Non ha quindi senso dire "passo parametri a runtime ad una macro", a runtime la macro non esiste, esiste il codice copiato/compilato della macro.
Parametri/valori non costanti sono comunque utilizzati nel codice sempre allo stesso modo: i dati sono presenti in una locazione di memoria (identificata da una variabile e quindi da un indirizzo di memoria) ed il programma carica nel registro W, o utilizza in altro modo, il contenuto di quell'area di memoria.
La macro farà la stessa cosa, riceve l'indirizzo di memoria della variabile e la utilizza come faresti in qualsiasi altro punto del codice.
Una macro da 10 righe di codice, solo come esempio, utilizzata 3 volte occupa 30 righe di codice e relativa memoria. Forse conviene scrivere una routine e passare parametri alla routine.
Personalmente utilizzo le macro quando queste sono limitate a poche righe di codice (3 max 4) per le quali sarebbe praticamente equivalente, o peggio, in termini di occuprazione di memoria programma o di tempo di esecuzione, scrivere una routine.
Esempio: la macro di sistema (fornita direttamente dal compilatore) BANKSEL equivale ad uno/due BCF/BSF. Scriverli ogni volta è scomodo, scrivere una routine è assurdo....