da
c1b8 » 18 ott 2013, 16:50
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....
Fabio