Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


11.5.11. Makró nyelv


      A makrók tulajdonképpen ismételten felhasználható forráskód részletek, amelyek a fordítási folyamat során a makróhívás helyére épülnek be. A makrók használatával csökkenthető a programozói munka, a program áttekinthetőbbé válik, valamint a megírt makrók más programokban is felhasználhatóak.
      A makrók és szubrutinok közötti különbségek:
     ˇ a szubrutinok csak egyszer szerepelnek a gépi kódban; a makrók minden makróhívás helyére beépülnek;
     ˇ a szubrutinok minden hívásnál pontosan ugyanazon azonosító-címkék által kijelölt adatokon végzik el feladatukat; a makrók viszont minden egyes hívásukkor a megadott paramétereknek megfelelő címkékkel épülnek be a programba, így valójában minden hívásnál más azonosítójú adatokkal dolgozhatnak.
      A makrók tehát a magas szintű programnyelvek függvényeihez és eljárásaihoz hasonlóak és ennek megfelelő rugalmasságot biztosítanak.
      A makrókat a forráskódban még felhasználásuk előtt definiálni kell, amely a következő táblázatban látható fordításvezérlő utasítások segítségével lehetséges.

11.5.11-1. Táblázat
MAKRÓ SZERKESZTŐ UTASÍTÁSOK
ENDM Makró vége.
EXITM Soron kívüli kilépés a makróból.
EXPAND A makró forráslistájának beillesztése a makróhívás helyére a fordítási lista fájl létrehozásakor.
LOCAL Belső változó megadása.
MACRO Makró kezdete.
NOEXPAND A makró forráslista hívási helyekre történő beillesztésének tiltása a fordítási lista fájl létrehozásakor.

      A makrók szerkezetét mutatja be a következő programrészlet:

teszt  macro  ADAT1, ADAT2
       ...
       ...
       endm

      A makrók definiálását a macro utasítással kell kezdeni, amely előtt a makró azonosító címkéje áll, utána pedig a makró paraméterei.
      A makrókat minden esetben az endm utasítással kell zárni.
      A kezdő és záró utasítások között bármely mikrovezérlő utasítás és fordításvezérlő utasítás szerepelhet.
      A makróhívás a makró azonosítójával és paraméterlistájának kitöltésével lehetséges. A fenti makró néhány hívására mutat példát a következő programrészlet:

...
teszt   SZAM, SZAMLALO
...
...
teszt   KARAKTER, ADAT
...
...
teszt   MAX, ERTEK
...

      Látható, hogy minden makróhívásnál más paraméterek szerepelnek, vagyis a makró minden alkalommal a megadott címkéknek megfelelő, eltérő adatokon fogja elvégezni ugyanazt a feladatot.
      A paraméterek közötti vesszőt az egyik paraméter elhagyása esetében is ki kell tenni, mert a fordító program számára az egyes paraméterek csak így azonosíthatóak. A kihagyott paraméterek nulla értékűnek számítanak.

Vissza a lap tetejére

      Természetesen paraméter nélküli makrók is definiálhatók:

olvas   macro
        ...
        ...
        endm

      A paraméter nélküli makrók segítségével elérhető, hogy az utasítások (makróhívások) azonosítói utaljanak azok feladataira, megkönnyítve így a program értelmezését. Erre mutat egyszerű példát a következő programrészlet:

...     ...
indul   macro
        bsf     kimenet,3
        endm
leall   macro
        bcf     kimenet,3
        endm
...     ...
...     ...
        indul
...     ...
        leall
...     ...

      A makrókon belül használt azonosító címkék lehetnek külső vagy belső címkék. A külső címkék a program bármely területéről elérhető azonosítók, amelyek hozárendelése a program futása során nem változik. A belső címkékre való hivatkozás viszont csak a makrón belül lehetséges.
      A belső címkék definiálása a LOCAL fordításvezérlő utasítással lehetséges. A belső címkék azonosítóinak hozzárendelése csak a makróhíváskor történik meg, így egy makró többször is hívható változó ütközés nélkül, valamint saját magát is hívhatja.
      A makrók egymást és saját magukat is hívhatják tetszőleges mélységig.

      A makróból való soron kívüli kilépést biztosítja az EXITM fordításvezérlő utasítás. Valamilyen belső feltétel teljesülése esetén az EXITM utasítás hatására a makró forráskódba való beillesztése megszakad. Ilyen esetben az EXITM és a soron következő ENDM utasítások közötti programrészt a fordító program figyelmen kívül hagyja.

 

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra