Pagina 1 di 1

Parametri Macro PIC

MessaggioInviato: 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

:roll:

Re: Parametri Macro PIC

MessaggioInviato: 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

MessaggioInviato: 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

MessaggioInviato: 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....