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