Vissza a főoldalra    Vissza a PIC főoldalra

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

 


11.5.9. Hordozható programkód készítése


      Az MPASM 2.0 és MPLINK 1.0 verziók megjelenése óta lehetőség van assembly és C nyelvű hordozható programrészletek készítésére, ami lehetővé teszi, hogy a programozó az egyszer már elkészített részmegoldásokat a következő programjaiba is beilleszthesse. (A C nyelvű fordítást természetesen nem az MPASM assembler végzi. A 14-bites programmemóriájú közepes teljesítményű PIC mikrovezérlők C nyelvű programfejlesztésére a Microchip eddig csak az MPLAB-C nevű C fordítót fejlesztette ki, amely az 1.75. verziótól kezdődően alkalmas volt hordozható programkód készítésére. Az MPLAB-C fejlesztése 1998-tól már nem folytatódott, így természetesen a forgalmazónál már nem is szerezhető be, helyette valamely más gyártó C fordítóját lehet alkalmazni.)
      Ez a lehetőség a makrókönyvtárak készítésénél szabadabb feladatmegoldást enged meg, és legnagyobb előnye a C nyelven megírt programrészek beilleszthetősége.
      Az, hogy egy program megírásánál szükség van-e C nyelvű programozásra, illetve szükség van-e a mikrovezérlő program hordozható részekből való összeállítására, a megoldandó feladat bonyolultsága, a rendelkezésre álló kódkönyvtárak megfelelősége és a C fordítók magas ára határozza meg. Egyszerűbb vezérléstechnikai alkalmazások, és néhány száz soros forráskód esetében ez bizonyosan nélkülözhető.

      A hordozható programrészleteket úgynevezett hordozható objektum fájlok (röviden: objektum fájlok) formájában kell létrehozni. Ez azt jelenti, hogy már a forrásprogram is eltér a hagyományostól, majd az ezután következő fordítást is másképpen kell elvégezni. A fordítás során az MPASM assembler csak egy "félig" lefordított fájlt, egy hordozható objektum fájlt készít el. Az adat- és programmemória-helyek tényleges hozzárendelését az MPLINK összefűző program végzi el a futtatható hexadecimális kimenő adatfájl elkészítésekor.
      A hordozható objektum fájlok létrehozását segítő fordításvezérlő utasításokat mutatja be a következő táblázat. Természetesen egyéb fordításvezérlő utasítások is használhatóak.

11.5.9-1. Táblázat
OBJEKTUM FÁJL SZERKESZTŐ UTASÍTÁSOK
BANKISEL Automatikus adatmemória lapozás közvetett címzésnél.
BANKSEL Automatikus adatmemória lapozás közvetlen címzésnél.
CODE A végrehajtható programrész kezdete.
EXTERN Külső címke megadása.
GLOBAL Kívülről is hívható címke megadása.
IDATA Értékadásos deklarációs rész kezdete.
PAGESEL Automatikus programmemória lapozás.
UDATA Értékadás nélküli deklarációs rész kezdete.
UDATA_OVR Értékadás nélküli felülírható deklarációs rész kezdete.
UDATA_SHR Értékadás nélküli deklarációs rész kezdete, a minden lapról elérhető adatmemória-helyekhez.

Vissza a lap tetejére

      Az objektum fájlok forráslistája, hasonlóan a hagyományos forrásprogramokhoz, címkéket, utasításokat, fordításvezérlő utasításokat és megjegyzéseket tartalmaz. A különbség a címkék deklarációjában és a programlista szekciókra tagolásában jelentkezik. A következőkben az objektum fájlok szerkesztésének szabályai kerülnek bemutatásra.

      Objektum fájlok készítése esetén a gyártó által minden mikrovezérlő típushoz biztosított *.inc elnevezésű, csatolható fájlok használata kötelező! (Ez helyettesíthető a csatolható fájl tartalmának a forrásprogram deklarációs részébe másolásával.) Ebben a fájlban találhatók az adott mikrovezérlő típus adatmemóriájának határadatai és a vezérlő regiszterek gyári azonosítói és címei.

      A programmemóriába kerülő mikrovezérlő utasításokat a forráslista kód-szekciójába kell elhelyezni. Ez a szekció a CODE fordításvezérlő utasítással kezdődik. A kód-szekciónak vagy szekcióknak azonosító címkéje is lehet, de egy forrásprogramon belül nem szerepelhet két vagy több azonos címkéjű kód-szekció.
      Egy kód-szekció:

teszt   CODE
        ...
        ...
        ...

      Egy több kód-szekcióból álló programrészlet:

reset   CODE
        ...
        ...

program CODE
        ...
        ...

      A kód-szekcióknak kezdőcím is adható, ami meghatározza a programmemóriában való későbbi elhelyezkedésüket. Erre szükség lehet megszakítás-vektorok megadásánál, vagy olyan esetben, amikor megkívánt, hogy a programrészlet végrehajtása során ne történjen programmemória-lap váltás.
      Egy kezdőcímmel ellátott kód-szekció:

Reset   CODE    H'0000'
        ...
        ...
        ...

      Az objektum fájlokban szereplő utasítások paraméter-megadásának összetettsége korlátozva van. Az utasítás utáni paraméter lehet:
     ˇ konstans: H'1C', D'01';
     ˇ egyetlen szimbólum (deklarált címke): start, reset;
     ˇ szimbólum adatrész kijelölő előtaggal: low cim01, high start;
     ˇ szimbólum konstanssal növelve vagy csökkentve: start+3;
     ˇ szimbólum konstanssal növelve vagy csökkentve, adatrész kijelölő előtaggal: low (tablazat+2).
      A low, high és upper adatrész kijelölő előtagok jelentését a műveleti jeleket bemutató fejezet írja le.

Vissza a lap tetejére

      Objektum fájlok esetében az általános adatmemória-terület azonosítóinak megadása az adat-szekciókban lehetséges, amelyek a következők lehetnek:
     ˇ az UDATA fordításvezérlő utasítással kezdődő értékadás nélküli deklarációs rész;
     ˇ az UDATA_OVR fordításvezérlő utasítással kezdődő értékadás nélküli felülírható deklarációs rész;
     ˇ az UDATA_SHR fordításvezérlő utasítással kezdődő értékadás nélküli deklarációs rész a minden lapról elérhető adatmemória-helyekhez;
     ˇ az IDATA fordításvezérlő utasítással kezdődő értékadásos deklarációs rész.
      Az adat-szekciókat bemutató programpéldák a fordításvezérlő utasítások leírásánál találhatók.

      A konfigurációs biteket és az azonosító mezőt beállító __CONFIG, illetve __IDLOCS fordításvezérlő utasítások csak egyetlen objektum fájlban szerepeljenek.

      A más objektum fájlok által is felhasználható külső címkéket a GLOBAL fordításvezérlő utasítással kell kijelölni a már definiált címkék közül.
      A más objektum fájlokban deklarált külső címkéket az EXTERN fordításvezérlő utasítással kell belső használatra megadni.

      Mivel a memórialapozó utasításokat objektum fájlok esetében nem lehet előre megadni, az MPLINK program az összefűzéskor elvégzi az automatikus lapozó utasítás beszúrást. Ehhez szükséges, hogy a memóriahely-azonosító címkék előtt szerepeljen az ezt kiváltó PAGESEL, BANKSEL vagy BANKISEL fordításvezérlő utasítás.

      Objektum fájlok írásakor az ORG fordításvezérlő utasítás helyett a CODE utasítást kell alkalmazni.

      Azt, hogy a forrásfájl végrehajtható hexadecimális adatfájlnak vagy hordozható objektum fájlnak fordítódjon, az MPASM program parancssorában, illetve DOS kezelőfelületén vagy Windows kezelőfelületén kell beállítani.

Vissza a lap tetejére

      A következőkben egy hagyományos programrészlet és az ugyanazt megvalósító objektum fájl részletek kerülnek bemutatásra. Egy nyolcbites szorzás szubrutint használó program:

  processor 16f84a  
 
;*******************************************************************
;Deklarációs rész
;*******************************************************************
 
... ... ...  
SZORZANDO equ H'20' ;az első 8-bites tényező
SZORZO equ H'21' ;a második 8-bites tényező
EREDM_FELSO equ H'22' ;a 16-bites eredmény felső bájtja
EREDM_ALSO equ H'23' ;a 16-bites eredmény alsó bájtja
SZAMLALO equ H'24' ;a szorzás segédregisztere
... ... ...  
 
;*******************************************************************
;Főprogram
;*******************************************************************
 
... ... ...  
  ... ...  
  movwf SZORZANDO ;az első tényező megadása
  ... ...  
  movwf SZORZO ;a második tényező megadása
  ... ...  
  call SZORZAS ;a szorzó szubrutin hívása
  ... ...  
  ... ...  
 
;*******************************************************************
;Szubrutinok
;*******************************************************************
 
... ... ...  
  ... ...  
SZORZAS clrf EREDM_FELSO  
  clrf EREDM_ALSO  
  movlw H'08'  
  movwf SZAMLALO ;a számláló kezdőérték beállítása
  movf SZORZANDO,0 ;a SZORZANDO W-be másolása
  bcf STATUS,0 ;a túlcsordulás jelzőbit nullázása
CIKLUS rrf SZORZO,1  
  btfsc STATUS,0  
  addwf EREDM_FELSO,1  
  rrf EREDM_FELSO,1  
  rrf EREDM_ALSO,1  
  decfsz SZAMLALO,1  
  goto CIKLUS  
  return    
... ... ...  
  ... ...  
 
  end    

Vissza a lap tetejére

      Egy 8-bites szorzás szubrutint megvalósító objektum fájl:

  processor 16f84a  
  include "P16F84A.INC"  
 
;*******************************************************************
;Adat-szekció
;*******************************************************************
 
  udata    
SZORZANDO res 1 ;az első 8-bites tényező
SZORZO res 1 ;a második 8-bites tényező
EREDM_FELSO res 1 ;a 16-bites eredmény felső bájtja
EREDM_ALSO res 1 ;a 16-bites eredmény alsó bájtja
SZAMLALO res 1 ;a szorzás segédregisztere
  global SZORZANDO, SZORZO, EREDM_FELSO, EREDM_ALSO
 
;*******************************************************************
;Kód-szekció
;*******************************************************************
 
  code    
SZORZAS
  global SZORZAS  
  clrf EREDM_FELSO  
  clrf EREDM_ALSO  
  movlw H'08'  
  movwf SZAMLALO ;a számláló kezdőérték beállítása
  movf SZORZANDO,0 ;a SZORZANDO W-be másolása
  bcf STATUS,0 ;a túlcsordulás jelzőbit nullázása
CIKLUS rrf SZORZO,1  
  btfsc STATUS,0  
  addwf EREDM_FELSO,1  
  rrf EREDM_FELSO,1  
  rrf EREDM_ALSO,1  
  decfsz SZAMLALO,1  
  goto CIKLUS  
  return    
 
  end    

Vissza a lap tetejére

      Egy, a szorzás szubrutint hívó, másik objektum fájl:

  processor 16f84a  
  include "P16F84A.INC"  
 
;*******************************************************************
;Adat-szekció
;*******************************************************************
 
... ... ...  
... ... ...  
  extern SZORZANDO, SZORZO, EREDM_FELSO, EREDM_ALSO
  extern SZORZAS
 
;*******************************************************************
;Kód-szekció
;*******************************************************************
 
  code    
... ... ...  
  ... ...  
  movwf SZORZANDO ;az első tényező megadása
  ... ...  
  movwf SZORZO ;a második tényező megadása
  ... ...  
  call SZORZAS ;a szorzó szubrutin hívása
  ... ...  
  ... ...  
 
  end    

 

  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