VYSOK ´
E U ˇ
CEN´I TECHNICK ´
E V BRN ˇ
E
BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA INFORMA ˇ
CN´ICH TECHNOLOGI´I
´
USTAV PO ˇ
C´ITA ˇ
COV ´
YCH SYST ´
EM ˚
U
FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS
N ´
AVRH A IMPLEMENTACE J ´
ADRA V´ICE ´
ULOHOV ´
EHO
OPERA ˇ
CN´IHO SYST ´
EMU B ˇ
E ˇ
Z´IC´IHO NA PLATFORM ˇ
E
HC08
DESIGN AND IMPLEMENTATION OF A MULTITASK OPERATING SYSTEM KERNEL RUNNING ON HC08
BAKAL ´
A ˇ
RSK ´
A PR ´
ACE
BACHELOR’S THESIS
AUTOR PR ´
ACE
ROMAN DAMBORSK ´
Y
AUTHOR
VEDOUC´I PR ´
ACE
Ing. JOSEF STRNADEL, Ph.D.
SUPERVISOR
Zad´
an´ı
N´
avrh a implementace j´
adra v´ıce´
ulohov´eho operaˇcn´ıho syst´emu
bˇeˇz´ıc´ıho na platformˇe HC08
1. Seznamte se s architekturou a programov´ym modelem mikrokontrol´er˚u ˇrady HC08. 2. Seznamte se s v´yvojov´ymi n´astroji pro tuto ˇradu mikrokontrol´er˚u a se z´aklady jejich
programov´an´ı v asembleru a jazyce C.
3. Pro zadan´y typ mikrokontrol´eru ˇrady HC08 navrhnˇete rozhran´ı j´adra v´ıce´ulohov´eho operaˇcn´ıho syst´emu.
4. J´adro z bodu 3 implementujte v asembleru nebo jazyce C. 5. Navrhnˇete a implementujte nˇekolik jednoduch´ych proces˚u.
6. Procesy z pˇredchoz´ıho bodu vyuˇzijte k ovˇeˇren´ı funkˇcnosti syst´emu pˇr´ımo v mikrokon-trol´eru.
Licenˇcn´ı smlouva
Licenˇcn´ı smlouva je uloˇzena v archivu Fakulty informaˇcn´ıch technologi´ı Vysok´eho uˇcen´ı technick´eho v Brnˇe.
Abstrakt
Software pro vestavˇen´e syst´emy je ˇcasto navrhov´an tak, aby plnil jedin´y ´ukol. Pokud je ale poˇzadov´ano prov´adˇen´ı v´ıce ´uloh souˇcasnˇe, b´yv´a ˇreˇsen´ı jedno´uˇcelov´e, bez moˇznosti pouˇzit´ı z´akladu programu pro jinou aplikaci. Navrhnul jsem proto rozhran´ı, kter´e umoˇzn´ı nez´avisle na povaze jednotliv´ych ´uloh jejich souˇcasn´e zpracov´an´ı. J´adro je implementov´ano s ohledem na znovupouˇzitelnost. Pˇri n´avrhu rozeb´ır´am jednotliv´e pˇr´ıstupy k ˇreˇsen´ı. Pro implementaci jsem pouˇzil pl´anovaˇc ´uloh zaloˇzen´y na algoritmu Round–Robin. V´ıce´ulohovosti je dosaˇzeno pravideln´ym pˇrep´ın´an´ım jednotliv´ych ´uloh, s vyuˇzit´ım pˇreruˇsovac´ıho podsyst´emu. Jako c´ılovou architekturu jsem zvolil mikrokontrol´ery Motorola ˇrady HC08.
Kl´ıˇcov´
a slova
j´adro, v´ıce´ulohovost, v´ıce´ulohov´y operaˇcn´ı syst´em, HC08, pˇrep´ın´an´ı proces˚u, preempce, periodick´e ´ulohy
Abstract
Software for embedded systems is usually designed for performing one particular task. If there is need to serve more tasks at once, solution is used to be dedicated without potential reusability for another application. That is why I’ve designed an interface which allows simultaneous execution of single tasks independently of their character. Kernel is imple-mented in consideration of reusability. I analyse individual approaches to solution. I used Round–Robin algorithm for implementing tasks management. Multitasking is achieved by periodical switching of single tasks. Interrupt subsystem is being used for this. As a target architecture, Motorola HC08 microcontrollers were chosen.
Keywords
kernel, multitasking, multitask operating system, HC08, processes switching, preemption, periodical tasks
Citace
Roman Damborsk´y: N´avrh a implementace j´adra v´ıce´ulohov´eho operaˇcn´ıho syst´emu bˇeˇz´ıc´ıho na platformˇe HC08, bakal´aˇrsk´a pr´ace, Brno, FIT VUT v Brnˇe, 2007
N´
avrh a implementace j´
adra v´ıce´
ulohov´eho operaˇcn´ıho syst´emu
bˇeˇz´ıc´ıho na platformˇe HC08
Prohl´
aˇsen´ı
Prohlaˇsuji, ˇze jsem tuto bakal´aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pana Ing. Josefa Strnadela, Ph.D.
. . . . Roman Damborsk´y
14. kvˇetna 2007
Podˇekov´
an´ı
R´ad bych podˇekoval vedouc´ımu m´e bakal´aˇrsk´e pr´ace Ing. Josefu Strnadelovi, Ph.D., za podnˇetn´e pˇripom´ınky a odborn´e rady. Dˇekuji tak´e Ing. Richardu R˚uˇziˇckovi, Ph.D., za poskytnut´ı v´yvojov´eho kitu k praktick´emu ovˇeˇren´ı funkˇcnosti implementovan´eho j´adra.
c
Roman Damborsk´y, 2007.
Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe in-formaˇcn´ıch technologi´ı. Pr´ace je chr´anˇena autorsk´ym z´akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´avnˇen´ı autorem je nez´akonn´e, s v´yjimkou z´akonem definovan´ych pˇr´ıpad˚u.
Obsah
1 Uvod´ 3
2 C´ıle a motivace 4
3 Popis architektury HC08 5
3.1 Vestavˇen´e syst´emy . . . 5
3.1.1 Mikroprocesor . . . 5
3.1.2 Mikrokontrol´er . . . 5
3.1.3 CISC, RISC . . . 6
3.2 Platforma HC08 . . . 7
3.3 Programovac´ı model . . . 8
3.4 Pamˇet’ov´y model . . . 10
3.5 Instrukˇcn´ı sada . . . 11
3.6 Syst´em pˇreruˇsen´ı . . . 12
3.6.1 Podprogram. . . 12
3.6.2 Obsluha pˇreruˇsen´ı . . . 12
3.7 Periferie . . . 14
4 N´avrh j´adra 15 4.1 Cinnost operaˇˇ cn´ıho syst´emu . . . 15
4.2 J´adro . . . 15
4.3 V´ıce´ulohovost . . . 17
4.4 Pl´anovaˇc. . . 17
4.5 Zajiˇstˇen´ı v´ıce´ulohovosti . . . 19
4.6 Moˇznosti architektury HC08. . . 20
4.6.1 Vyuˇzit´ı ˇcasovaˇce . . . 20
4.6.2 Z´asobn´ık . . . 21
4.7 Inicializace ´uloh j´adra . . . 23
4.8 Bˇeh j´adra . . . 24
4.9 Omezen´ı dan´a architekturou. . . 25
5 Implementace 26 5.1 V´yvojov´e prostˇredky . . . 26
5.2 D˚uleˇzit´e konstanty . . . 27
5.3 Inicializace j´adra . . . 27
5.4 Vkl´ad´an´ı jednotliv´ych ´uloh . . . 29
5.5 Spuˇstˇen´ı j´adra . . . 32
5.7 Zaˇrazen´ı ´uloh pod spr´avu j´adrem a spuˇstˇen´ı j´adra . . . 35 6 Testovac´ı ´ulohy 36 6.1 Uloha 1´ . . . 36 6.2 Uloha 2´ . . . 37 6.3 Uloha 3´ . . . 38 6.4 Uloha 4´ . . . 38 7 Z´avˇer 40 7.1 Zhodnocen´ı funkˇcnosti . . . 40
Kapitola 1
´
Uvod
Kdyˇz v polovinˇe 20. stolet´ı vznikaly prvn´ı prototypy analogov´ych poˇc´ıtac´ıch stroj˚u, stˇeˇz´ı si mohli jejich n´avrh´aˇri a konstrukt´eˇri pˇredstavit, ˇze by vytvoˇren´y syst´em mohl b´yt pouˇziteln´y pro jin´y, neˇz jimi analyzovan´y ´ukol. S n´astupem digit´aln´ıch technologi´ı se objevily prvn´ı programovateln´e poˇc´ıtaˇce. Neumoˇzˇnovaly sice jednoduˇse zcela zmˇenit typ ´ulohy, pro kterou byly navrˇzeny, ale byly jiˇz vybaveny mechanismy pro modifikaci nˇekter´ych parametr˚u. T´ım bylo dosaˇzeno jist´e variability ´uloh a lze ˇr´ıci ˇze i znovupouˇzitelnosti. Moˇznost kompletn´ı obmˇeny cel´eho algoritmu stroje byla dalˇs´ım logick´ym krokem ve v´yvoji.
Jakmile byly zn´amy zp˚usoby pouˇzit´ı poˇc´ıtaˇce k prov´adˇen´ı v´ıce r˚uzn´ych ´uloh, doˇslo na ot´azku, zda by nebylo moˇzn´e zajistit vykon´av´an´ı v´ıce ´uloh souˇcasnˇe. V´ypoˇcetn´ı ˇcas poˇc´ıtaˇce byl totiˇz velmi drah´y a periferie pomal´e. Vˇetˇsinu ˇcasu tedy procesor poˇc´ıtaˇce ˇcekal na dokonˇcen´ı perifern´ıch operac´ı. V´ıce´ulohovost pˇrinesla moˇznost vyuˇz´ıt ˇcas, kdy procesor ˇ
cek´a na dokonˇcen´ı perifern´ı operace, k prov´adˇen´ı dalˇs´ı ´ulohy.
V 80. letech 20. stolet´ı doˇslo k masov´emu rozˇs´ıˇren´ı poˇc´ıtaˇc˚u. To bylo umoˇznˇeno jednak d´ıky technologii v´yroby hardware, ale stejnˇe d˚uleˇzitou roli sehr´ala i
”duˇse“ poˇc´ıtaˇce, tedy jeho programov´e vybaven´ı. Ne kaˇzd´y totiˇz rozumˇel tomu, jak konkr´etn´ı poˇc´ıtaˇc funguje a jak komunikovat s pˇripojen´ymi zaˇr´ızen´ımi. Tady pˇrich´az´ı do hry operaˇcn´ı syst´em (d´ale OS), kter´y m´a za ´ukol zpˇr´ıjemnit uˇzivateli pr´aci s poˇc´ıtaˇcem a jeho periferiemi. Sloˇzitost a propracovanost jednotliv´ych operaˇcn´ıch syst´em˚u se m˚uˇze liˇsit. V nˇekter´ych pˇr´ıpadech se vyˇzaduje pouze z´akladn´ı funkcionalita zahrnut´a v tzv. j´adru, jindy poskytuje OS funkce pro pr´aci s celou ˇradou periferi´ı, grafick´e uˇzivatelsk´e rozhran´ı atd. Pˇr´ıkladem jednoduˇsˇs´ıch OS mohou b´yt napˇr. OS/360 nebo CP/M. Mezi sloˇzitˇejˇs´ı OS pak lze zaˇradit Linux, Mac OS, Microsoft Windows.
S technologick´ym v´yvojem v oblasti elektroniky a poˇc´ıtaˇcov´ych syst´em˚u se OS zaˇc´ınaj´ı objevovat i mimo osobn´ı poˇc´ıtaˇce. St´ale ˇcastˇeji je lze naj´ıt jako souˇc´ast ve v´yrobn´ıch pro-cesech, automobilov´em pr˚umyslu, zabezpeˇcovac´ı a komunikaˇcn´ı technice apod. Vˇetˇsinou se zde vyskytuj´ı ve formˇe vestavˇen´ych zaˇr´ızen´ı.
V t´eto pr´aci navrhnu j´adro operaˇcn´ıho syst´emu, kter´y bude umoˇzˇnovat souˇcasn´y bˇeh v´ıce ´uloh. C´ılovou platformou bude rodina mikrokontrol´er˚u HC08, jej´ıˇz charakteristick´e vlastnosti popisuje kapitola 3. O r˚uzn´ych pˇr´ıstupech k ˇreˇsen´ı problematiky v´ıce´ulohovosti pojedn´av´a kapitola4. Z popsan´ych princip˚u pop´ıˇsi v kapitole5konkr´etn´ıˇreˇsen´ı pro vybran´y typ mikrokontrol´eru. Pro ovˇeˇren´ı funkˇcnosti j´adra jsem navrhnul nˇekolik jednoduch´ych testovac´ıch ´uloh, popsan´ych v kapitole 6. Zhodnocen´ı v´ysledk˚u pr´ace a n´avrhy k dalˇs´ımu rozˇsiˇrov´an´ı uv´ad´ım v kapitole7.
Kapitola 2
C´ıle a motivace
C´ılem pr´ace je navrhnout a implementovat j´adro v´ıce´ulohov´eho operaˇcn´ıho syst´emu pro vestavˇen´e zaˇr´ızen´ı.
N´aˇs OS bude zastoupen pouze na t´e nejniˇzˇs´ı ´urovni, formou j´adra. Bude plnit pouze z´akladn´ı funkce, nezbytn´e k zajiˇstˇen´ı v´ıce´ulohovosti. Jako c´ılov´a platforma je uvaˇzov´ana rodina mikrokontrol´er˚u Motorola HC08 [2].
Specifikujme si z´akladn´ı poˇzadavky na naˇse j´adro a pr´aci s n´ım: • Vkl´ad´an´ı ´uloh mus´ı b´yt jednoduch´e a uˇzivatelsky pˇr´ıvˇetiv´e • Pˇrep´ın´an´ı jednotliv´ych ´uloh bude zajiˇst’ov´ano automaticky
• Bude pˇr´ıtomn´y mechanismus pro indikaci chyby pˇri inicializaci j´adra • Pamˇet’ov´y prostor jednotliv´ych ´uloh bude chr´anˇen j´adrem
• Pamˇet’ov´a n´aroˇcnost j´adra bude minim´aln´ı • Pˇrep´ın´an´ı ´uloh bude ˇcasovˇe co nejefektivnˇejˇs´ı
• Pokus´ıme se dos´ahnout pˇrenositelnosti mezi jednotliv´ymi variantami mikrokontrol´er˚u
Spln´ıme–li uveden´e poˇzadavky, z´ısk´ame syst´em, s jehoˇz pomoc´ı bude moˇzno zajistit prov´adˇen´ı v´ıce ´uloh zd´anlivˇe soubˇeˇznˇe. Vlastn´ı ´ulohy budou na j´adru nez´avisl´e, tzn. bude moˇzn´e jejich pouˇzit´ı i bez j´adra (Nebereme zde ale v potaz pˇr´ıpadn´a sd´ılen´a data mezi ´
ulohami).
Po implementaci a ´uspˇeˇsn´em ovˇeˇren´ı funkˇcnosti se budeme l´epe orientovat v z´akladn´ı problematice funkce j´adra operaˇcn´ıho syst´emu. Rozˇs´ıˇr´ıme si tak´e znalosti t´ykaj´ıc´ı se zvo-len´eho mikrokontrol´eru a jemu pˇr´ıbuzn´ych typ˚u.
Kapitola 3
Popis architektury HC08
3.1
Vestavˇ
en´
e syst´
emy
Poˇc´ıtaˇcov´e syst´emy n´as v souˇcasn´e dobˇe obklopuj´ı ze vˇsech stran. Typick´ym pˇredstavitelem je osobn´ı poˇc´ıtaˇc (PC). Hlavn´ım rysem PC je jejich univerz´alnost, tedy moˇznost vyuˇz´ıt v´ypoˇcetn´ı v´ykon k nˇekolika r˚uzn´ym ´ukon˚um, od zpracov´an´ı video z´aznamu, pˇres veden´ı datab´aze klient˚u, aˇz po kancel´aˇrsk´e pr´ace a z´abavu.
Vestavˇen´ym syst´emem rozum´ıme takov´y syst´em, kter´y je souˇc´ast´ı jin´eho zaˇr´ızen´ı. Data zpracov´avan´a vestavˇen´ym syst´emem jsou uˇzivateli skryta. Narozd´ıl od PC pln´ı vestavˇen´e syst´emy specifick´e ´ukoly, kter´e se nemˇen´ı. Jedn´a se napˇr. o dek´odovac´ı obvody v televizoru, regulaci teploty ve vyt´apˇec´ım zaˇr´ızen´ı apod.
Vestavˇen´e syst´emy proˇsly za dobu sv´e existence v´yznamn´ym v´yvojem, kter´y v souˇcasn´e f´azi umoˇzˇnuje jejich nasazen´ı t´emˇeˇr v kaˇzd´e oblasti lidsk´e ˇcinnosti. Zpoˇc´atku byly reali-zov´any pomoc´ı pevn´e logiky, pouˇz´ıvan´e pro ˇr´ızen´ı jednoduˇsˇs´ıch aplikac´ı. Pozdˇeji byly vy-vinuty mikroprocesory, kter´e dovolily modifikovat ˇr´ıd´ıc´ı program podle aktu´aln´ı potˇreby. Slab´ym m´ıstem mikroprocesor˚u bylo pouˇzit´ı extern´ıho pamˇet’ov´eho podsyst´emu. S n´ astu-pem mikrokontrol´er˚u byla extern´ı pamˇet’ pˇresunuta na stejn´y ˇcip jako mikroprocesor. Doˇslo tak k dalˇs´ı miniaturizaci ˇr´ıd´ıc´ıch syst´em˚u.
3.1.1 Mikroprocesor
Mikroprocesor je z´akladn´ı procesorovou jednotkou (d´ale CPU). Obsahuje aritmeticko logic-kou jednotku (ALU), dekod´er instrukc´ı, registry a ˇradiˇc. Blokov´e sch´ema mikroprocesoru je uvedeno na obr´azku3.1(ohraniˇceno ˇc´arkovanˇe). ˇRadiˇc ˇr´ıd´ı chod cel´eho mikroprocesoru. Je tvoˇren registrem instrukc´ı, dekod´erem instrukc´ı a ˇr´ıd´ıc´ım obvodem. Tato ˇc´ast je naz´yv´ana ˇr´ıd´ıc´ı. Pomoc´ı sbˇernice je propojena s pamˇet’ovou ˇc´ast´ı tvoˇrenou ALU a souborem registr˚u. Pro vytvoˇren´ı poˇc´ıtaˇce je nutno pˇridat vnˇejˇs´ı operaˇcn´ı pamˇet’ a potˇrebn´e perifern´ı jed-notky, pˇripojen´e pomoc´ı adresov´e, ˇr´ıd´ıc´ı a datov´e sbˇernice. Lze tak vytvoˇrit jednodeskov´y poˇc´ıtaˇc.
3.1.2 Mikrokontrol´er
Mikrokontrol´ery neboli mikropoˇc´ıtaˇce z´ısk´avaj´ı v posledn´ıch nˇekolika letech znaˇcnou pozor-nost. D´ıky jejich miniaturn´ım rozmˇer˚um je moˇzn´e je zahrnout do vˇetˇsiny zaˇr´ızen´ı, ve kter´ych je vyˇzadov´ana sloˇzitˇejˇs´ı logika a komunikace s uˇzivatelem. Blokov´e sch´ema mikrokontrol´eru je zn´azornˇeno na obr´azku3.1.
Obr´azek 3.1: Struktura mikroprocesoru a mikrokontrol´eru
Narozd´ıl od mikroprocesor˚u obsahuj´ı na jednom ˇcipu nav´ıc operaˇcn´ı pamˇet’ a perifern´ı jednotky. J´adro z˚ust´av´a u jednotliv´ych ˇclen˚u rodiny stejn´e, liˇs´ı se velikost pamˇeti a jednot-liv´e periferie. D˚uleˇzitou roli hraje ˇs´ıˇrka datov´e sbˇernice, podle kter´e dˇel´ıme mikrokontrol´ery na osmi, ˇsestn´acti a dvaatˇriceti bitov´e. Mezi nejzn´amˇejˇs´ı v´yrobce patˇr´ı Atmel, Motorola (novˇe Freescale), Microchip (PIC), Siemens a Toshiba.
3.1.3 CISC, RISC
Kaˇzd´a rodina, pˇr´ıpadnˇe kaˇzd´y typ mikroprocesor˚u, se od ostatn´ıch liˇs´ı svou instrukˇcn´ı sadou. Mikroprocesory pak podle vlastnost´ı instrukˇcn´ı sady dˇel´ıme na dvˇe skupiny:
CISC Z anglick´eho
”Complex Instruction Set Computer“ – poˇc´ıtaˇc s komplexn´ı instrukˇcn´ı sadou. Tyto procesory se jednoduˇse programuj´ı a efektivnˇe vyuˇz´ıvaj´ı pamˇet’. D´ıky velk´emu poˇctu sloˇzit´ych instrukc´ı a adresovac´ıch m´od˚u bylo dosaˇzeno zmenˇsen´ı program˚u a niˇzˇs´ıho poˇctu pˇr´ıstup˚u do hlavn´ı pamˇeti.
Tento pˇr´ıstup ale nebyl vˇzdy nejefektivnˇejˇs´ım. V pˇr´ıpadˇe pˇr´ıliˇs sloˇzit´ych instrukc´ı bylo jejich dek´odov´an´ı a proveden´ı pˇr´ıliˇs n´aroˇcn´e na hardwarovou stavbu mikroprocesoru. Vypla-tilo se tedy pouˇz´ıt vˇetˇs´ı mnoˇzstv´ı jednoduˇsˇs´ıch instrukc´ı, kter´e byly ve v´ysledku vykon´any rychleji a s menˇs´ımi n´aroky na strukturu mikroprocesoru.
Mezi pˇredstavitele t´eto kategorie lze zaˇradit Intel 80x86, VOX a Motorolu 68K. RISC
Z anglick´eho
”Reduced Instruction Set Computer“ – poˇc´ıtaˇc s redukovanou instrukˇcn´ı sa-dou. Tato koncepce se net´yk´a pouh´eho redukov´an´ı rozsahu instrukˇcn´ıho soboru. Popisuje
tak´e, jak by mˇel b´yt poˇc´ıtaˇc realizov´an a jak by mˇel fungovat. Poznatky vyuˇzit´e pˇri navr-hov´an´ı t´eto architektury vych´azej´ı z re´aln´eho programov´an´ı mikroprocesor˚u.
Prov´adˇen´ı jednoduˇsˇs´ıch, hardwarovˇe l´epe navrˇzen´ych instrukc´ı je rychlejˇs´ı a programy jsou efektivnˇejˇs´ı, neˇz v pˇr´ıpadˇe pouˇzit´ı sloˇzit´ych instrukc´ı. Vypuˇstˇen´ım sloˇzit´ych instrukc´ı doˇslo ke zjednoduˇsen´ı pˇr´ıstupu k pamˇeti a bylo tak umoˇzˇneno jej´ı dalˇs´ı vylepˇsov´an´ı.
Nev´yhodou architektury je ˇcastˇejˇs´ı ˇcten´ı instrukc´ı z programov´e pamˇeti.
3.2
Platforma HC08
Pro implementaci j´adra OS jsem jako c´ılov´y mikrokontrol´er zvolil typ 68HC908LJ12 firmy Motorola. Hlavn´ım d˚uvodem bylo vyuˇzit´ı programovac´ıho kitu LJ12EVB z laboratoˇr´ı fa-kulty. Rodina osmibitov´ych mikrokontrol´er˚u HC08 je vylepˇsenou verz´ı ˇrady HC05, zaloˇzen´e na mikroprocesoru HC6800. T´ımto m´ame zajiˇstˇenu kompatibilitu objektov´eho k´odu z ˇrady HC05 do HC08.
Popis oznaˇcen´ı MC68HC908LJ12: • MC – v´yrobce (Motorola)
• 68HC908 – rodina mikroprocesor˚u a pouˇzit´a technologie (908 – FLASH verze) • LJ – ˇrada procesor˚u, oznaˇcen´ı pouˇzit´ych periferi´ı (viz kapitola3.7)
• 12 – pˇribliˇzn´a velikost hlavn´ı pamˇeti v kB
Flash pamˇet’ je pro mikrokontrol´ery obecnˇe velk´ym pˇr´ınosem. Umoˇzˇnuje n´am napro-gramovat mikrokontrol´er bez pouˇzit´ı speci´aln´ıho program´atoru. Nav´ıc m˚uˇze s touto pamˇet´ı operovat i uˇzivatelsk´y program. Lze tak tedy emulovat pamˇet EEPROM, zapisovat do FLASH nejr˚uznˇejˇs´ı provozn´ı informace, ˇci implementovat pˇrepisov´an´ı programu za bˇehu.
Rodiny mikrokontrol´er˚u HC08 jsou postaveny na j´adˇre CPU08. Mezi typick´e vlastnosti tohoto j´adra patˇr´ı minim´aln´ı poˇcet registr˚u (akumul´ator, indexovac´ı registr, ukazatel na z´asobn´ık, programov´y ˇc´ıtaˇc a stavov´y registr). Poˇcet registr˚u je vyv´aˇzen rychl´ym a fle-xibiln´ım pˇr´ıstupem do pamˇeti (16 adresovac´ıch m´od˚u). Lze pracovat s promˇenn´ymi na pˇr´ım´ych adres´ach, indexovat, pracovat s promˇenn´ymi na z´asobn´ıku, nebo tyto moˇznosti kombinovat. Tyto techniky jsou nav´ıc podpoˇreny jednotn´ym adresov´ym prostorem pro pamˇet’ dat, programu i periferie. Instrukˇcn´ı sada je tak jednoduˇsˇs´ı a pˇrehlednˇejˇs´ı. Z tˇechto poznatk˚u vypl´yv´a, ˇze HC08 je z´astupcem von Neumannovy architektury poˇc´ıtaˇc˚u1.
Dalˇs´ı vlastnosti j´adra CPU08: • jednocyklov´y pˇr´ıstup do pamˇeti
• aˇz dva pˇr´ıstupy do pamˇeti v jedn´e instrukci • taktov´an´ı CPU a sbˇernice 0 – 8 MHz
• jednoduch´e instrukce s dobou vykon´av´an´ı 1T – 3T, sloˇzitˇejˇs´ı 7T (T – strojov´y cyklus) 1Jinou konstrukci a pˇr´ıstup zajiˇst’uje Harvardsk´a architektura, kde je oddˇelen pamˇet’ov´y prostor pro
program a data. V´yhodou je vˇetˇs´ı rozsah adresov´eho prostoru, nev´yhodou jsou pak sloˇzitˇejˇs´ı a ˇcasovˇe n´aroˇcnˇejˇs´ı instrukce.
• hardwarov´e n´asoben´ı a dˇelen´ı • podpora programovac´ıho jazyka C • podpora reˇzimu se sn´ıˇzenou spotˇrebou
• ochrany syst´emu pomoc´ı Watchdogu, kontroly n´ızk´eho napˇet´ı, detekce neplatn´e ad-resy nebo operandu instrukce
3.3
Programovac´ı model
Programovac´ı model je soubor registr˚u, kter´e mus´ı program´ator zn´at, aby mohl pro mikro-kontrol´er vytvoˇrit program. Kromˇe registr˚u mikroprocesoru potˇrebuje zn´at instrukˇcn´ı sadu, pˇr´ıpadnˇe specifika vyˇsˇs´ıho programovac´ıho jazyka.
Registry mikroprocesoru jsou zn´azornˇeny na obr´azku3.2. Jsou um´ıstˇeny v mikroproce-soru a nejsou tedy souˇc´ast´ı pamˇetov´eho prostoru.
Obr´azek 3.2: Programovac´ı model HC08
Popis jednotliv´ych registr˚u:
• akumul´ator2 – A pro obecn´e pouˇzit´ı. CPU jej vyuˇz´ıv´a pro ukl´ad´an´ı operand˚u a v´ysledk˚u aritmeticko–logick´ych operac´ı.
• index registr – HX umoˇzˇnuj´ıc´ı adresov´an´ı 64kB adresov´eho prostoru. Skl´ad´a se ze dvou osmibitov´ych registr˚u H a X. V indexov´em adresovac´ım m´odu pouˇz´ıv´a CPU obsah HX registru k v´ypoˇctu absolutn´ı adresy dan´e relativn´ım operandem. M˚uˇze b´yt tak´e vyuˇzit jako doˇcasn´e ´uloˇziˇstˇe dat.
2
• ukazatel na z´asobn´ık – SP ukazuje na prvn´ı volnou pozici z´asobn´ıku. Po resetu mikrokontrol´eru je nastaven vrchol z´asobn´ıku na adresu 0x00ff. Z´asobn´ık lze um´ıstit kdekoliv do oblasti pamˇeti RAM. Pˇri vloˇzen´ı dat do z´asobn´ıku se SP sniˇzuje, pˇri vyjmut´ı ´udaje se opˇet zvyˇsuje. Z´asobn´ık se tak´e vyuˇz´ıv´a pro pˇred´av´an´ı parametr˚u podprogram˚um. S ukazatelem na z´asobn´ık se pak pracuje obdobnˇe jako s HX regis-trem.
• programov´y ˇc´ıtaˇc – PC obsahuje adresu pˇr´ıˇst´ı instrukce nebo operandu. Po resetu mikrokontrol´eru je naplnˇen resetovac´ım vektorem, kter´y je uloˇzen na adrese 0xfffe a 0xffff. Hodnotou vektoru je adresa prvn´ı instrukce programu. Pˇri postupn´em vykon´av´an´ı programu se PC zvyˇsuje, pokud dojde ke skoku do jin´e ˇc´asti programu nebo je vyvol´ana obsluˇzn´a rutina pro pˇreruˇsen´ı, je obsah PC nastaven pˇr´ımo, podle kontextu.
• stavov´y registr – CCR obsahuje stav glob´aln´ı masky pˇreruˇsen´ı a dalˇs´ı bity (pˇr´ıznaky), indikuj´ıc´ı v´ysledek pr´avˇe proveden´e instrukce. Bity 6 a 5 jsou nevyuˇzity a permanentnˇe nastaveny na logickou 1.
V´yznam ostan´ıch bit˚u je n´asleduj´ıc´ı:
– V – pˇr´ıznak pˇreteˇcen´ı je nastaven, pokud dojde k pˇreteˇcen´ı v´ysledku v doplˇ nko-v´em k´odu.
– H – pˇr´ıznak poloviˇcn´ıho pˇrenosu je nastaven pˇri pˇrenosu mezi tˇret´ım a ˇctvrt´ym bitem akumul´atoru bˇehem operac´ı ADD a ADC. Tento pˇr´ıznak je d˚uleˇzit´y pro aritmetick´e operace v BCD k´odu.
– I – maska pˇreruˇsen´ı glob´alnˇe ovlivˇnuje povolen´ı pˇreruˇsen´ı. Je–li nastavena, ˇz´adn´e ˇz´adosti o pˇreruˇsen´ı se nevyhov´ı. Pˇri v´yskytu pˇreruˇsen´ı je automaticky nastavena po uloˇzen´ı CPU registr˚u na z´asobn´ık, ale dˇr´ıve neˇz je naˇcten vektor pˇreruˇsen´ı. V´ıce o pˇreruˇsen´ı viz kapitola3.6.
– N – pˇr´ıznak z´aporn´eho v´ysledku je nastaven, pokud pˇri aritmetick´e, logick´e nebo pˇresunov´e operaci je v´ysledek z´aporn´y.
– Z – pˇr´ıznak nulov´eho v´ysledku je nastaven, je–li v´ysledek aritmetick´e, logick´e nebo pˇresunov´e operace nulov´y.
– C – pˇrenos / v´yp˚ujˇcka - je nastavena, pokud pˇri operaci souˇctu dojde k pˇrenosu ze sedm´eho bitu nebo pˇri operaci rozd´ılu k v´yp˚ujˇcce. Pˇr´ıznak je tak´e ovlivˇnov´an nˇekter´ymi logick´ymi operacemi a instrukcemi pro ´upravu operand˚u (napˇr. rotace, posuvy, nepodm´ınˇen´e skoky).
Je nutn´e podotknout, ˇze HC08 patˇr´ı do skupiny mikroprocesor˚u typu big–endian, coˇz je oznaˇcen´ı principu ukl´ad´an´ı v´ıcebytov´ych dat do pamˇeti. Big–endian definuje uloˇzen´ı v´yznamnˇejˇs´ıho (vyˇsˇs´ıho) bytu dat na niˇzˇs´ı adresu, neˇz na jakou je uloˇzen m´enˇe v´yznamn´y (niˇzˇs´ı) byte3.
3
Napˇr. uloˇz´ıme–li na adresu 0x0150 hodnotu 0x1234, bude na adrese 0x0150 hodnota 0x12 a na adrese 0x0151 hodnota 0x34.
3.4
Pamˇ
et’ov´
y model
Mikroprocesory CPU08 mohou adresovat 64kB adresov´y prostor. Organizace pamˇeti je zn´azornˇena na obr´azku 3.3.
Obr´azek 3.3: Mapa pamˇeti 68HC908LJ12
Pˇr´ıstup do neimplementovan´e oblasti pamˇet’ov´eho prostoru m˚uˇze zp˚usobit reset, pokud je tato kontrola povolena. Pokud pˇristupujeme na rezervovan´e pamˇet’ov´e m´ısto, m˚uˇze doj´ıt k nepˇredv´ıdateln´emu chov´an´ı mikrokontrol´eru.
Pamˇet’ov´y prostor od adresy 0x0060 do 0x025f vˇcetnˇe, je vyhrazen pamˇeti RAM. V nult´e str´ance4 je prvn´ıch 160 byt˚u RAM pamˇeti. Je-li z´asobn´ık po resetu pˇresunut mimo nultou str´anku, vznikne ide´aln´ı m´ısto pro uloˇzen´ı glob´aln´ıch promˇenn´ych.
4
Prvn´ıch 255 byt˚u pamˇeti – pro tuto oblast je optimalizov´an pˇr´ım´y adresovac´ı m´od. Pˇr´ıstup do t´eto ˇc´asti pamˇeti trv´a nejkratˇs´ı dobu a je proto vhodn´e uloˇzit sem data, kter´a nejˇcastˇeji pouˇz´ıv´ame.
3.5
Instrukˇ
cn´ı sada
Zvolen´y mikrokontrol´er (viz kapitola3.2) obsahuje instrukˇcn´ı sadu typu CISC. Instrukce lze rozdˇelit do nˇekolika z´akladn´ıch skupin. Pro kaˇzdou skupinu budou uvedeny pouze nˇekter´e instrukce. Kompletn´ı popis instrukc´ı je nad r´amec t´eto pr´ace. Vyˇcerp´avaj´ıc´ı informace o in-strukˇcn´ım souboru lze naj´ıt na internetu nebo v literatuˇre [1].
1. Instrukce pro pˇresuny dat pˇresouvaj´ı data mezi pamˇet´ı/registry a registry HC08. Patˇr´ı sem napˇr.:
• instrukce LDA, slouˇz´ıc´ı k zaps´an´ı hodnoty do akumul´atoru nebo STX k uloˇzen´ı hodnoty z registru X do pamˇeti.
• instrukce pro pr´aci se z´asobn´ıkem. Konkr´etnˇe napˇr. PSHA, kter´a ukl´ad´a na z´ a-sobn´ık obsah akumul´atoru, nebo PULH, kter´a napln´ı registr H bytem z vrcholu z´asobn´ıku. Pˇri pr´aci se z´asobn´ıkem je nutno br´at na vˇedom´ı, ˇze SP ukazuje vˇzdy na dalˇs´ı voln´e (z´asobn´ıkem nevyuˇzit´e) pamˇet’ov´e m´ısto. • instrukce pro pˇrenos dat mezi registry – TAP resp. TAX, zajiˇst’uj´ıc´ı pˇresun bytu
mezi akumul´atorem a CCR resp. akumul´atorem a X registrem.
2. Aritmetick´e instrukce prov´adˇej´ıc´ı z´akladn´ı operace s daty. Jsou to napˇr. instrukce: • ADD resp. SUB, pˇriˇc´ıtaj´ıc´ı k resp. odeˇc´ıtaj´ıc´ı od akumul´atoru hodnotu danou
ope-randem. V´ysledek ukl´adaj´ı zpˇet do akumul´atoru.
• INCA resp. DECA zvyˇsuj´ıc´ı resp. sniˇzuj´ıc´ı hodnotu v akumul´atoru. • CMP porovn´avaj´ıc´ı obsah akumul´atoru s hodnotou urˇcenou operandem. • MUL resp. DIV prov´adˇej´ıc´ı souˇcin resp. celoˇc´ıseln´e dˇelen´ı.
3. Logick´e instrukce umoˇzˇnuj´ı program´atorovi pracovat s konkr´etn´ımi bity dan´ych byt˚u. Z pohledu tˇechto instrukc´ı je byte reprezentov´an polem 8 bit˚u, pˇriˇcemˇz nejv´ıce v´yznamn´y bit (nejlevˇejˇs´ı) je na indexu 7 a nejm´enˇe v´yznamn´y bit (nejpravˇejˇs´ı) na indexu 0. Mezi z´astupce z t´eto skupiny ˇrad´ıme napˇr. instrukce:
• AND resp. ORA prov´adˇej´ıc´ı logick´y souˇcin resp. souˇcet bytu uloˇzen´eho v aku-mul´atoru a bytu urˇcen´eho operandem. V´ysledek ukl´ad´a zpˇet do akumul´atoru. Instrukce je vhodn´a, chceme–li vynulovat resp. nastavit nˇekolik bit˚u v bytu a ostatn´ı bity ponechat beze zmˇeny.
• BCLR resp. BSET nuluj´ıc´ı resp. nastavuj´ıc´ı bit urˇcen´y operandem bytu urˇcen´eho operandem.
• ASLA resp. ROLA prov´adˇej´ıc´ı aritmetick´y posuv resp. rotaci bit˚u v bytu doleva. 4. ˇR´ıd´ıc´ı instrukce ovlivˇnuj´ıc´ı bˇeh hlavn´ıho programu a umoˇzˇnuj´ıc´ı rozˇclenˇen´ı
pro-gramu na logick´e celky a jejich vz´ajemn´e prov´az´an´ı a znovupouˇzit´ı. Do t´eto kategorie spadaj´ı napˇr. instrukce:
• BRA prov´adˇej´ıc´ı nepodm´ınˇen´y skok (provede se vˇzdy).
• BLT resp. BGE prov´adˇej´ıc´ı skok na n´avˇeˇst´ı dan´e operandem, pokud byl v´ysledek posledn´ı operace mˇen´ıc´ı CCR pˇr´ıznaky
”menˇs´ı neˇz“ resp.”vˇetˇs´ı nebo rovno“. • BRCLR resp. BRSET prov´adˇej´ıc´ı skok na n´avˇeˇst´ı urˇcen´e operandem, pokud je urˇcit´y
3.6
Syst´
em pˇ
reruˇ
sen´ı
Pro spr´avn´e pochopen´ı pojmu pˇreruˇsen´ı je vhodn´e nejdˇr´ıve uv´est v´yznam podprogramu, z nˇehoˇz lze pˇri popisu pˇreruˇsen´ı vych´azet.
3.6.1 Podprogram
Mezi charakteristick´e znaky efektivn´ıho programov´an´ı lze s jistotou zaˇradit vhodnost de-kompozice sloˇzit´eho probl´emu na jednotliv´e podprobl´emy. Spr´avn´a ´uvaha a rozvrˇzen´ı al-goritmu m˚uˇze uˇsetˇrit spoustu ˇcasu, zdroj˚u i v´ypoˇcetn´ı kapacity. V oblasti vestavˇen´ych syst´em˚u je tento aspekt tak´e velmi v´ıtan´y a proto obsahuje instrukˇcn´ı sada nˇekter´e speci´aln´ı instrukce, umoˇzˇnuj´ıc´ı
”rozˇclenˇen´ı“ k´odu do logick´ych celk˚u, tzv. podprogram˚u.
Podprogram je k´od, zaˇc´ınaj´ıc´ı unik´atn´ım n´avˇeˇst´ım (kter´e lze ch´apat jako n´azev pod-programu) a konˇc´ıc´ı instrukc´ı RTS (n´avrat z podprogramu). Pro vol´an´ı podprogramu se pouˇz´ıvaj´ı instrukce BSR nebo JSR5. Instrukce nejdˇr´ıve uloˇz´ı obsah PC na z´asobn´ık a pot´e provede skok na n´avˇeˇst´ı dan´e operandem. Pro spr´avnou funkci je vyˇzadov´ano, aby podpro-gram konˇcil instrukc´ı RTS, kter´a zajist´ı, ˇze ze z´asobn´ıku se obnov´ı obsah PC registru tak, jak byl nastaven pˇred skokem do podprogramu, a program tak m˚uˇze pokraˇcovat tam, kde byl pˇreruˇsen.
3.6.2 Obsluha pˇreruˇsen´ı
Narozd´ıl od podprogramu, jehoˇz vol´an´ı m´ame pevnˇe definov´ano a jsou d´any jednoznaˇcn´e podm´ınky jeho vykon´an´ı, k pˇreruˇsen´ı m˚uˇze doj´ıt asynchronnˇe v˚uˇci toku dat hlavn´ıho pro-gramu.
Obsluha pˇreruˇsen´ı je odezvou na extern´ı ´ud´alost bˇehem vykon´av´an´ı hlavn´ıho programu. Po rozpozn´an´ı zdroje pˇreruˇsen´ı je ˇz´adost o pˇreruˇsen´ı za urˇcit´ych podm´ınek pˇrijata a ˇr´ızen´ı je pˇred´ano pˇripraven´e obsluˇzn´e rutinˇe. Po jej´ım dokonˇcen´ı je ˇr´ızen´ı pˇred´ano zpˇet hlavn´ımu programu.
Definice jednotliv´ych obsluˇzn´ych rutin jsou umoˇznˇeny pomoc´ı tzv. vektor˚u pˇreruˇsen´ı. Jedn´a se o tabulku na konci adresov´eho prostoru, kter´a obsahuje adresy obsluˇzn´ych rutin. Tabulka m´a pevnˇe urˇcenou strukturu, aby bylo moˇzn´e jednoznaˇcnˇe pˇriˇradit k dan´emu typu pˇreruˇsen´ı odpov´ıdaj´ıc´ı obsluˇznou rutinu. V naˇsem pˇr´ıpadˇe zaˇc´ın´a tabulka na adrese 0xffd0. V tabulce vektor˚u pˇreruˇsen´ı je rovnˇeˇz definov´an vektor pro reset mikrokontrol´eru, kter´y urˇcuje adresu prvn´ı instrukce programu. Reset m˚uˇze b´yt vyvol´an nˇekolika zp˚usoby, pˇriˇcemˇz vˇsechny maj´ı spoleˇcn´y vektor pˇreruˇsen´ı:
1. externˇe – pˇri zapnut´ı mikrokontrol´eru, pˇriveden´ım n´ızk´e ´urovnˇe na vnˇejˇs´ı v´yvod RESET.
2. internˇe – naruˇsen´ım spr´avn´eho bˇehu programu, poklesem nap´ajec´ıho napˇet´ı, detekc´ı neplatn´eho operaˇcn´ıho znaku a adresy.
Zdroje pˇreruˇsen´ı m˚uˇzeme rozdˇelit na vnˇejˇs´ı a vnitˇrn´ı. Vnˇejˇs´ım pˇreruˇsen´ım je pouze sign´al IRQ. Vnitˇrn´ı hardwarov´a pˇreruˇsen´ı jsou vyvol´ana jednotliv´ymi periferiemi a jsou maskovateln´a nastaven´ım lok´aln´ıch masek na vysokou ´uroveˇn. Vˇsechny zdroje pˇreruˇsen´ı jsou pak glob´alnˇe maskovateln´e pomoc´ı bitu I registru CCR. Je–li tento bit nastaven na log. 1, ˇz´adn´e ˇz´adosti o pˇreruˇsn´ı nebude vyhovˇeno.
5
Proces detekce a proveden´ı ˇz´adosti je uveden na obr´azku 3.4.
Obr´azek 3.4: Postup pˇri vol´an´ı obsluˇzn´e rutiny pˇreruˇsen´ı
Nejdˇr´ıve jsou modulem SIM (System Integration Module) urˇceny zdroje pˇreruˇsen´ı a je proveden v´ybˇer jednoho z nich, v pˇr´ıpadˇe ˇze pˇriˇslo ˇz´adost´ı v´ıce. Pot´e je uloˇzen programovac´ı model na z´asobn´ık6a je nastavena glob´aln´ı maska pˇreruˇsen´ı, ˇc´ımˇz se dalˇs´ı ˇz´adosti o pˇreruˇsen´ı neuplatn´ı. Do PC registru se uloˇz´ı vektor pˇreruˇsen´ı pro pˇrijatou ˇz´adost a nakonec se spust´ı obsluˇzn´a rutina pˇreruˇsen´ı, jej´ıˇz adresa je v PC registru nastavena. Rutina konˇc´ı instrukc´ı RTI, kter´a obnov´ı programovac´ı model, ˇc´ımˇz nastav´ı hodnotu PC registru na adresu, na kter´e doˇslo k pˇreruˇsen´ı. Program tak m˚uˇze pokraˇcovat.
6Je tˇreba poznamenat, ˇze pˇri ukl´ad´an´ı programovac´ıho modelu nen´ı automaticky uloˇzen registr H.
V pˇr´ıpadˇe ˇze se v obsluˇzn´e rutinˇe s t´ımto registrem pracuje, je nutn´e jej na zaˇc´atku rutiny uloˇzit a na konci opˇet obnovit
3.7
Periferie
Na ˇcipu mikrokontrol´eru je zahrnuto nˇekolik periferi´ı, jejichˇz v´yˇcet a struˇcn´y popis n´asleduje. Tato sestava periferi´ı je pevnˇe d´ana a je charakterizov´ana p´ısmeny LJ v oznaˇcen´ı mikro-kontrol´eru. Detailnˇejˇs´ı popis lze naj´ıt v literatuˇre [1] nebo [3].
TIM – ˇc´ıtaˇce/ˇcasovaˇce – syst´em ˇc´ıtaˇc˚u/ˇcasovaˇc˚u TIM1 a TIM2. Umoˇzˇnuj´ı pouˇzit´ı jed-notek z´achytu hrany a v´ystupn´ıho kompar´atoru (Input capture a Output compare), s moˇznost´ı nastavit typ hrany (n´astupn´a/sestupn´a/oboj´ı) a akci pˇri shodˇe (nasta-ven´ı/vynulov´an´ı/zmˇena urˇcit´eho bitu). D´ale je moˇzn´e pouˇz´ıt ˇcasovaˇce ke generov´an´ı puls˚u s promˇennou stˇr´ıdou (Pulsnˇe ˇs´ıˇrkov´a modulace – PWM). Tato technika se vyuˇz´ıv´a napˇr. k ovl´ad´an´ı servomotor˚u, regulaci napˇet´ı atd. Pˇri pouˇzit´ı v podobˇe ˇc´ıtaˇce lze nastavit horn´ı limit ˇc´ıt´an´ı, smˇer ˇc´ıt´an´ı, ud´alost pˇri dosaˇzen´ı horn´ıho limitu apod. CGM – gener´ator hodin – ˇr´ıd´ı chod mikrokontrol´eru, synchronizuje jednotliv´e jeho ˇc´asti
a ˇr´ıd´ı zpracov´an´ı programu. CGM generuje stˇr´ıdav´y periodick´y sign´al, jehoˇz pˇresnost a frekvenci lze z´ıskat nˇekolika zp˚usoby:
1. vestavˇen´ymi obvody krystalov´eho oscil´atoru, kdy staˇc´ı pˇripojit pouze krystal o vhodn´e rezonanˇcn´ı frekvenci (jednotky aˇz des´ıtky MHz, podle typu mikrokon-trol´eru).
2. vestavˇen´ymi obvody krystalov´eho oscil´atoru s f´azov´ym z´avˇesem, kdy staˇc´ı pˇ ripo-jit levn´y krystal s niˇzˇs´ı frekvenc´ı. F´azov´y z´avˇes pak vytvoˇr´ı potˇrebn´y hodinov´y sign´al o frekvenci ˇr´adu MHz.
3. extern´ı zdroj hodinov´eho sign´alu.
4. vnitˇrn´ı oscil´ator, kter´y nevyˇzaduje vnˇejˇs´ı souˇc´astky, ale nedosahuje takov´e pˇ res-nosti jako krystalov´e oscil´atory.
COP – watchdog – syst´em pro hl´ıd´an´ı spr´avn´eho bˇehu programu. Bˇehem vykon´av´an´ı programu je nutn´e ve vhodn´ych okamˇzic´ıch volat speci´aln´ı funkce, kter´e informuj´ı COP obvod, ˇze je vˇse v poˇr´adku. Jakmile nen´ı COP takto informov´an, dojde k resetu mikrokontrol´eru a restartu programu.
RTC – obvod re´aln´eho ˇcasu – slouˇz´ı k podpoˇre hodin re´aln´eho ˇcasu a kalend´aˇre. Infor-muje o aktu´aln´ım ˇcasu a datumu, umoˇzˇnuje volat pˇreruˇsen´ı kaˇzdou novou sekundu, minutu, hodinu nebo den, lze jej vyuˇz´ıt pro funkci bud´ıku apod.
IRSCI – IR s´eriov´e synchronn´ı rozhran´ı – synchronn´ı s´eriov´a komunikace s podpo-rou IR kod´eru/dekod´eru. Pˇri komunikaci se spolu s daty pˇren´aˇs´ı i hodinov´y sign´al. SPI – s´eriov´e asynchronn´ı rozhran´ı – rozhran´ı pro asynchronn´ı s´eriovou komunikaci.
Hodinov´y sign´al se nepˇren´aˇs´ı, pˇr´ıjmaˇc si jej generuje s´am. Je nutn´e zajistit dostateˇcnˇe pˇresn´e generov´an´ı a synchronizaci s gener´atorem vys´ılaˇce.
ADC – AD pˇrevodn´ık – ˇsestikan´alov´y 10bitov´y aproximaˇcn´ı pˇrevodn´ık z analogov´eho sign´alu na ˇc´ıslicovou hodnotu. Umoˇzˇnuje jednor´azovou nebo kontinu´aln´ı konverzi. LCD – LCD displej – periferie usnadˇnuj´ıc´ı ovl´ad´an´ı LCD displeje s podporou aˇz 104
segment˚u.
KBI – kl´avesnice – 8 vstup˚u umoˇzˇnuj´ıc´ı vyvolat pˇreruˇsen´ı, nastaviteln´a ´ud´alost vyvol´ a-vaj´ıc´ı pˇreruˇsen´ı (hranou, ´urovn´ı).
Kapitola 4
N´
avrh j´
adra
4.1
Cinnost operaˇ
ˇ
cn´ıho syst´
emu
Operaˇcn´ı syst´em (d´ale OS) je skupina poˇc´ıtaˇcov´ych program˚u, kter´e spravuj´ı softwarov´e a hardwarov´e zdroje poˇc´ıtaˇce a zajiˇst’uj´ı jejich vz´ajemnou komunikaci1.
Mezi z´akladn´ı role operaˇcn´ıho syst´emu patˇr´ı: 1. Spr´ava prostˇredk˚u - pamˇeti, procesoru, periferi´ı.
Dovoluje efektivnˇe a bezpeˇcnˇe sd´ılet dostupn´e prostˇredky mezi v´ıce procesy. 2. Vytv´aˇren´ı prostˇred´ı pro uˇzivatele a jejich aplikaˇc´ı programy.
Umoˇzˇnuje reagovat na podnˇety od uˇzivatele.
C´ılem OS je zjednoduˇsit pouˇzit´ı poˇc´ıtaˇce a souˇcasnˇe maxim´alnˇe vyuˇz´ıt vˇsech jeho zdroj˚u. Operaˇcn´ı syst´em samotn´y spotˇrebov´av´a nˇekter´e zdroje poˇc´ıtaˇce (pamˇet’, ˇcas procesoru), proto je d˚uleˇzit´e aby byl OS efektivnˇe navrˇzen. Pro zv´yˇsen´ı komfortu uˇzivatele poskytuj´ı OS uˇzivatelsk´e rozhran´ı. M˚uˇze se jednat o prostou konzoli s ovl´ad´an´ım textov´ymi pˇr´ıkazy (termin´al) popˇr. grafick´e uˇzivatelsk´e rozhran´ı.
V pˇr´ıpadˇe vestavˇen´ych syst´em˚u se ˇcasto operaˇcn´ı syst´em ztotoˇzˇnuje s aplikaˇcn´ım pro-gramem, a pln´ı tak jedinou, pˇredem danou ´ulohu.
D´ale v textu je operaˇcn´ım syst´emem myˇslen syst´em, jehoˇz souˇc´ast´ı je j´adro a z´akladn´ı syst´emov´e knihovny a utility.
4.2
J´
adro
J´adro2 je srdcem operaˇcn´ıho syst´emu. Tvoˇr´ı jeho nejniˇzˇs´ı a nejz´akladnˇejˇs´ı vrstvu. J´adro
je prvn´ım zav´adˇen´ym programem, kter´y bˇeˇz´ı po celou dobu bˇehu poˇc´ıtaˇcov´eho syst´emu a zajiˇst’uje z´akladn´ı spr´avu prostˇredk˚u pro vyˇsˇs´ı vrstvy OS a uˇzivatelsk´e aplikace.
1
Pˇresn´a definice OS neexistuje. Nˇekter´e zdroje jej ztotoˇzˇnuj´ı pouze s j´adrem, jin´e pod pojmem operaˇcn´ı syst´em rozum´ı i pˇr´ıtomnost mnoˇzstv´ı aplikaˇcn´ıch program˚u. O to co je a co nen´ı souˇc´ast´ı operaˇcn´ıho syst´emu se st´ale vedou spory.
2
Na obr´azku 4.1 je zn´azornˇeno vyuˇzit´ı j´adra jako vrstvy mezi hardwarem a softwarem poˇc´ıtaˇce.
Obr´azek 4.1: Pozice j´adra v poˇc´ıtaˇcov´em syst´emu.
Obecn´e j´adro m´a na starost:
• pl´anov´an´ı ´uloh/proces˚u a jejich vz´ajemnou synchronizaci a komunikaci • spr´avu pamˇeti
• spr´avu soubor˚u
J´adra m˚uˇzeme rozdˇelit do nˇekolika skupin, podle sloˇzitosti implementace a rozsahu poskytovnan´ych sluˇzeb. Jedn´a se o j´adra:
monolitick´a – poskytuj´ı rozs´ahl´e rozhran´ı a velk´e mnoˇzstv´ı sluˇzeb pro vyˇsˇs´ı vrstvy OS. Obsahuj´ı moduly pro spr´avu pamˇeti, pl´anov´an´ı, meziprocesovou komunikaci, soubo-rov´e syst´emy, podporu s´ıt’ov´e komunikace. Vˇsechny sluˇzby bˇeˇz´ı souˇcasnˇe s j´adrem a jsou vz´ajemnˇe prov´az´any za ´uˇcelem vyˇsˇs´ı efektivity. Nev´yhodou tˇechto jader je obt´ıˇznost ´udrˇzby a komplikovan´e odstraˇnov´an´ı chyb. V pˇr´ıpadˇe selh´an´ı jednoho z mo-dul˚u je tak´e velk´a pravdˇepodobnost p´adu cel´eho syst´emu.
monolitick´a s modul´arn´ı strukturou – jsou vylepˇsenou koncepc´ı monolitick´ych jader. Umoˇzˇnuj´ı zav´adˇen´ı resp. odstraˇnov´an´ı jednotliv´ych modul˚u za bˇehu. Tato modularita ale nen´ı d´ana pˇr´ımo architekturou j´adra. Prakticky se jedn´a pouze o jin´y zp˚usob pr´ace s bin´arn´ı podobou j´adra.
mikroj´adra – definuj´ı velmi ´uzkou abstrakci nad hardwarem. Pouˇz´ıvaj´ı pouze sadu primi-tivn´ıch syst´emov´ych vol´an´ı, pomoc´ı nichˇz spravuj´ı pamˇet’, obstar´avaj´ı v´ıce´ulohovost a meziprocesovou komunikaci. Ostatn´ı sluˇzby jsou implementov´any mimo j´adro, v uˇ zi-vatelsk´ych programech, tzv. serverech (v´ıce viz [6]). V´yhodou mikrojader je vyˇsˇs´ı fle-xibilita (dynamick´e spouˇstˇen´ı a zastavov´an´ı sluˇzeb, implementace dalˇs´ıch modul˚u na ´
urovni aplikaˇcn´ıho programu), zabezpeˇcen´ı (selh´an´ı sluˇzby nemus´ı nutnˇe v´est k selh´an´ı cel´eho syst´emu). Nev´yhodou je vyˇsˇs´ı reˇzie, zp˚usoben´a pˇredevˇs´ım pˇrep´ın´an´ım kontextu (podrobnosti v kapitole5.6), kter´e zpomaluje syst´em v´ıce neˇz vol´an´ı pˇr´ım´e syst´emov´e sluˇzby.
nanoj´adra – pˇredstavuj´ı nejuˇzˇs´ı prov´az´an´ı s hardwarem. Zpracov´avaj´ı pouze pˇreruˇsen´ı a komunikaci s jednotkou spr´avy pamˇeti3. Jsou velmi podobn´a mikroj´adr˚um, liˇs´ı se ale v z´avislostech mezi j´adrem a jeho moduly pˇri formov´an´ı operaˇcn´ıho syst´emu. U nanoj´adra nemus´ı b´yt nutnˇe moduly pˇreruˇsen´ı a jednotky spr´avy pamˇeti pˇr´ımo jeho souˇc´ast´ı. D´ıky t´eto vysok´e modularitˇe lze lehce zmˇenit operaˇcn´ı syst´em pouhou z´amˇenou softwaru a to i za bˇehu.
hybridn´ı j´adra – mikroj´adra rozˇs´ıˇrena o k´od, kter´y by mohl b´yt implementov´an mimo j´adro (v serveru), ale za ´uˇcelem niˇzˇs´ı reˇzie je s mikroj´adrem tˇesnˇeji prov´az´an a bˇeˇz´ı v jeho reˇzimu.
exoj´adra – poskytuj´ı minim´aln´ı rozhran´ı zamˇeˇren´e pˇrev´aˇznˇe na bezpeˇcn´e sd´ılen´ı prostˇ red-k˚u, nikoli na tvorbu abstrakc´ı. J´adra pouze zajiˇst’uj´ı, ˇze ˇz´adan´y prostˇredek je voln´y a aplikaˇcn´ı program jej m˚uˇze vyuˇz´ıt.
V naˇsem pˇr´ıpadˇe budeme od j´adra vyˇzadovat pouze z´akladn´ı funkcionalitu. Zamˇeˇr´ıme se na pˇrep´ın´an´ı proces˚u, tj. dosaˇzen´ı v´ıce´ulohovosti. Budeme vyˇzadovat pohodln´e vkl´ad´an´ı proces˚u do pl´anovaˇce, z´akladn´ı bezpeˇcnostn´ı ochrany a jednoduch´y mechanismus komuni-kace mezi procesy. J´adro nebude obsahovat spr´avu s´ıt’ov´e komunikace ani spr´avu pamˇeti.
Z v´yˇse uveden´eho vypl´yv´a, ˇze se bude jednat o n´avrh a implementaci mikroj´adra. Naˇsi specifikaci by bylo moˇzn´e zahrnout i pod nanoj´adro, hlavnˇe pokud jde o modularitu a moˇznost zmˇeny modul˚u za bˇehu. Bylo by totiˇz moˇzn´e (d´ıky moˇznostem vybran´eho mi-krokontrol´eru) v urˇcit´em okamˇziku pˇrepnout obsluhu syst´emu na jin´e j´adro. Naskytla by se tak moˇznost pouˇz´ıt napˇr. jin´y pl´anovaˇc (viz 4.4), jin´y pˇr´ıstup pamˇet’ov´e ochrany (viz
4.8) apod. Nicm´enˇe pro vyˇsˇs´ı n´azornost nebudeme d´ale tuto moˇznost uvaˇzovat a pouˇzijeme pouze jedin´e j´adro.
4.3
V´ıce´
ulohovost
Mezi jeden z charakteristick´ych rys˚u operaˇcn´ıho syst´emu patˇr´ı zajiˇstˇen´ı vykon´av´an´ı v´ıce ´
uloh souˇcasnˇe. Nejedn´a se vˇsak o jejich paraleln´ı prov´adˇen´ı4. V´ıce´ulohovost je metoda, d´ıky kter´e je umoˇznˇeno v´ıce ´uloh´am (proces˚um) sd´ılet zdroje syst´emu, jako napˇr. ˇcas mikropro-cesoru. V pˇr´ıpadˇe jednoprocesorov´eho poˇc´ıtaˇce m˚uˇze b´yt v dan´y okamˇzik vˇenov´an strojov´y ˇ
cas pouze jedn´e ´uloze. Rozhodnut´ı o tom, kter´a ´uloha dostane pˇridˇelen procesor, je zajiˇstˇeno pl´anovaˇcem. Pˇrep´ın´a–li pl´anovaˇc jednotliv´e ´ulohy dostateˇcnˇe ˇcasto, vznik´a iluze paraleln´ıho prov´adˇen´ı ´uloh.
4.4
Pl´
anovaˇ
c
Pl´anovaˇc m´a za ´ukol rozhodnout, kter´e z poˇzadovan´ych ´uloh bude pˇridˇelen mikroprocesor a zdroje syst´emu. Nelze vˇsak vˇzdy jednoznaˇcnˇe ˇr´ıct, kter´a z ´uloh by to mˇela b´yt. Objevuje se zde mnoho r˚uzn´ych probl´em˚u (napˇr. nelze dopˇredu urˇcit jak dlouho bude ´uloha trvat a zda by nebylo lepˇs´ı nejdˇr´ıve spustit proces, kter´y je ˇcasovˇe m´enˇe n´aroˇcn´y. D´ale mohou napˇr.
3
angl. MMU – Memory Management Unit
vznikat z´avislosti mezi jednotliv´ymi procesy, tj. jeden proces potˇrebuje ke sv´emu ´uspˇeˇsn´emu proveden´ı data od jin´eho procesu apod.). V souˇcasn´e dobˇe existuje ˇrada algoritm˚u a stra-tegi´ı, kter´e tyto probl´emy v´ıce ˇci m´enˇe ´uspˇeˇsnˇe ˇreˇs´ı (m´ıra ´uspˇeˇsnosti a pouˇzitelnosti z´avis´ı na okolnostech).
Pˇrehled nˇekter´ych pl´anovac´ıch strategi´ı a jejich z´akladn´ı princip:
1. FIFO5 – princip analogick´y frontˇe. Prvn´ı pˇr´ıchoz´ı poˇzadavek je obslouˇzen jako prvn´ı,
dalˇs´ı pˇr´ıchoz´ı poˇzadavek ˇcek´a, dokud nen´ı prvn´ı vyˇr´ızen.
2. Shortest–First6 – ˇcekaj´ıc´ı proces s nejkratˇs´ı dobu dosavadn´ıho prov´adˇen´ı z´ısk´av´a ˇcas procesoru. Metoda je jednoduch´a a m´a velkou propustnost (mnoˇzstv´ı dokonˇcen´ych proces˚u za urˇcitou dobu). Nev´yhodou je jej´ı n´achylnost k vyhladovˇen´ı7procesu, kter´y je v syst´emu dlouhou dobu (je ˇcasovˇe n´aroˇcnˇejˇs´ı na dokonˇcen´ı), z d˚uvodu neust´al´eho pˇrib´yv´an´ı nov´ych, kr´atce trvaj´ıc´ıch proces˚u.
3. Round–robin – jeden z jednoduˇsˇs´ıch algoritm˚u pˇridˇeluj´ıc´ı postupnˇe kaˇzd´emu z pro-ces˚u pevnˇe dan´e mnoˇzstv´ı ˇcasu (tzv. ˇcasov´e kvantum) bez ohledu na priority proces˚u. Tento pˇr´ıstup je jednoduch´y na implementaci a eliminuje probl´em vyhladovˇen´ı. 4. Priority queue8– procesy jsou obsluhov´any (jsou jim pˇridˇelov´any poˇzadovan´e zdroje
a ˇcas procesoru) podle priority. ˇC´ım vyˇsˇs´ı prioritu proces m´a, t´ım dˇr´ıve se dostane na ˇradu. Prioritu je moˇzn´e dynamicky pˇrepoˇc´ıt´avat a poˇrad´ı proces˚u tak mˇenit podle aktu´aln´ı potˇreby. Metoda je n´achyln´a na vyhladovˇen´ı.
5. Lottery9 – kaˇzd´emu procesu je pˇriˇrazeno nˇekolik n´ahodn´ych ˇc´ısel (l´ıstk˚u loterie), podle nichˇz je pak vol´an. ˇC´ım v´ıce m´a proces l´ıstk˚u, t´ım je pravdˇepodobnost jeho vykon´av´an´ı vyˇsˇs´ı.
Strategie pl´anovaˇce lze rozdˇelit rovnˇeˇz z hlediska odevzd´an´ı procesoru samotn´ym pro-cesem:
• Nepreemptivn´ı – procesor m˚uˇze b´yt procesu odebr´an, prokud je zablokov´an pˇri vstupnˇe–v´ystupn´ı operaci nebo pokud se proces procesoru s´am vzd´a.
• Preemptivn´ı – procesu m˚uˇze b´yt procesor odebr´an, vyprˇs´ı–li ˇcasov´e kvantum procesu pˇridˇelen´e, nebo pokud pˇrijde poˇzadavek na obslouˇzen´ı procesu s vyˇsˇs´ı prioritou.
Pro tuto pr´aci byla zvolena strategie Round–Robin. Hlavn´ım d˚uvodem je jej´ı jed-noduchost a nen´aroˇcnost na zdroje pro vlastn´ı exekutivu pl´anovaˇce. Jedn´a se o strategii preemptivn´ı, protoˇze procesy budou pˇrep´ın´any po vyprˇsen´ı ˇcasov´eho kvanta.
5
First In First Out –Prvn´ı dovnitˇr, prvn´ı ven
6Doslovn´y pˇreklad je
”nejkratˇs´ı–prvn´ı“.
7
Stav, ve kter´em proces nem´a pˇr´ıstup k potˇrebn´ym prostˇredk˚um, z d˚uvodu jejich blokov´an´ı jin´ym pro-cesem.
8
Prioritn´ı ˇrada
9
Na obr´azku 4.2je zn´azornˇeno pˇrep´ın´an´ı proces˚u pˇri pouˇzit´ı strategie Round–Robin.
Obr´azek 4.2: Princip algoritmu Round–Robin.
4.5
Zajiˇ
stˇ
en´ı v´ıce´
ulohovosti
V´ıce´ulohovost v poˇc´ıtaˇcov´em syst´emu s jedn´ım mikroprocesorem lze zajistit nˇekolika zp˚ u-soby. Je na uˇzivateli, aby zvolil nejvhodnˇejˇs´ı variantu vzhledem k potˇreb´am sv´eho projektu, sloˇzitosti a rozsahu implementace.
Z´akladn´ı pˇr´ıstupy k ˇreˇsen´ı probl´emu
”souˇcasn´eho“ bˇehu v´ıce ´uloh jsou n´asleduj´ıc´ı: 1. cyklicke zpracov´an´ı10 – tento pˇr´ıstup nevyuˇz´ıv´a pˇreruˇsen´ı ani sloˇzit´e algoritmy.
Jedn´a se o nˇekolik metodik zaloˇzen´ych na nekoneˇcn´ych smyˇck´ach (for(;;) {...}). Uvnitˇr smyˇcky jsou postupnˇe uvedeny ´ulohy v poˇrad´ı, ve kter´em se maj´ı prov´adˇet. Existuj´ı i varianty, kter´e na z´akladˇe r˚uzn´ych stav˚u ´uloh (tzv. flag˚u) mohou mˇenit priority tˇechto ´uloh a t´ım upravovat poˇrad´ı jejich spouˇstˇen´ı. Mezi tyto metodiky patˇr´ı napˇr. vyz´yvac´ı smyˇcka11, cyklick´e prov´adˇen´ı nebo stavovˇe ˇr´ızen´y k´od. V´yhodou tohoto pˇr´ıstupu je snadn´a anal´yza syst´emu. Nev´yhodou je urˇcit´e zpoˇzdˇen´ı mezi pˇrijatou ˇz´adost´ı o zpracov´an´ı ud´alosti a jej´ım vlastn´ım vyˇr´ızen´ım. V´ıce se lze doˇc´ıst v [4]. 2. vyuˇzit´ı pˇreruˇsovac´ıho podsyst´emu – umoˇzˇnuje realizaci pl´anovaˇce pomoc´ı
hard-warov´eho nebo softwarov´eho pˇreruˇsen´ı. Pˇreruˇsen´ı urˇcuj´ıc´ı okamˇzik pˇrepnut´ı je vol´ano napˇr. ˇcasovaˇcem, ˇci jin´ym zdrojem hodinov´eho sign´alu. ´Uloha kter´a je moment´alnˇe prov´adˇena se pˇreruˇs´ı, dojde k pˇrepnut´ı kontextu (viz5.6) a podle pl´anovaˇce je urˇcena ´
uloha n´asleduj´ıc´ı. V´yhodou tˇechto syst´em˚u je rychl´a odezva na pˇr´ıchoz´ı poˇzadavek a pˇrehlednost k´odu. Nev´yhodou pak pl´ytv´an´ı ˇcasem procesoru v nekoneˇcn´e smyˇcce, kter´a tvoˇr´ı hlavn´ı tˇelo syst´emu, nebo komplikace pˇri poskytov´an´ı sloˇzitˇejˇs´ıch sluˇzeb (spr´ava soubor˚u, s´ıt´ı apod.).
10
Oznaˇcov´ano tak´e jako pseudoj´adro.
11
3. syst´emy pracuj´ıc´ı v popˇred´ı/pozad´ı12– jsou zaloˇzeny na vyuˇzit´ı pˇreruˇsen´ı. V
sys-t´emu jsou ´ulohy rozdˇeleny do dvou skupin. Tzv. popˇred´ı syst´emu je tvoˇreno ´ulohami s vysokou prioritou, kter´e se prov´adˇej´ı pˇri pˇreruˇsen´ı. Pozad´ı syst´emu je tvoˇreno ´
ulohami s niˇzˇs´ı prioritou, kter´e by nemˇely prov´adˇet ˇcasovˇe n´aroˇcn´e operace, ale sp´ıˇse by napˇr. mohly pracovat s pomal´ymi zaˇr´ızen´ımi nebo prov´adˇet testov´an´ı ˇc´ast´ı syst´emu. V momentˇe, kdy dojde k pˇreruˇsen´ı, vyvol´a se nˇekter´a z ´uloh s vysokou priori-tou, kter´a pˇreruˇs´ı prov´adˇen´ı ´uloh na pozad´ı do doby, neˇz je zpracov´ana. Tyto syst´emy maj´ı kr´atk´e doby odezvy na ud´alosti, jsou vˇsak n´achyln´e k chyb´am zp˚usoben´ym zmˇenami ˇcas˚u prov´adˇen´ı k´odu ˇci selh´an´ı hardware. Tak´e je nutn´e pˇredem zn´at poˇcet ´
uloh v popˇred´ı pro efektivnˇejˇs´ı implementaci.
4. TCB model13 – je vhodn´y pouˇz´ıt v syst´emech, kde se pˇredpokl´ad´a dynamick´e pˇrid´av´an´ı a odeb´ır´an´ı ´uloh. Kaˇzd´e ´uloze je pˇridˇelena datov´a struktura (tzv. blok ˇr´ızen´ı ´ulohy), obsahuj´ıc´ı identifikaci ´ulohy, jej´ı stav, registry, prioritu a dalˇs´ı informace. J´adro (bˇeˇz´ıc´ı jako ´uloha s nejvyˇsˇs´ı prioritou) si pak uchov´av´a seznamy pˇripraven´ych a blokovan´ych ´uloh. Kaˇzd´e pˇreruˇsen´ı a syst´emov´y poˇzadavek od bˇeˇz´ıc´ıch ´uloh vyvol´a ´
ulohu typu j´adro. J´adro zkontroluje zda je nˇejak´a ´uloha v seznamu pˇripraven´ych ´uloh. Pokud ano, pˇresune se TCB aktu´alnˇe bˇeˇz´ıc´ı ´ulohy na konec seznamu pˇripraven´ych ´
uloh a ze seznamu ´uloh vezme prvn´ı pˇripravenou ´ulohu, kterou spust´ı. V´yhodou tohoto syst´emu je velk´a flexibilita a dynamiˇcnost spr´avy ´uloh. Nev´yhodou pak je velk´a reˇzie spojen´a se spr´avou a uchov´av´an´ım informac´ı o ´uloh´ach.
Kaˇzd´a z uveden´ych technik pˇrin´aˇs´ı v´yhody i nev´yhody. Podrobnˇejˇs´ı anal´yze a n´avrhu ˇreˇsen´ı pro naˇse j´adro se vˇenuj´ı n´asleduj´ıc´ı kapitoly.
4.6
Moˇ
znosti architektury HC08
U vestavˇen´ych syst´em˚u je kladen velk´y d˚uraz na spr´avn´e vyuˇzit´ı zdroj˚u poskytovan´ych syst´emem. Pˇred vlastn´ım n´avrhem j´adra operaˇcn´ıho syst´emu je nutn´e d˚ukladnˇe prostudo-vat c´ılovou platformu, pˇredevˇs´ım z pohledu softwarov´eho. M´ame nyn´ı potˇrebn´e infomace k urˇcen´ı strategie pro vytvoˇren´ı j´adra tak, aby spr´ava prostˇredk˚u mikrokontrol´eru byla efektivn´ı a dostateˇcnˇe ´uˇcinn´a.
Pˇred n´avrhem j´adra se bl´ıˇze zamˇeˇr´ıme na n´asleduj´ıc´ımi t´emata.
4.6.1 Vyuˇzit´ı ˇcasovaˇce
Vzhledem k tomu, ˇze pˇredmˇetem n´avrhu a implementace je v´ıce´ulohov´y operaˇcn´ı syst´em, bude nutn´e zajistit pseudoparaleln´ı bˇeh v´ıce ´uloh. Pro pˇrep´ın´an´ı ´uloh zvol´ıme mechanismus vyuˇz´ıvaj´ıc´ı pˇreruˇsovac´ıho podsyst´emu (bod 2, kapitola4.5).
ˇ
Casovaˇc um´ıstˇen´y na ˇcipu 68HC908LJ12 se skl´ad´a ze dvou modul˚u, TIM1 a TIM2, z nichˇz kaˇzd´y m´a dva kan´aly.
12
angl. foreground/background systems – FBS
13
Modul ˇcasovaˇce lze vyuˇz´ıt jako:
• jednotku z´achytu hrany – v pˇr´ıpadˇe ˇze od syst´emu oˇcek´av´ame reakci na zmˇenu urˇcit´eho ˇc´ıslicov´eho sign´alu
• v´ystupn´ı kompar´ator – v pˇr´ıpadˇe, ˇze chceme generovat impulzy s promˇennou stˇr´ıdou a periodou. Jakmile dos´ahne ˇc´ıtaˇc ˇcasovaˇce pˇrednastaven´e hodnoty, m˚uˇze doj´ıt na pinu mikrokontrol´eru k nastaven´ı, vynulov´an´ı nebo zmˇenˇe napˇet’ov´e ´urovnˇe.
• prost´y ˇc´ıtaˇc – kdy m˚uˇzeme reagovat na dosaˇzen´ı urˇcit´e hodnoty ˇc´ıtaˇce
Od naˇseho j´adra vyˇzadujeme, aby v urˇcit´ych intervalech umoˇznilo pˇrepnut´ı prov´adˇen´e ´
ulohy. Vyuˇzijeme tedy ˇcasovaˇc jako ˇc´ıtaˇc (viz obr4.3).
Jelikoˇz jsou k dispozici dva ˇcasovaˇce, vybereme pro ´uˇcely j´adra pouze jeden z nich. Protoˇze by mohla nastat situace, kdy jedna z ´uloh vyuˇz´ıv´a druh´y ˇcasovaˇc, vybereme pro j´adro modul s vyˇsˇs´ı prioritou obsluhy pˇreruˇsen´ı. To proto, abychom upˇrednostnili vykon´an´ı operace j´adra pˇred vykon´an´ım poˇzadavku ´ulohy. Vyuˇz´ıvat tedy budeme ˇcasovaˇc s oznaˇcen´ım TIM2 a pro uˇzivatelsk´e ´ulohy ponech´ame k dispozici TIM1.
Obr´azek 4.3: ˇCasovaˇc s pˇreddˇeliˇckou.
Pro spr´avnou funkci ˇcasovaˇc nastav´ıme vhodnˇe pˇreddˇeliˇcku, abychom se ˇr´adovˇe dostali do oblasti pˇrep´ın´an´ı v ˇr´adech Hz (pro vˇetˇs´ı n´azornost). Pot´e bude nutn´e nakon-figurovat spr´avnˇe vlastn´ı ˇcasovaˇc. P˚ujde pˇredevˇs´ım o nastaven´ı modula, tj. hodnoty po jej´ımˇz dosaˇzen´ı bude ˇc´ıtaˇc ˇcasovaˇce vynulov´an. Hodnotu bude ˇcasovaˇc zvyˇsovat poˇc´ıt´an´ım impulz˚u z pˇreddˇeliˇcky, aˇz dokud se nedostane na hodnotu danou modulem. V tento okamˇzik tak´e dojde k vygenerov´an´ı pˇreruˇsen´ı a vyvol´an´ı obsluˇzn´e rutiny.
4.6.2 Z´asobn´ık
Pro ukl´ad´an´ı kontextu ´uloh budeme vyuˇz´ıvat z´asobn´ık. Proto bude nezbytnˇe nutn´e zn´at jeho spr´avnou funkci.
Z´asobn´ık je datovou strukturou oznaˇcovanou jako LIFO14. Znamen´a to, ˇze hodnota naposled uloˇzen´a na z´asobn´ık bude pˇri odebr´an´ı ze z´asobn´ıku vr´acena jako prvn´ı.
14
Z´asobn´ık se pouˇz´ıv´a pˇrev´aˇznˇe pro:
• ukl´ad´an´ı resp. obnovov´an´ı n´avratov´ych adres pˇri odskoku do resp. n´avratu z podpro-gramu
• ukl´ad´an´ı a obnovov´an´ı programovac´ıho modelu pˇri pˇreruˇsen´ı • pˇred´av´an´ı promˇenn´ych mezi podprogramy
Adresace z´asobn´ıku je umoˇznˇena prostˇrednictv´ım SP registru, kter´y ukazuje na dalˇs´ı voln´e pamˇet’ov´e m´ısto, kam se bude pˇr´ıpadnˇe ukl´adat dalˇs´ı hodnota. Vztah mezi obsahem z´asobn´ıku a registrem SP je zn´azornˇen na obr´azku4.4.
Obr´azek 4.4: Vztah mezi ukazatelem na z´asobn´ık a pamˇet´ı z´asobn´ıku.
Pokud je z´asobn´ık pr´azdn´y, obsahuje SP adresu m´ısta, kam lze uloˇzit prvn´ı byte. Po vloˇzen´ı hodnoty 0x12 na z´asobn´ık (napˇr. pomoc´ı instrukce PSHA), ukazuje SP na adresu o 1 niˇzˇs´ı neˇz je adresa vloˇzen´e hodnoty. Pˇri v´ybˇeru bytu ze z´asobn´ıku (napˇr. instrukc´ı PULA) se SP o 1 zv´yˇs´ı a ukazuje opˇet na prvn´ı voln´e m´ısto z´asobn´ıku.
Z´asobn´ık u rodiny HC08 je dynamicky realokovateln´y. To znamen´a, ˇze jeho um´ıstˇen´ı m˚uˇzeme ovlivnit dynamicky, za bˇehu programu, coˇz tak´e v j´adru uplatn´ıme.
Z´asobn´ık je um´ıstˇen v pamˇeti RAM. U n´ami zvolen´eho typu mikrokontrol´eru je to v ob-lasti pamˇeti od 0x0060 do 0x025f. Nen´ı mu ale vyhrazena cel´a tato oblast. Ihned po resetu mikrokontrol´eru je z´asobn´ık um´ıstˇen na adresu 0x00ff. Pro dosaˇzen´ı vyˇsˇs´ı efektivity k´odu se doporuˇcuje um´ıstit do oblasti od 0x0060 do 0x00ff glob´aln´ı promˇenn´e, z d˚uvodu rych-lejˇs´ıho pˇr´ıstupu k nim. Od adresy 0x0100 do 0x025f pak z˚ust´av´a pro z´asobn´ık a pˇr´ıpadn´e dalˇs´ı promˇenn´e 352 byt˚u.
Pˇri skoku do podprogramu prostˇrednictv´ım instrukc´ı JSR nebo BSR, se na z´asobn´ık ukl´adaj´ı 2 byty, obsahuj´ıc´ı adresu instrukce, kter´a bude provedena po n´avratu z podpro-gramu. Ze z´asobn´ıku budou tato data opˇet odebr´ana pouˇzit´ım instrukce RTS. Pˇri vyvol´an´ı pˇreruˇsen´ı se na z´asobn´ık ukl´ad´a 5 byt˚u programovac´ıho modelu. Konkr´etnˇe jde o regis-try PC, X, A a CCR (stavov´y registr). Ze z´asobn´ıku je programovac´ı model odebr´an pˇri vykon´an´ı instrukce RTI. Registr H nen´ı automaticky ukl´ad´an z d˚uvodu zachov´an´ı kompa-tibility s mikroprocesory M680515.
Registr SP je moˇzn´e pouˇz´ıt i jako index registr pro indexov´e adresov´an´ı. V´ıce informac´ı lze naj´ıt napˇr. v [1].
Pˇri pr´aci se z´asobn´ıkem je tˇreba d´avat pozor, aby nedoˇslo k pˇreps´an´ı jin´ych dat.
15
V pˇr´ıpadˇe pouˇzit´ı registru H v obsluze pˇreruˇsen´ı je nutn´e jej na z´asobn´ık uloˇzit resp. z nˇej obnovit pomoc´ı instrukce PSHH resp. PULH.
4.7
Inicializace ´
uloh j´
adra
U obecn´eho operaˇcn´ıho syst´emu plat´ı, ˇze jeho j´adro je prvn´ım zav´adˇen´ym programem. V naˇsem pˇr´ıpadˇe bude toto pravidlo dodrˇzeno. Pˇred vlastn´ım spuˇstˇen´ım j´adra (tj. pˇred pˇred´an´ım ˇr´ızen´ı j´adru) ale mus´ıme specifikovat, kter´e ´ulohy bude j´adro spravovat. Je proto nutn´e navrhnout mechanismus, kter´ym tyto ´ulohy jednoduˇse, efektivnˇe a jednoznaˇcnˇe urˇc´ıme a zaˇrad´ıme do pl´anovaˇce.
Je tˇreba si uvˇedomit, ˇze mus´ıme j´adru sdˇelit na kter´e adrese zaˇc´ın´a vlastn´ı k´od dan´e ´
ulohy. Tato informace se ale po prvn´ım spuˇstˇen´ı st´av´a zbyteˇcnou. J´adro se totiˇz v n´ asledu-j´ıc´ım spuˇstˇen´ı ´ulohy nebude vracet na jej´ı prvn´ı instrukci. Bude pokraˇcovat ve vykon´av´an´ı k´odu ´ulohy od adresy, na kter´e byl v pˇredchoz´ım bˇehu proces pˇreruˇsen. Potˇrebujeme tedy nav´ıc u kaˇzd´e ´ulohy ukl´adat informaci o adrese, od kter´e m´a pokraˇcovat pˇri dalˇs´ım spuˇstˇen´ı.
Nab´ız´ı se dvˇe moˇznosti, jak adresu poˇc´atku ´ulohy a m´ısta dalˇs´ıho vstupu uchov´avat: 1. pamatovat si obˇe adresy
2. adresu poˇc´atku pˇrepisovat adresou dalˇs´ıho vstupu do procesu
Prvn´ı moˇznost je jistˇe ˇcistˇejˇs´ı a pˇrehlednˇejˇs´ı. Vypl´ac´ı se v pˇr´ıpadˇe ˇze souˇc´ast´ı operaˇcn´ıho syst´emu bude napˇr. logovac´ı mechanismus, monitorov´an´ı bˇehu ´uloh, spr´avce proces˚u apod. Pokud ale bude adresa poˇc´atku procesu vyuˇzita pouze jednou, je jej´ı dalˇs´ı pˇr´ıtomnost zbyteˇcn´a. V syst´emech s omezen´ym mnoˇzstv´ım pamˇeti je pak v´ıt´ano tuto informaci z pamˇeti uvolnit, nebo ji vyuˇz´ıt pro jin´e ´uˇcely, coˇz naznaˇcuje druh´a moˇznost. Po prvn´ım vol´an´ı procesu se adresa zaˇc´atku procesu st´av´a zbyteˇcnou. Dojde–li k odebr´an´ı procesoru dan´e ´
uloze, uloˇz´ıme na adresu prvn´ı instrukce informaci o m´ıstˇe n´avratu do pˇreruˇsen´e ´ulohy. Pˇri vkl´ad´an´ı ´ulohy do syst´emu je nutn´e ´uloze zaruˇcit, ˇze budou dostupn´e prostˇredky, nezbytn´e pro jej´ı bˇeh. Vzhledem k rozsahu implementace j´adra se v naˇsem pˇr´ıpadˇe bude jednat pouze o zajiˇstˇen´ı pamˇeti pro ´ulohu. Bohuˇzel tento ´udaj nelze urˇcit bez pˇredbˇeˇzn´e znalosti dan´e ´ulohy. Mus´ıme tedy pouˇz´ıt alternativn´ı pˇr´ıstup, tj. urˇcit mnoˇzstv´ı pamˇeti pro kaˇzd´y proces.
K tomuto probl´emu m˚uˇzeme pˇristupovat automatizovanˇe – urˇcili bychom konstantn´ı ve-likost vyhrazen´e pamˇeti pro kaˇzd´y proces. Uˇzivatel by se tak nemusel starat o to, kolik pamˇeti jeho proces potˇrebuje ke sv´emu bˇehu. Tato moˇznost je pohodln´a, ale nepˇr´ıliˇs efektivn´ı v pˇr´ıpadˇe, ˇze pouˇz´ıv´ame r˚uznˇe pamˇet’ovˇe n´aroˇcn´e ´ulohy. Pak by se tato hodnota musela stanovovat s ohledem na pamˇet’ovˇe nejv´ıce n´aroˇcnou ´ulohu, coˇz by velo k v´yrazn´emu sn´ıˇzen´ı maxim´aln´ıho poˇctu proces˚u.
ˇ
Reˇsen´ım tedy v naˇsem pˇr´ıpadˇe bude explicitn´ı urˇcen´ı pamˇeti pro kaˇzd´y proces jednotlivˇe. Pˇri vkl´ad´an´ı ´ulohy bude muset uˇzivatel uv´est n´azev t´eto ´ulohy a jej´ı pamˇet’ovou n´aroˇcnost. Urˇcen´ı potˇrebn´e pamˇeti nebude trivi´aln´ı. Uˇzivatel bude muset zn´at princip ´ulohy, pˇr´ıpadnˇe prov´est simulaci pro zjiˇstˇen´ı minim´aln´ı pamˇet’ov´e z´atˇeˇze. Pˇr´ınosem ale bude dosaˇzen´ı vyˇsˇs´ı efektivity vyuˇzit´ı pamˇeti mikrokontrol´eru.
U obou moˇznost´ı pˇridˇelen´ı pamˇeti procesu m˚uˇze doj´ıt k situaci, kdy procesu pamˇet’ dojde. Pokus´ı se pak zapsat sv´a data mimo jemu vyhrazen´y prostor. Tuto situaci rozeb´ır´a do podrobna sekce4.8.
4.8
Bˇ
eh j´
adra
Jakmile m´ame vˇsechny ´ulohy vloˇzen´e, m˚uˇzeme dokonˇcit inicializaci j´adra a pˇredat mu ˇr´ızen´ı syst´emu.
Se spouˇstˇen´ım j´adra je spojena jeˇstˇe jedna povinnost. Je totiˇz nutn´e spustit nˇekterou z ´uloh, aby byla zajiˇstˇena univerz´alnost pˇrep´ın´an´ı ´uloh a j´adro nemuselo obsahovat ˇreˇsen´ı pro speci´aln´ı pˇr´ıpad, kdy by nedoch´azelo k poˇc´ateˇcn´ımu pˇrepnut´ı kontextu. Toto oˇsetˇren´ı by znamenalo sn´ıˇzen´ı v´ykonnosti j´adra. Pokud bychom nespustili nˇekterou z ´uloh pˇred za-veden´ım j´adra, doˇslo by k tomu, ˇze pˇri prvn´ım vol´an´ı j´adra by nebyla zn´am´a pˇreruˇsen´a ´
uloha. Za prvotn´ı ´ulohu bychom mohli povaˇzovat hlavn´ı vstupn´ı bod programu, nicm´enˇe by bylo nezbytn´e pˇridˇelit hlavn´ımu programu ˇc´ast pamˇeti. Ta by ale byla vyuˇzita pouze jednor´azovˇe. Proto zvol´ıme prvotn´ı spuˇstˇen´ı nˇekter´e z ´uloh. Bude tak zachov´ana uni-verz´alnost j´adra a minimalizov´any prostˇredky nutn´e pro inicializaci a spouˇstˇen´ı j´adra.
J´adro m´ame tedy spuˇstˇen´e a bˇeˇz´ı n´am i poˇc´ateˇcn´ı ´uloha. Nyn´ı je ˇcas procesoru plnˇe vˇenov´an t´eto ´uloze. Po uplynut´ı nastaven´eho ˇcasov´eho kvanta dojde k pˇreruˇsen´ı od ˇcasovaˇce. Syst´emem SIM je vybr´ana a zavol´ana obsluˇzn´a rutina pro pˇreruˇsen´ı pˇri pˇreteˇcen´ı ˇcasovaˇce.
Princip pˇrep´ın´an´ı ´uloh je zn´azornˇen na obr´azku4.5.
Obr´azek 4.5: Princip pˇrep´ın´an´ı ´uloh (emulace v´ıce´ulohovosti).
V obsluˇzn´e rutinˇe provedeme pˇrepnut´ı kontextu bˇeˇz´ıc´ı ´ulohy a m´odu OS. T´ımto se dosta-neme z reˇzimu uˇzivatelsk´eho (bˇeh jednotliv´ych ´uloh) do reˇzimu j´adra (spr´ava ´uloh, pl´anovaˇc apod.). V tomto m´ıstˇe provedeme kontrolu pamˇeti, kterou pˇreruˇsen´y proces vyuˇz´ıval. V pˇr´ıpadˇe ˇze doˇslo k pˇreps´an´ı dat jin´eho procesu, zastav´ıme ˇcinnost j´adra a upozorn´ıme na tuto skuteˇcnost uˇzivatele. Pokud bychom tuto kontrolu neprovedli, mohla by nastat si-tuace, kdy by se po skonˇcen´ı obsluˇzn´e rutiny nevr´atilo vykon´av´an´ı procesu do spr´avn´eho m´ısta. D´ale rozhodneme o ´uloze, kter´e bude v pˇr´ıˇst´ım okamˇziku pˇridˇelen v´ypoˇcetn´ı ˇcas. Zde pˇreb´ır´a exekutivu pl´anovaˇc, v naˇsem pˇr´ıpadˇe zaloˇzen´y na metodˇe Round–robin (viz 4.4).
Zb´yv´a n´am pˇrepnout se zpˇet do uˇzivatelsk´eho reˇzimu, tj. obnovit kontext novˇe vybran´e ´
ulohy. D´ıky informaci o adrese na kter´e bylo vykon´av´an´ı ´ulohy pˇreruˇseno je zajiˇstˇeno, ˇze ´
uloha bude pokraˇcovat na spr´avn´em m´ıstˇe. ˇ
Cas procesoru tedy opˇet vyuˇz´ıv´a uˇzivatelsk´a ´uloha, dokud nedojde k dalˇs´ımu pˇreruˇsen´ı od ˇcasovaˇce.
4.9
Omezen´ı dan´
a architekturou
V oblasti vestavˇen´ych syst´em˚u je n´avrh j´adra komplikovanˇejˇs´ı neˇz v ostatn´ıch poˇc´ıtaˇcov´ych syst´emech. Jsme nuceni pˇrizp˚usobit naˇse poˇzadavky podle dostupn´ych kapacit pamˇeti. Mus´ıme vz´ıt tak´e v ´uvahu frekvenci mikroprocesoru. D´ale bychom mˇeli db´at na bezpeˇcnou pr´aci s periferiemi mikrokontrol´eru, aby nedoch´azelo k neoˇcek´avan´emu a nebezpeˇcn´emu chov´an´ı syst´emu.
Pro naˇse ´uˇcely poskytuje mikrokontrol´er 68HC908LJ12 dostatek zdroj˚u. Nejd˚uleˇzitˇejˇs´ım je z naˇseho hlediska velikost pamˇeti RAM.
Pro vlastn´ı pouˇzit´ı m´ame k dispozici 512 byt˚u RAM pamˇeti, od adresy 0x0060 do 0x025f vˇcetnˇe. Do tohoto prostoru ale spad´a i m´ısto pro z´asobn´ık. Mus´ıme tedy zv´aˇzit um´ıstˇen´ı jednotliv´ych typ˚u promˇenn´ych a z´asobn´ıku.
Pamˇet’ pro naˇse j´adro uspoˇr´ad´ame podle obr´azku 4.6.
Obr´azek 4.6: Organizace pamˇeti RAM pro efektivn´ı vyuˇzit´ı j´adrem.
Do oblasti glob´aln´ıch promˇenn´ych je vhodn´e ukl´adat data, kter´a jsou vyuˇz´ıv´ana nejˇ cas-tˇeji. Jedn´a se o promˇenn´e j´adra, o data sd´ılen´a v´ıce procesy apod.
Mezi ostatn´ı promˇenn´e lze zaˇradit glob´aln´ı promˇenn´e jednotliv´ych ´uloh.
Pamˇeti pro procesy je k dispozici nejv´ıce, aby bylo umoˇznˇeno spravovat co nejvˇetˇs´ı mnoˇzstv´ı proces˚u. Tuto pamˇet’ m´a pod spr´avou j´adro.
Posledn´ı ˇc´ast je vˇenov´ana samotn´emu j´adru, kter´e si do n´ı ukl´ad´a data bˇehem v´ypoˇctu pamˇet’ov´e ochrany a pl´anovaˇce.
Kapitola 5
Implementace
5.1
V´
yvojov´
e prostˇ
redky
V´yvoj aplikac´ı pro vestavˇen´e syst´emy je znaˇcnˇe usnadnˇen existenc´ı v´yvojov´ych prostˇred´ı. Protoˇze se u jednotliv´ych v´yrobc˚u mikrokontrol´er˚u jednotliv´e rodiny od sebe odliˇsuj´ı, at’ uˇz po str´ance hardwarov´e nebo softwarov´e, lze narazit na mnoˇzstv´ı v´yvojov´ych prostˇred´ı, stavˇen´ych specifick´ym skupin´am mikrokontrol´er˚u na m´ıru. Aplikace pro ˇcipy od v´yrobce Atmel tak m˚uˇzeme vyv´yjet v programu AVR Studio, Microchip doporuˇcuje na sv´ych str´ank´ach v´yvojov´e prostˇred´ı MPLAB atd. I Motorola m´a pro rodinu 8bitov´ych kontrol´er˚u sv´e typick´e prostˇred´ı, usnadˇnuj´ıc´ı a urychluj´ıc´ı v´yvoj aplikac´ı. Je j´ım Freescale CodeWarrior, v souˇcasn´e dobˇe ve verzi 5.1. V tomto prostˇred´ı byla vyv´yjena i programov´a ˇc´ast t´eto pr´ace.
CodeWarrior poskytuje uˇzivateli mnoˇzstv´ı n´astroj˚u pro vˇetˇs´ı komfort, z nichˇz uvedu pouze z´akladn´ı z nich, kter´e napomohly pˇri v´yvoji zadan´eho j´adra:
• editor zdrojov´eho k´odu se zv´yraznˇen´ım syntaxe
• simul´ator pro ladˇen´ı aplikace bez nutnosti pˇr´ıtomnosti c´ılov´eho hardwaru • obvodov´y emul´ator, umoˇzˇnuj´ıc´ı sledov´an´ı stavu mikrokontrol´eru za bˇehu • moˇznost pr´ace s projekty
• propracovan´a n´apovˇeda
CodeWarrior nab´ız´ı moˇznost v´yvoje aplikace v assembleru nebo vyˇsˇs´ım programovac´ım jazyce – C a C++. Pro implementaci j´adra jsem zvolil jazyk C. K´od je pak pˇrehlednˇejˇs´ı a ˇcitelnˇejˇs´ı, s moˇznost´ı jednoduˇsˇs´ıch ´uprav a opravy chyb. Nev´yhodou je sn´ıˇzen´ı efektivity, protoˇze p´ıˇseme–li aplikaci pˇr´ımo v assembleru, m´ame pˇrehled nad kaˇzd´ym bytem a kaˇzdou provedenou instrukc´ı. I pˇresto je mezipˇreklad z jazyka C do assembleru dostateˇcnˇe efektivn´ı.
V´ıce informac´ı o v´yvojov´em prostˇred´ı lze naj´ıt na www str´ank´ach [2].
Pro snazˇs´ı orientaci jsem cel´y zdrojov´y k´od rozdˇelil do dvou specifick´ych celk˚u, a sice: 1. modul j´adra – obsahuje promˇenn´e a funkce, nezbytn´e pro spr´avn´e fungov´an´ı j´adra.
Tvoˇr´ı jej soubory kernel.h a kernel.c.
2. uˇzivatelsk´y modul – definuj´ıc´ı uˇzivatelsk´e funkce a volaj´ıc´ı funkce j´adra. Jedn´a se o soubor main.c.