![]()
Výberová prednáška "Styk mikroprocesora s prostredím"
nadväzuje tiež na prednášku " Základy jadrovej elektroniky ", resp. na
látku zo skrípt D.Kollár: Elektronika a automatizácia II. Skriptá MFF UK
1990 (F).
Nasledujúci zoznam predstavuje súhrn pojmov z prednášky o technických prostriedkoch
(hardwarwe) počítačov a ich príslušenstve (F),
potrebný k správnemu pochopeniu textu v tejto výberovej prednáške. Je to
teda akýsi zoznam otázok, na ktoré by ste mali vedieť odpoveď, resp.
pojmov, o ktorých by ste mali mať konkrétnu predstavu.
Stručný sylabus prednášky "Styk mikroprocesora s prostredím": Prednáška rozširuje informaciu (z prednášky - Základy technického a programového vybavenia) o architektúre mikropočítačov. Podáva informáciu o základoch programovania v jazyku symbolickych inštrukcii (assembleri) a o spôsoboch testovania a odlaďovania krátkych programov na obsluhu rôznych periférnych zariadení a meracích prístrojov s digitálnym rozhraním. Zvláštna pozornosť je venovaná styku mikroprocesora s okolim (paralelný a sériový prenos dát, DMA prenos dát, spôsoby a metódy obsluhy prerušení), tiež prevodníkom AD/DA a obvodu časovača. Prednáška je doplnená praktickými demonštračnými cvičeniami na objasnenie odprednášanej látky. Cieľom prednášky "Styk mikroprocesora s prostredím" je bližšie zoznámenie sa s technickými prostriedkami počítača, predovšetkým s tými, ktoré sú potrebné na realizovanie styku procesora s vonkajšim prostredím (cez paralelné a sériové rozhranie). Na kontrolu činnosti procesora, resp. programov sa používa odlaďovací program Debugger. Pre písanie krátkych demonštračných programov na obsluhu rôznych technických prostriedkov počítača sa používa jazyk symbolických adries a inštrukcii - Assembler. Na záver prednášky sa demonštruje aj spôsob ako spojiť assemblerovskú časť kódu s kódom napísaným v programovacom jazyku vyššej úrovne. Súčasťou prednášky je tvorba krátkych procedúr pre vstup/výstup dát cez paralelné/sériové rozhranie (napr. tlačiareň), spúšťanie rôznych zariadení pomocou časovača, ovládanie DAC a ADC prevodníka, zber údajov v štandarde IMS (z digitálneho volt - ampér - ohm - metra, ovládanie súpravy na meranie ionizujúceho žiarenia RFT), ovládanie modulov CAMAC, riadenie komunikácie medzi dvoma PC prepojených cez paralelný alebo sériový kanál, tvorba jednoduchých rezidentných programov na obsluhu prerušenia. Ide teda o assemblerovské procedúry v reálnom móde mikroprocesora 80x86, stále aktuálne a prakticky nezávislé od súčastnej rýchlej modernizácie procesorov. (Stále ešte platí známy Moorov zákon, podľa ktorého sa výkon procesorov zdvojnásobňuje každých 18 mesiacov a teda držať krok s výdobytkami techniky je prakticky nemožné.) Po prediskutovaní (odprednášaní) určitej časti (kapitoly) prednášky je súčasťou prednášky aj nasledná demonštrácia jednoduchších procedúr priamo na zariadeniach v laboratóriu s následnou "domácou úlohou" na dokončenie alebo vylepšenie zadaného problému. (Základné podprogramy priamo viazané na konkrétny hardware musia byť však doladené v laboratóriu.) Som presvedčený, že prenáška (resp. tento text) bude prínosom k lepšiemu pochopeniu technickej stránky "vnútorností" počítača. Veľký počet priložených demonštračných procedúr (pozbieraných z vyššie uvedenej literatúry ako aj na základe vlastnej inšpirácie) by mohol slúžiť ako doplnok pre komponovanie vlastných procedúr na ovládanie predovšetkým rôznych neštandardných periférii počítača. Predchodcom tohto variantu prednášky v osemdesiatych rokoch bola rovnomenná prednáška avšak zameraná na možnosti mikropočítača PMD-85. Aj keď do budúcnosti možno predpokladať vysokú štandardizáciu prístrojov, vhodných na pripojenie k periférii PC a tým aj naslednej možnosti použitia rôznych dokonalejšich programových produktov (napr. použitia grafického programovacieho jazyka LabView na ovládanie zariadení, ktoré majú štandardný interfejs) na zostavovanie programov pre počítačom riadenú meraciu aparatúru, vždy tu zostane ešte poznávacia funkcia tejto prednášky, hľadajúca odpoveď na otázku: ako to vo vnútri počítača a jeho komponentoch vlastne funguje a ako sa o tom čo najjednoduchšie presvedčiť. Assembler – obecné pojmy a charakteristika jazyka Assembler (oficialne jazyk symbolických adries - F - príklad inštrukcii) je programovací jazyk, v ktorom každý kód inštrukcie generuje jednu inštrukciu strojového jazyka, viazanú na konkrétny procesor počítača (napr.na rozdiel od iného programovacieho jazyka nízkej úrovne C, v ktorom kódovaný príkaz ( ktorý sa už neviaže na konkrétny počítač alebo operačný systém) po prekompilovaní generuje jednu alebo častejšie viac inštrukcii stojového jazyka). “Jazyk nízkej úrovne” znamená, že Assembler pracuje priamo len so štandardnými dátovými typmi ako sú znaky, celé a reálne čísla. Assembler je pre predmet "Styk mikropočítača s prostredím" najjednoduchší jazyk, pomocou ktorého možno skontrolovať fungovanie styku počítača s prostredím . Spracovanie programu Základné spracovanie programu v assembleri (F)
prebieha niekoľkými fázami, ktoré sú schématicky znázornené na obrázku
1.
Zdrojový súbor .asm (F), v ktorom je program je treba pre správne preloženie doplniť:
Implicitným tvarom dát v assembleri (F) je unsigned int (celé čísla od dlžke jedného alebo niekoľko bajtov (DB, DW, DD, DQ, DT- s priradením pamätovej lokality ), bez znamienka). Obsah bunky 1bajt môže predstavovať aj znak typu char o dlžke 8 bitov. Často na začiatku programu sa prideľuje určitej oblasti pamäte meno, poprípade význačným premeným a konštantám (typ D, B, H, Q) sa deklaruje meno (EQU - bez priradenia pamätovej lokality). Terminálový vstup a výstup Najjednoduchšim spôsobom pre vstup dát je klávesnica (F, v procese merania sériový F alebo paralelný F port). Najjednoduchším spôsobim výstupu je obrazovka (F) alebo tlačiareň (F). Vo väčšich programoch sa na vstup dát používajú súbory. Podobne aj výstupy je výhodné ukladať do súborov. Vstup zo súboru a výstup do súboru Z hardwareového pohľadu je každý súbor postupnosť bajtov (Byte), uložených na nejakom médiu v niekoľkých blokoch. Bloky majú rovnakú veľkosť a nemusia nutne ležať za sebou. Súbor je teda vytváraný podľa pravidiel daných operačným systémom. Prístup k súboru je možný sekvenčne alebo aj náhodne. Z užívateľského hľadiska je súbor postupnosť po sebe sledujúcich bajtov od začiatku do konca súboru. Úlohou operačného systému je dodať tieto bajty v správnom poradí. Z dôvodov zvýšenia rýchlosti sú I/O operácie bufferované, tzn:
Samozrejme pre iné možnosti vstupu a výstupu ako do/zo súboru sa používajú nebufferované I/O operácie. Práca so súbormi sa veľmi neodlišuje od práce s obrazovkou a klávesnicou. V operačnom sytéme je definované niekoľko konštantných ukazovateľov tzv. handle(F), ktoré predstavujú súbory, otvorené operačným systémom pri spustení programu. MS-DOS podporuje 5 štandardných zariadení, ktoré slúžia k zabezpečeniu základnej komunikácie medzi počítačom a užívateľom:
Ak chceme so súborom pracovať, je ho treba otvoriť , špecifikovať spôsob otvorenia súboru (textový alebo binárny súbor) a činnosť, ktorá sa bude vykonávať (čítanie / zápis). Po skončení práce so súborom je treba oznámiť operačnému systému, že môže zatvoriť prístup k súboru. V textovom súbore sa používajú špecialne znaky na označenie:
Obsah binárneho súboru nie je ovplyvňovaný funkciou zápisu a čítania. To znamená, že to čo do biárneho súboru zapíšeme, to sa bezo zmeny prečíta. Výhodou binárnych súborov je, že sa s nimi pracuje omnoho rýchlejšie ako s textovými súbormi. Jednak sú binárne súbory kratšie a jednak pri zápise čísla do textového súboru treba vykonať jeho konverziu z vnútornej reprezentácie čísla v počítači na textovú podobu a pri čítaní konverziu obrátene - z textu na číslo. Tieto konverzie v binárnych súboroch odpadajú, pretože sa do nich zapisuje priamo obsah pamäte po bajtoch. Binárne súbory sú preto výhodnejšie pri ukladaní rozmernejšich dát. Pre uloženie znakov nemajú príliš veľký význam, pretože znak v textovom súbore zaberá rovnako ako v binárnom súbore jeden bajt. V textových súboroch sa moc nevyužíva možnosť
pohybu v súboroch – jednotlivé znaky sa z nich jednoduco sekvenčne snímajú.
V binárnych súboroch, kde sú známe presné veľkosti položiek, je mnohokráť
veľmi účelné nastaviť ukazovateľ (index pointer) do súboru na ľubovoľné
miesto. Od tohto miesta sa bude ďalej čítať alebo zapisovať (adresovanie
s pomocou bázového a indexového registra), bez nutnosti zdržovať sa čítaním
predošlých údajov.
Spracovanie zdrojového textu Pri prvom zbehnutí assemblera (pôsobením preprocesora) sa:
Pri písaní programov sa často vyskytne prípad, keď sa mnohokrát používa nejaká funkcia, ktorá je veľmi krátka, napr. vykonáva jednoduchý výpočet nejakej hodnoty. Takúto funkciu možno samozrejme napísať ako podprogram a podľa potreby ju volať pomocou inštrukcie volania (Call F), ale niekedy môže byť pokladaný takýto spôsob za málo efektívny. Ak je totiž funkcia veľmi krátka, tak niekedy jej administratíva, t.j. odovzdanie parametrov, úschova potrebných obsahov registrov, úschova návratovej adresy, skok do funkcie, návrat z miesta volania z funkcie do miesta volania a výber použitých parametrov, je dlhší ako samotný užitočný kód funkcie. Táto administratíva samozrejme zdržuje priebeh programu. Pomocou zadefinovania makra (telo makra vložené medzi pseudo/op MACRO a zakončovacíiu inštrukciu ENDM F) pred prvým výskytom v programe možno zjednodušiť tvar zdrojového programu. Ak sa potom hocikde v zdrojovom programe vyskytne príslušné meno makra preprocesor assemblera ho nahradí konkrétnymi inštrukciami z tela definície makra – rozvinie makro v mieste vyskytu mena makra. Samozrejme pri použití makra sa zväčší dĺžka programu. Je teda na programátorovi akým spôsobom optimalizuje svoj program – či bude kratší a pomalší alebo dlhší a rýchlejší. Pri písaní komplikovanejšich programov si možno makra pripraviť do súboru .lib (F) - vytvoriť knižnicu makier a tú pomocou príkazu include automaticky pripojiť k zdrojovému súboru. Oddelený preklad zdrojového textu Niekedy je výhodné rozdeliť si program do niekoľkých
súborov a každý súbor preložiť zvlášť – vznikne tak niekoľko .obj súborov,
ktoré sa spoja do jedného spoločného programu až pomocou zostavovacieho
programu (linkera). Na prvý pohľad to vyzerá ako zbytočné skomplikovanie,
ale v praxi je to jediný spôsob ako rozumne zvládnuť prácu s väčšími programami
(F).
Tento spôsob je výhodný aj s ohľadom na trvanie prekladu a obsadenie pamäte
pri preklade. Pri opakovanom preklade (najčastejšie pri ladení pomocou
debuggera) potom stačí prekladať len ten súbor, ktorý bol skutočne modifikovaný.
Podmienený preklad V mnohých prípadoch sa zložitejšie programy doplňujú
rôznymi pomocnými výpismi, testami a pod., ktoré majú uľahčiť odladenie
programu. Po odladení programu sú tieto doplnkové informácie už nepotrebné,
zdržujú vykonávaný program a treba ich z programu odstrániť. Často sa pri
záverečnom zdokonaľovaní podarí zmazať aj potrebné časti, ktoré využíva
program. V assembleri pomocou rôznych podmienených príkazov (F)
možme určiť preprocesoru, ktoré časti budú podmienene prekladané a nebudú
tak trvalou súčasťou programu.
Podprogram, procedúra, funkcia Formálne v assembleri existujú len volania podprogramov v zmysle pre procedúru a funkciu. Procedúra je podprogram, ktorý nevracia návratovú hodnotu, na rozdiel od funkcie, ktorej úlohou je zistiť výstup pre špecifikované vstupné parametre. Odovzdávať parametre do funkcie možno (F):
Každá premená musí mať behom svojej existencie pridelený pamäťový priestor (F), ktorý veľkosťou zodpovedá premenej. Meno premenej (identifikátor) je vlastne symbolická adresa tohto pamäťového priestoru. Akcia, ktorá vyhradzuje pamäťový priestor sa nazýva alokácia. Poznáme dva základné typy alokácie – statickú a dynamickú. Statická alokácia pamäti – miesto v pamäti (v dátovej oblasti – data area F) sa alokuje už počas prekladu, teda pred spustením programu. Tento typ alokácie sa používa vtedy, ak dopredu dokážeme zadefinovať prekladaču nároky programu na pamäť. Počas vykonávania programu sa nevykonáva žiadna manipulácia s prideľovaním pamäte. Statická alokácia vymedzuje miesto v dátovej oblasti. Globálne premené (F) môžu byť alokované len staticky. Dynamická alokácia pamäti – miesto v pamäti (v hromade – heap alebo v zásobníku - stack F) sa alokuje počas behu programu. Počas behu programu sa teda alokuje pamäť určitej dĺžky, ktorá nemá špecialne symbolické meno – identifikátor. Táto alokácia sa zaisťuje sama pri volaní funkcie s využitím informácie o kóde, ktorý sa alokuje v zásobníku – stack. Dynamické prideľovanie pamäti zo zásobníku – skack je najčastejšie používaný spôsob. Pomocou heapu možno prideliť blok pamäti potrebnej veľkosti (ktorú musíme sami určiť) pre novo zadefinovaný zásobník (F). Po skončení manipulácie s dynamickou pamäťou v oblasti novozadefinovaného zásobníka treba zabezpečiť podmienky návratu do pamäti pôvodného zásobníka. Existencia lokálnych premených začína pri vstupe do funkcie (podprogramu) a končí sa pri výstupe z tejto funkcie. Potom môže byť pamäť, použitá vo funkcii pre túto premenú, využitá pre iné účely, napr. pre inú lokálnu premenú definovanú v inej, práve prebiehajúcej funkcii. Globálna premená, resp. parameter – premená, ktorej existencia začína so spustením programu a končí s ukončením programu (F). Lokálna premená, resp. parameter – premená,
ktorej existencia začína po vstupe do procedúry, v ktorej je definovaná
a končí sa s ukončením procedúry (F).
Volanie funkcie (podprogramu, ktorý používa lokálny parameter) môže byť
aj vhniezdené – jedna funkcia môže obsahovať vo svojom tele volanie ďalšej
funkcie. Normálne (bez dodatočných úprav) sú formálne parametre a lokálne
premené teda prístupné len vo funkcii, v ktorej boli definované (podľa
toho ako boli ukladané príslušné parametre do zásobníku - stack).
|