You are on page 1of 63

n tt nghip

Li cm n

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 1


n tt nghip

Mc lc
Li cm n ...........................................................................................................1
Mc lc ................................................................................................................2
Danh mc hnh v v bng biu ........................................................................4
M u .................................................................................................................5
Phn I: Tng quan v h iu hnh thi gian thc .........................................6
I. Tng quan cc loi h iu hnh ...............................................................6
1. H iu hnh cho Mainframe ................................................................7
2. H iu hnh cho cc Server .................................................................8
3. H iu hnh a vi x l ........................................................................8
4. H iu hnh cho my tnh c nhn .......................................................8
5. H iu hnh thi gian thc...................................................................8
6. H iu hnh nhng ...............................................................................9
7. H iu hnh cho th thng minh ..........................................................9
II. Tm hiu h iu hnh thi gian thc ..................................................10
1. H iu hnh thi gian thc (RTOS) ...................................................10
2. Cc loi h iu hnh thi gian thc ...................................................13
3. Tm quan trng h iu hnh thi gian thc .......................................14
4. Cc h iu hnh thi gian thc ph bin ...........................................15
Phn II: Tm hiu chi tit v FreeRTOS ........................................................17
I. Tng quan v FreeRTOS.........................................................................17
1. Khi nim FreeRTOS ..........................................................................17
2. Cc c im ca FreeRTOS...............................................................18
3. Cc vn c bn trong FreeRTOS ....................................................20
4. Cch phn phi ti nguyn ca FreeRTOS .........................................23
5. So snh h FreeRTOS vi h iu hnh thi gian thc uCOS ............27
II. Cc file trong kernel ca FreeRTOS ...................................................29
1. Cc file chnh trong kernel ..................................................................29
2. Cc file cn li trongkernel ca FreeRTOS ........................................34
III. Port FreeRTOS ln vi iu khin PIC18F452 .....................................35
1. Mt s ch khi port FreeRTOS ln vi iu khin ............................35
2. Cc file cn port ln vi iu khin PIC18 s dng MPLAB ..........38

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 2


n tt nghip

Phn III: M phng v giao din h tr port FreeRTOS ln PIC ...............42


I. M phng port FreeRTOS ln vi iu khin PIC ...................................42
1. Phn tch bi ton m phng ...............................................................42
2. Trin khai bi ton v kt qu m phng ............................................43
II. Giao din h tr port FreeRTOS ln PIC ............................................44
1. tng, mc ch v nhim v ca giao din h tr .........................44
2. Trnh by c th v cc bc ci t v chy th ...............................44
Kt lun..............................................................................................................45
Ti liu tham kho ............................................................................................46
Ph lc ...............................................................................................................47
I. Gii thch r cc file trong FreeRTOS ....................................................47
1. Cc k hiu vit tt trong cc hm v bin ..........................................47
2. Cc file chnh cn c trong li FreeRTOS ..........................................47
3. Cc file cn li trong kernel ca FreeRTOS .......................................57
4. Cc file cn port FreeRTOS ln vi iu khin ................................59
II. Gii thch r v giao din ....................................................................62
Cc ti liu s thm ...........................................................................................63
I. Example.ppt ............................................. Error! Bookmark not defined.
II. RTOS.pdf ............................................. Error! Bookmark not defined.
III. Rtos ppts.ppt ........................................................................................63
IV. Cc file khc ........................................ Error! Bookmark not defined.
V. Lm cui tun ...................................... Error! Bookmark not defined.
VI. Vic lm ngy th 2 ............................. Error! Bookmark not defined.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 3


n tt nghip

Danh mc hnh v v bng biu


Hnh 1: S h iu hnh .............................................................................................6
Hnh 2: S h thng thi gian thc trong t ............................................................9
Hnh 3: H iu hnh thi gian thc trong iu khin ..................................................11
Hnh 4: S chc nng ca h iu hnh thi gian thc ............................................11
Hnh 5: Trng thi cc tc v ........................................................................................12
Hnh 6: S pht trin ca FreeRTOS........................................................................17
Hnh 7: S phn chia thi gian cc tc v thc hin ................................................21
Hnh 8: S chuyn giao cc tc v ...........................................................................21
Hnh 9: S phn chia cc s kin theo thi gian ......................................................23
Hnh 10: S lp lch ca v d v u tin k tha ....................................................26
Hnh 11: Bng so snh thi gian p ng 1 ..................................................................28
Hnh 12: Bng so snh thi gian p ng 2 ..................................................................28
Hnh 13: S cc file v th mc trong gi FreeRTOS.zip ti v .............................29
Hnh 14: V d v nh du hot ng ca kernel ........................................................31
Hnh 15: S chuyn i ng cnh ............................................................................39
Hnh 17: M phng trn Proteus ...................................................................................44

Bng 1: Bng so snh hai loi h iu hnh thi gian thc ..........................................13
Bng 2: Cc h tr khc nhau t FreeRTOS v OpenRTOS ........................................18
Bng 3: Bng phn phi RAM ca heap1 .....................................................................24
Bng 4: Bng phn phi RAM ca heap2 .....................................................................25
Bng 5: Bng phn chi tit cc tin trnh ......................................................................26
Bng 6: So snh lng RAM cung cp gia FreeRTOS v uCOS ...............................27
Bng 7: M t chi tit v cc task m phng ................................................................43

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 4


n tt nghip

M u Commented [PNH1]: Ni r v ngha ca vic port ln VDK


v s dng nhng phn mm free

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 5


n tt nghip

Phn I: Tng quan v h iu hnh thi gian thc


I. Tng quan cc loi h iu hnh
Nhng h thng my tnh bao gm mt hay nhiu b vi x l, b nh chnh,
bn phm v nhiu thit b vo ra. Tt c trong mt h thng phc tp. Vit chng
trnh kim sot v s dng tt c chng trnh mt cch chnh xc, ti u l cng vic
kh v th my tnh c trang b lp phn mm gi l h iu hnh [2], nhim v
ca n l qun l mi thit b v cung cp cc chng trnh ng dng vi giao din
n gin hn xung phn cng.

ng dng

Hnh 1: S h iu hnh
H iu hnh c th nhn t hai quan im [2]:
Qun l ti nguyn (resource manages)
My m rng (extended machines).
quan im qun l ti nguyn, cng vic ca h iu hnh l qun l cc phn
khc nhau ca h thng mt cch hiu qu. Ti nguyn ca h thng (CPU, b nh,
thit b ngoi vi, ...) vn rt gii hn, nhng trong cc h thng a nhim, nhiu ngi
s dng c th ng thi yu cu nhiu ti nguyn. tha mn yu cu s dng ch
vi ti nguyn hu hn v nng cao hiu qu s dng ti nguyn, h iu hnh cn
phi c c ch v chin lc thch hp qun l vic phn phi ti nguyn. Ngoi
yu cu dng chung ti nguyn tit kim chi ph, ngi s dng cn cn phi chia

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 6


n tt nghip

s thng tin (ti nguyn phn mm), khi h iu hnh cn m bo vic truy xut
n cc ti nguyn ny l hp l, khng xy ra tranh chp, mt ng nht.
quan im l cc my m rng, cng vic ca h iu hnh l cung cp cho
ngi s dng cc my o (virtural machine) s dng thun tin hn cc my thc
(actual machine). H iu hnh lm n i cc chi tit phn cng, ngi s dng c
cung cp giao din n gin, d hiu v khng ph thuc vo thit b c th.Thc t, ta
c th xem h iu hnh nh h thng bao gm nhiu my tnh tru tng xp thnh
nhiu lp chng ln nhau, my tnh mc di phc v cho my tnh mc trn. Lp
trn cng l giao din trc quan nht chng ta iu khin.
Ngoi ra h iu hnh theo c 4 chc nng sau:
Qun l qu trnh (process management): h iu hnh qun l cc tin
trnh, sp xp cho tin trnh no chy tin trnh no dng, phi hp nhp
nhng cc tin trnh.
Qun l b nh (memory management): h iu hnh qun l phn phi ti
nguyn nh cho cc tin trnh chy.
Qun l h thng lu tr (storage management): h iu hnh qun l lu
tr trn cc a, a CD.
Giao tip vi ngi dng (user interaction)
C 7 loi h iu hnh [2]:
H iu hnh cho Mainframe
H iu hnh cho Server
H iu hnh a vi x l
H iu hnh cho my tnh c nhn
H iu hnh thi gian thc
H iu hnh nhng
H iu hnh cho th thng minh
1. H iu hnh cho Mainframe
H iu hnh cho my Mainframe l h iu hnh mc cao nht, loi my
tnh ny c thy nhiu cc trung tm c s d liu ln. Nhng my tnh ny phn
bit vi my tnh c nhn gii hn x l v sc cha ca chng. Mt my tnh
Mainframe vi hng nghn a v hng nghn gigabybe d liu l iu bnh thng hu
nh khng c my tnh c nhn thng thng no c nhng tnh nng mnh ny. Hu
ht mainframe dng cho nhng ng dng rt ln.
H iu hnh cho mainframe c tnh nh hng cao cho vic x l nhiu vic
m mi vic cn lng ln I/O. Chng thng c s dng nhng kiu: m, qun

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 7


n tt nghip

l x l v phn chia thi gian. H thng m l h thng m nhng cng vic x l


u n khng c bt k nh hng no n ngi s dng hin ti. N c vn dng
gii quyt mt s lng ln cc yu cu nh, v d nh qu trnh kim tra nh
bng hoc sn bay. Mi phn ca cng vic th nh nhng h thng phi x l hng
trm hay hng nghn cng vic nh trn mt giy. H thng chia s thi gian chp
nhn iu khin t xa thc hin cng vic trn my tnh trong 1 ln, nh nhng yu
cu v d liu. Nhng chng trnh ny gn vi: h iu hnh mainframe thng thc
hin tt c. V d v h iu hnh mainframe l OS/390, th h sau ca OS/360.
2. H iu hnh cho cc Server
Di h iu hnh mainframe mt cp l h iu hnh chy trn cc server, mt
trong cc loi my tnh c nhn rt ln, nhng my trm, hoc kiu mainframe. Chng
phc v nhiu user trong mt thi im qua mng v chp nhn cc user chia s
ngun phn cng hay phn mm. Cc Server c th cung cp dch v in n, dch v
file hoc dch c web. Cc cung cp Internet chy trn nhiu server h tr khch
hng v cc Website s dng trong server lu tr cc trang Web v tr li cc yu
cu n. in hnh l cc h iu hnh UNIX v Window2000. Linux cng c s
dng cho cc server.
3. H iu hnh a vi x l
Cch kt hp nhiu t hp my tnh ph bin hin nay l kt ni nhiu CPU
trong mt h thng. Ph thuc vo s chun xc kt ni th no v chia s ci g,
nhng h thng ny c gi l my tnh song song, h a my tnh hay h a x l.
Chng cn nhng h iu hnh c bit nhng thng nhng bin i ny din ra trn
h iu hnh server, vi nhng tnh nng c bit cho giao tip v kt ni.
4. H iu hnh cho my tnh c nhn
Loi tip theo l h iu hnh cho my tnh c nhn. Cng vic ca n l cung
cp giao din tt cho mt ngi s dng. N c dng ch yu son tho vn bn,
sdng bng tnh, v truy cp Internet. V d nh Windows98, h iu hnh
Macintosh v Linux. H iu hnh my tnh c nhn c bit n rt rng ri do ch
cn t nhng ch dn. Trn thc t, nhiu ngi c trnh khc nhau u c th s
dng c.
5. H iu hnh thi gian thc
Mt loi h iu hnh khc l h iu hnh thi gian thc. H iu hnh ny
c m t l qun l thi gian nh thng s cha kha. V d nh trong h thng iu
khin cng nghip, my tnh thi gian thc cn phi thu thp d liu v qu trnh sn
xut v s dng d liu iu khin cc my trong x nghip theo cc deadline

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 8


n tt nghip

cng phi c tha mn. Mt v d khc vi dy chuyn lp rp t, mt hnh ng


nht nh phi c thc hin thi im nht nh no , nu robot thc hin sm
qu hoc mun qu th chic xe s b li c th dn n ph hy. Trong h thng m
hnh ng buc phi thc hin vo thi im nht nh (hoc trong khong cho php)
th l h thng thi gian thc cng. Mt h thi gian thc khc l h thi gian thc
mm, trong c nhng p ng deadline c th khng tha mn ton b, h truyn
ting ni s hay a phng tin l mt v d cho h ny. in hnh cho h iu hnh
thi gian thc l VxWorks v QNX.

Hnh 2: S h thng thi gian thc trong t

6. H iu hnh nhng
Tip tc vi h nh hn, chng ta n vi nhng my tnh palmtop v h
nhng. Palmtop hay PDA l loi my tnh nh hot ng vi s lng nh cc chng
trnh. H nhng chy trn nhng my tnh iu khin cc thit b ni chung khng
ging vi my tnh, nh TV sets, l vi sng, in thoi di ng. chng thng c tnh
thi gian thc nhng kch c, b nh v s hn ch nng lng lm chung c bit.
Nhng h thng dng l PalmOS v Windows CE.
7. H iu hnh cho th thng minh
H iu hnh nh nht chy trn cc th thng minh, nh credit card, thit b
bao gm chip CPU. Chng qun l rt nghim ngt nng lng s dng v cch nn

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 9


n tt nghip

b nh. Mt s h ch s dng cho mt chng trnh duy nht nh thanh ton in t,


nhng nhng h khc phc v nhiu chng trnh trong cng mt th thng minh.
thng l nhng h thng c quyn.
Mt s th thng minh c vit trn Java, trn ROM ca th thng minh cn
chng trnh dch cho JVM. Java applet c ti v th v c dch ra s dng.
Mt s th c th chy nhiu Java applet trong cng mt thi im, qun l nhiu
chng trnh cn b lp lch. Cn qun l v m bo cho h thng khi c hai hay
nhiu applet chy trong cng mt thi im. Nhng vn ny cn c qun l bi
h iu hnh hin ti trn th.
II. Tm hiu h iu hnh thi gian thc
Trong phn ny ta s i su vo tm hiu h iu hnh thi gian thc vi khi
nim, cc c im v tm quan trng ca h iu hnh thi gian thc trong thc t.
T lin h trnh by c th v h iu hnh thi gian thc m ngun m FreeRTOS
v cc vn c bn trong
1. H iu hnh thi gian thc (RTOS)
a) Khi nim h iu hnh thi gian thc
A real-time system is one in which the correctness of the system depends not
only on the logical results, but also on the time at which the results are produced [5].
C th dch: h thng thi gian thc l h thng m s hot ng tin cy ca n khng
ch ph thuc vo s chnh xc ca kt qu, m cn ph thuc vo thi im a ra kt
qu, h thng c li khi yu cu v thi gian khng c tho mn.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 10


n tt nghip

Hnh 3: H iu hnh thi gian thc trong iu khin


Mt RTOS thng c tnh mm do v c tnh cu trc. N cho php tch hp
thm cc dch v gia tng theo vng trn ng tm. Vng trong cng hay nhn cung
cp nhng c tnh quan trng nht ca h iu hnh thi gian thc. Cc c im
khc c th c thm vo nh mt vng ngoi khi cn thit. Nhn nh ca mt
RTOS thch hp cho mt ng dng b x l nh, trong khi nhng vng ngoi c th
gip xy dng h thng thi gian thc ln. Cc RTOS thng cung cp cc mc x
l u tin. Cc cng vic u tin cao hn s c thc hin trc.
Ngoi cc chc nng ca h iu hnh nh trn, h iu hnh thi gian thc c
th h tr thm cc chc nng sau:
Lp lch phn chia thi gian s dng ti nguyn, t mc u tin cc tc v.
Truyn thng v ng b gia cc tc v hoc gia tc v v ngt.
Phn phi b nh ng.
Qun l cc thit b vo ra.

Hnh 4: S chc nng ca h iu hnh thi gian thc


Nhiu h iu hnh khng thi gian thc cng cung cp nhn ca tng t
nhng im khc bit ln nht ca h iu hnh thi gian thc v h iu hnh khng
thi gian thc ni chung l tnh tin nh (deterministic). Thi gian tin nh tc l cc
dch v ca h iu hnh thc hin ch c yu cu mt khong thi gian nht nh,
mun tin nh tc l phi tnh ton chnh xc theo ton hc. Cc p ng v thi gian
l nghim ngt trong h iu hnh thi gian thc, khng th c thnh phn thi gian
ngu nhin. Vi mt phn thi gian ngu nhin c th to ra tr ngu nhin, t gy
ra cc p ng deadline khng tho mn.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 11


n tt nghip

b) Cc c im ca RTOS
Mt RTOS c ng dng thnh cng vo mt nn vi iu khin thng phi
bao gm 3 nhm sau:
RTOS Kernel: nhn ca h iu hnh, trong thc thi cc nhim v c bn
ca RTOS. Kernel dng chung cho tt c cc platform v c cp nht
theo version.
Port: thng c pht trin bi nh sn xut MCU, n khc nhau i vi
tng h MCU.
BSP (Board Support Package): cha cc hm chc nng truy xut n cc
ngoi vi, thc cht y chnh l driver cho cc ngoi vi ca MCU.
Mt RTOS tt ch khi c nhn tt, ti liu tt v c phn pht cng cc cng
c tt pht trin v vn hnh ng dng. V vy, cc tnh ton v khong thi gian
ngt v thi gian chuyn mch ng cnh l rt quan trng, cng vi cc thng s khc
lm nn mt RTOS tt
Xy dng cc khi c bn ca phn mm di RTOS l tc v - task. Vic to
ra cc tc v di RTOS l rt n gin. Mt tc v n gin ch l mt th tc con.
Ti mt s im trong chng trnh, chng ta thc hin mt hoc nhiu li gi ti mt
hm trong RTOS bt u cc tc v. Mi tc v trong RTOS lun lun mt trong
ba trng thi chnh:

Hnh 5: Trng thi cc tc v

Running: Vi ngha b x l ang thc hin tc v. Vi mt b x l th


chng ta ch chy mt tc v ti mt thi im nht nh.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 12


n tt nghip

Ready: Vi ngha mt s tc v khc sn sng chy nu b x l ri.


Blocked: Vi ngha tc v khng sn sng chy k c khi b x l trong
trng thi ngh - Idle. Tc v trong trng thi ny v chng i mt s kin
bn ngoi tc ng kch hot n tr li trng thi sn sng.
2. Cc loi h iu hnh thi gian thc
H iu hnh thi gian thc cng (Hard Real Time Operating Systems): l h
iu hnh thi gian thc m cc tc v khng ch ng v thc thi m cn phi ng
v thi gian, khng cho php sai lch v thi gian. N thng c tm thy cc lp
thp vi tng vt l. V d nh h thng iu khin nng lng ca t l h iu
hnh thi gian thc v ch cn tr iu khin mt cht c th gy ra li nng lng gy
hng hc ph hu. Mt v d khc l h iu hnh thi gian thc cng trong y hc nh
my iu ho nhp tim v iu khin cc qu trnh cng nghip.
H iu hnh thi gian thc mm (Soft Real Time Operating Systems): l h
iu hnh thi gian thc cho php sai lch v thi gian v dung sai li mt mc
no . N thng c tm thy nhng ch xy ra s tranh chp v cn gi s kt
ni h thng phn ng vi s thay i hon cnh. Ni chung so vi h iu hnh thi
gian thc cng, h iu hnh thi gian thc mm t s tho mn yu cu cho hu ht
cc tc v hn l tho mn mt deadline no , n cho php mt s deadline khng
c tho mn mt dung sai no . V d nh phn mm duy tr v cp nhtk
hoch bay cho hng hng khng thng mi, h thng truyn hnh v nghe nhc trc
tuyn, iu khin my git,...

Cc c im H iu hnh thi gian H iu hnh thi


thc cng gian thc mm
Thi gian p ng tho mn nghim ngt cho php sai lch trong
gii hn
Thc thi ti thi im ti c th d bo trc gim st
nng nht
an ton thng l tranh chp t tranh chp
Dung lng d liu nh hoc trung bnh ln
iu khin nhp ph thuc mi trng ph thuc vi diu khin
on d liu on ngn on di
Bt li t ng ph thuc ngi dng

Bng 1: Bng so snh hai loi h iu hnh thi gian thc

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 13


n tt nghip

3. Tm quan trng h iu hnh thi gian thc


Do cc yu cu kht khe v thi gian, v vic s dng ti nguyn, v s quan
trng ca vic lp lch, cc h iu hnh thi gian thc ng vai tr rt quan trng.
Chng ging nh nhng th vin, chng ta c th dng, thm bt cc dch v cho ph
hp vi ng dng thi gian thc c th pht trin ng dng thi gian thc mt cch
nhanh hn, tin tng hn. V vy s tn ti ca cc h iu hnh thi gian thc l rt
cn thit v quan trng.
C th tm thy h iu hnh thi gian thc bt k ni no. Chng cng ph
bin nh nhng h iu hnh m bn quen thuc nh Windows, Mac OS v Unix.
Chng m thm lm vic bn trong cc b nh tuyn v chuyn mch trn mng,
ng c xe, my nhn tin, in thoi di ng, thit b y t, thit b o lng v iu
khin cng nghip v cc v s ng dng khc.
Mt thuc tnh quan trng ca RTOS l kh nng tch bit vi ng dng. Nu
c mt chng trnh b "cht" hay hot ng khng hp l, h iu hnh thi gian thc
c th nhanh chng c lp chng trnh ny, kch hot c ch phc hi v bo v cc
chng trnh khc hay chnh bn thn h iu hnh khi cc hu qu ca cc lnh sai.
C ch bo v tng t cng c p dng trnh tnh trng trn b nh do bt k
chng trnh no gy ra. RTOS xut hin hai dng: cng v mm. Nu tnh nng x
l ng vi mt s kin no khng xy ra hay xy ra khng nhanh, RTOS cng
s chm dt hot ng ny v gi khng gy nh hng n tin cy v tnh sn
sng ca phn cn li ca h thng.
RTOS v my tnh nhng tr nn ph bin trong cc ng dng quan trng nn
cc nh pht trin thng mi ang to nn nhng RTOS mi vi tnh sn sng cao.
Nhng sn phm ny c mt thnh phn phn mm chuyn dng lm chc nng cnh
bo, chy cc chng trnh chn on h thng gip xc nh chnh xc vn trc
trc hay t ng chuyn i sang h thng d phng. Hin thi RTOS sn sng cao h
tr bus Compact PCI ca t chc PCI Industrial Computer Manufacturers Group, bus
ny dng cho phn cng c th trao i nng.
Trong nhiu nm, ng dng da trn RTOS ch yu l trong cc h thng
nhng v mi gn y th chng c mt khp ni, t thit b y t c iu khin
bng my nh cho n my pha c ph, nhng ng dng tnh ton phn tn ang thc
y cc nh pht trin h iu hnh thc hin nghin cu v pht trin chun. Chnh
ph M cng c mt s chng trnh v lnh vc ny nh cng ngh qun l ti
nguyn thi gian thc, mng, qun l d liu v phn mm iu khin trung gian. Mc
ch ca chng trnh l lm cho cc h thng cng tc, phn tn c th giao tip v

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 14


n tt nghip

chia s ti nguyn vi nhau. Mt u ban chuyn trch ang y mnh vic to ra


khung cng ngh cho tnh ton phn tn thi gian thc, p dng cho c ng dng qun
s v thng mi.
4. Cc h iu hnh thi gian thc ph bin
a) LynxOS
LynxOS [12] l loi h iu hnh thi gian
thc cng, lm vic vi Unix v Java. Cc thnh
phn LynxOS c thit k tin nh (thi gian thc
cng) c ngha l phi p ng trong khong thi
gian bit trc. Thi gian p ng tin nh c m bo ngay c khi cng vo ra
phi ti nng do m hnh n lung ca kernel, lm cho chng trnh phc v ngt rt
ngn v nhanh.
LynxOS 3.0 pht trin t kin trc nguyn gc (ch gm mt m un lm tt c
mi vic) ca cc phin bn ban u ln n thit k microkernel. Dung lng ca
microkernel l 28Kbyte v cung cp cc dch v c bn nh lp lch, phn lung ngt
v ng b. Cc dch v khc c cung cp bi cc m un dch v nh hn gi l
Kernel Plug-Ins (KPIs). Nh thm KPIs vo microkernel, h thng c th cu hnh
h tr vo ra v qun l file, TCP/IP,... n hot ng nh h iu hnh UNIX a
nhim ging phin bn trc.
b) Vxworks
VxWorks [11] l h iu hnh thi gian thc
c s dng trong h nhng in hnh c th k n h
iu hnh cho robot trn sao Ha nm 1997. VxWorks
c th h tr khch hng d dng v c th chy trn hu
ht cc vi x l c thit k tnh ton phn tn. N cn
c s dng iu khin mng v cc thit b truyn thng, cc thit b o v kim tra,
thit b ngoi vi, h thng t ng ho, thit b hng khng v v tr, v cc loi sn
phm tiu dng khc.
Vxworks c vi im ging vi Unix nh shell, cc hm debugging, qun l b
nh, gim st thc thi v h tr a nhim. H iu hnh bao gm li cho lp lch a
nhim, tr li ngt, truyn thng cc tin trnh v h thng file. Lp trnh trong
VxWorks c th kh cho ngi mi lp trnh v lp trnh vin phi vit code trn yu
cu c bn ti thiu. Tuy nhin, thc t cho thy ch mt lng nh ni dung cn lu
tr v phc hi trong VxWorks, n s dng t ti nguyn hn Unix, v vy n chy
nhanh hn.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 15


n tt nghip

c) QNX/Neutrino
Mc ch chnh ca QNX Neutrino [11] l ph
bin rng ri h thng m POSIX API theo m hnh
bc thang mnh cho cc h thng trn din rng t cc
h nhng ti nguyn hp n cc mi trng my tnh
phn tn mnh nht. H iu hnh QNX Neutrino h
tr nhiu dng vi x l nh Intel x86, ARM, XScale, PowerPC, MIPS v SH-4. QNX
Neutrino l chun mc cho cc ng dng nhng thi gian thc. N c th co gin ti
mt kch thc rt nh v cung cp nhiu tc v hot ng ng thi, cc tin trnh,
iu khin lp lch th t u tin v chuyn ng cnh nhanh tt c cc thnh phn
c bn ca mt ng dng nhng thi gian thc.
QNX Neutrino l rt mm do. Ngi pht trin c th d dng tu bin OS cho
ph hp vi ng dng ca mnh. T mt cu hnh c bn nht ca mt nhn nh
(microkernel) cng vi mt vi module nh ti mt h thng c trang b pht trin
mng din rng phc v hng trm ngi dng.
QNX Neutrino t c mc chuyn mn ho v tnh hiu qu, tnh module
ho v tnh n gin vi hai yu t c bn sau:
Kin trc microkernel ca QNX m bo cch ly b nh cc process, khng
cho chng s ph hoi ln nhau
Giao tip lin qu trnh da trn thng ip
d) uCOS
C/OS [10] l nhn mt h iu hnh
thi gian thc do J. Labrosse xy dng. N
l nhn h iu hnh thi gian thc c tnh
kh chuyn cao, mm do, c tnh nng u
tin, thi gian thc v a tc v. C/OS h tr cc tnh nng sau: b lp lch, truyn
thng ip, ng b v chia s d liu gia cc tc v, qun l b nh, cc thit b vo
ra, h thng file, mng.
C/OS h tr nhiu b vi x l v rt gn nh s dng cho nhiu h thng
nhng. Phin bn C/OS-II tng cng thm kh nng t tn ti mi i tng ca
nhn. c bit vi phin bn V2.6, chng ta c th gn tn ti mt tc v, n bo,
mailbox, hng i, mt nhm s kin hay mt vng b nh. Do , b pht hin li c
th hin th tn ca nhng i tng , v cho php chng ta nhanh chng xem thng
tin v nhng i tng. Ngoi ra, V2.6 cho php b sa li c thng tin cu hnh ca
mt ng dng v hin th nhng thng tin .

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 16


n tt nghip

Phn II: Tm hiu chi tit v FreeRTOS


I. Tng quan v FreeRTOS
1. Khi nim FreeRTOS

Thng mi ho Chun IEC 61508

Hnh 6: S pht trin ca FreeRTOS


FreeRTOS [1] l li ca h iu hnh thi gian thc min ph. H iu hnh ny
c Richard Barry cng b rng ri t nm 2003, pht trin mnh n nay v c
cng ng mng m ngun m ng h. FreeRTOS c tnh kh chuyn, m ngun m,
li c th down min ph v n c th dng cho cc ng dng thng mi. N ph hp
vi nhng h nhng thi gian thc nh. Hu ht cc code c vit bng ngn ng C
nn n c tnh ph hp cao vi nhiu nn khc nhau.
u im ca n l dung lng nh v c th chy trn nhng nn m nhiu h
khng chy c. C th port cho nhiu kin trc vi iu khin v nhng cng c pht
trin khc nhau. Mi port chnh thc bao gm nhng ng dng v d tin cu hnh
biu hin s ring bit ca li, kin thc mi v hng pht trin. Nhng h tr min
ph c cung cp bi cng ng mng. H tr thng mi vi nhng dch v pht
trin y cng c cung cp.
FreeRTOS c cp giy php bi bn c chnh sa bi GPL (General
Public License) v c th s dng trong ng dng thng mi vi giy php ny.
Ngoi ra lin quan n FreeRTOS c OpenRTOS v SafeRTOS. OpenRTOS l bn
thng mi ca FreeRTOS.org v khng lin quan g n GPL. SafeRTOS l v c
bn da trn FreeRTOS nhng c phn tch, chng minh bng ti liu v kim tra
nghim ngt vi chun IEC61508. V chun IEC61508 SIL3 c to ra v pht
trin c lp hon thin ti liu cho SafeRTOS.
C th cc h tr khc nhau ca FreeRTOS v OpenRTOS:

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 17


n tt nghip

FreeRTOS OpenRTOS
Min ph C Khng
C th s dng trong ng dng thng mi? C C
Min ph trong ng dng thng mi? C C
Phi a ra m ngun ca code ng dng? Khng Khng
Phi a ra thay i m ngun ca li? C Khng
Phi a vo bo co nu s dng FreeRTOS.org? C, ng dn Khng
Phi cung cp m FreeRTOS cho ngi s dng? C Khng
C th nhn h tr thng mi? Khng C

Bng 2: Cc h tr khc nhau t FreeRTOS v OpenRTOS

2. Cc c im ca FreeRTOS
a) Cc chc nng c cung cp trong FreeRTOS
FreeRTOS.org l li ca h iu hnh thi gian thc c thit k cho cc h
thng nhng nh, vi cc chc nng chnh sau [1] :
Li FreeRTOS h tr c preemptive, cooperative v cc la chn cu hnh
lai gia hai phn.
SafeRTOS l sn phm dn xut, cung cp m ngun ring mc cao.
c thit k nh, n gin v d s dng.
Cu trc m ngun rt linh ng c vit bng ngn ng C.
H tr c task v co-routine
Mnh v hm theo vt.
C la chn nhn bit trn ngn xp.
Khng gii hn s task c th to ra, ph thuc vo ti nguyn ca chip.
Khng gii hn s mc u tin c s dng.
Khng gii hn s task cng mt mc u tin.
H tr truyn thng v ng b gia cc task hoc gia task v ngt:
queues, binary semaphores, counting semaphores and recursive mutexes.
Mutexes vi u tin k tha.
Cc cng c pht trin min ph, port cho Cortex-M3, ARM7, PIC,
MSP430, H8/S, AMD, AVR, x86 v 8051.
Min ph m ngun phn mm nhng.
Min ph trong ng dng thng mi.
Tin cu hnh cho cc ng dng demo, t d dng tm hiu v pht trin.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 18


n tt nghip

b) Ti sao chn FreeRTOS?


y l mt s nguyn nhn cho thy ti sao li chn FreeRTOS cho ng dng
thi gian thc [1]:
Cung cp mt gii php cho rt nhiu kin trc v cng c pht trin khc
nhau.
c bit l ng tin cy. S tin cy c m bo bi nhng hot ng
m nhn bi SafeRTOS.
ang tip tc cc hot ng pht trin m rng.
S dng t ROM, RAM v it b qu ti.
M ngun c vit bng C nn ph hp vi nhiu nn khc nhau.
Rt n gin, li ca h iu hnh ch gm 3 hoc 4 file (ph thuc vo vic
c s dng co-routine hay khng). Phn ln cc file nm trong file .zip c
ti v, n cung cp hu ht cc ng dng.
C th s dng min ph trong ng dng thng mi (xem k cc iu kin
bn quyn).
H tr nhiu: porting, nn pht trin, hoc cc dch v pht trin ng dng
m n yu cu.
L t chc tt vi s ngi s dng ln v ngy cng tng.
Bao gm nhiu v d tin cu hnh cho mi port. Khng cn tnh ton xem
lm th no ci t, ch ti v v dch!
C nhng h tr min ph t cng ng mng.
c) Cc vi iu khin v trnh dch c h tr port FreeRTOS
Vi iu khin:
Vi iu khin ST STM32 Cortex-M3.
ARM Cortex-M3 da trn vi iu khin s dng ARM Keil (RVDS), IAR,
Rowley v cng c GCC.
Atmel AVR32 AT32UC3A: vi iu khin flash s dng GCC v IAR.
Cc vi in t ST: STR71x (ARM7), STR75x( ARM7), STR9 (ARM9)
(STR711F, STR712F, ).
LPC2106, LPC2124 v LPC2129 (ARM7). Gm m ngun cho I2C driver.
H8S2329 (Hitachi H8/S) vi EDK2329 demo.
Atmel AT91SAM7 family (AT91SAM7X256, AT91SAM7X128,
AT91SAM7S32, AT91SAM7S64, AT91SAM7S128, AT91SAM7S256).
Bao gm m ngun USB driver cho IAR Kickstart, uIP v lwIP nhng vo
Ethernet TCP/IP.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 19


n tt nghip

AT91FR40008 vi Embest ATEB40X demo.


MSP430 vi demo cho LCD driver. MSPGCC and Rowley CrossWorks
c h tr.
HCS12 (MC9S12C32 loi b nh nh v MC9S12DP256B kiu bank nh)
Fujitsu MB91460 series (32bit) and MB96340 series (16FX 16bit) s dng
trnh dch Softune v Euroscope debugger.
Cygnal 8051 / 8052
Microchip PICMicro PIC18 (8 bit), PIC24 (16bit MCU) v dsPIC (16bit
DSC) v PIC32 (32bit)
Atmel AVR (MegaAVR) vi STK500 demo.
Vi iu khin RDC8822 vi demo cho Flashlite 186 SBC.
PC (chy FreeDOS hoc DOS khc)
ColdFire, ch rng port nyko c h tr.
Zilog Z80, ch rng port nyko c h tr.
Xilinx Microblaze chy trn Virtex4 FPGA.
Xilinx PowerPC (PPC405) chy trn Virtex4 FPGA.
Ngoi ra cc trnh dch h tr port: Rowley CrossWorks, Keil, CodeWarrior,
IAR, GNU GCC (nhiu loi), MPLAB, SDCC, Open Watcom, Paradigm v Borland.
3. Cc vn c bn trong FreeRTOS
Cc vn c bn trong FreeRTOS [1] cng nm trong cc vn c bn ca
RTOS ni chung:
a nhim (Mutiltasking)
B lch trnh(Scheduling)
Chuyn i ng cnh (Context Switching)
ng dng thi gian thc (Real Time Application)
Lp lch thi gian thc (Real Time Scheduling)
a) a nhim
Thut ng kernel c dng ch n mt thnh phn ct li bn trong ca
mt h iu hnh. Cc h iu hnh nh Linux s dng nhn kernel cho php nhiu
ngi dng c th truy cp vo my tnh dng nh l lin tc v mt thi gian. Nhiu
ngi dng c th thi hnh cc chng trnh nhn b ngoi c v nh l ng thi vi
h iu hnh. Thc ra, mi mt chng trnh ang thi hnh l mt nhim v c
phn chia iu khin bi h iu hnh. Nu mt h iu hnh c kh nng thi hnh
nhiu tc v th c gi l a nhim (multitasking). S dng h iu hnh a nhim

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 20


n tt nghip

s lm n gin qu trnh thit k nhng bi ton m n s l gnh nng nu chuyn


ht cho phn mm ng dng x l.
a nhim v tnh nng lin lc ni b gia cc tc v ca h iu hnh cho
php cc ng dng phc tp c th phn chia ra thnh cc tc v nh hn, n gin
hn, d qun l hn. Cc phn chia nh ny s gip chng ta d dng c kt qu trong
qu trnh kim tra phn mm, s dng li m chng trnh ... Nhng s tnh ton thi
gian phc tp v cc qu trnh tun t chi tit c tch bit ra khi chng trnh ng
dng v chuyn nhim v ny cho h iu hnh m trch.
Thng th cc b vi x l ch c th thc hin mt tc v duy nht trong mt
thi im nhng vi s chuyn i mt cch rt nhanh gia cc tc v ca mt h iu
hnh a nhim lm cho chng dng nh c chy ng thi vi nhau. iu ny
c m t s di y vi 3 tc v v gin thi gian ca chng.

Hnh 7: S phn chia thi gian cc tc v thc hin


b) Lp lch
B lch trnh l mt phn ca nhn h iu hnh chu trch nhim quyt nh
nhim v no s c thi hnh ti mt thi im. Nhn kernel c th cho dng mt tc
v v phc hi li tc v sau nhiu ln trong sut qu trnh sng ca tc v .
Scheduling policy - c ch lp lch trnh l thut ton c s dng bi b lch
trnh quyt nh tc v no c thi hnh ti thi im c ch dnh. C ch ca
mt h thng nhiu ngi dng (khng phi thi gian thc) gn nh l cho php mi
nhim v chim lnh hon ton thi gian ca b vi x l. Cn c ch ca h thi gian
thc hay h nhng s c m t sau y

Hnh 8: S chuyn giao cc tc v

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 21


n tt nghip

Cc task 1, 2, 3 c mc u tin gim dn c khi no tc v u tin cao yu cu


th cc task u tin thp phi nhng.
Ti (1), nhim v th nht c thi hnh
Ti (2), nhn kernel dng tc v 1
Ti (3), phc hi li tc v 2
Ti (4), trong khi tc v 2 ang thi hnh, n cm cc ngoi vi ca vi x l
ch cho php chnh bn thn tc v ny truy cp vo.
Ti (5), nhn kernel dng tc v 2
Ti (6) phc hi li tc v 3
Tc v 3 c th truy cp vo cng ngoi vi ca vi x l v thy rng b
cm, v vy n khng th tip tc v t dng ti v tr (7)
Ti (8), nhn kernel phc hi li task 1.
Ti (9), thi im tip theo tc v 2 ang thi hnh v kt thc vi ngoi vi
ca vi x l v cho php cc tc v khc truy cp.
Thi im tip l tc v 3 ang thi hnh v thy rng c th truy cp vo
ngoi vi nn tip tc thc thi cho khi b dng bi nhn kernel
c) Chuyn i ng cnh
Khi mt tc v ang thi hnh, n s s dng cc thanh ghi v truy cp vo
ROM, RAM nh cc tc v khc. Nhng ti nguyn ny bao gm : thanh ghi, RAM,
ROM, stack ... gi l ng cnh thc thi nhim v ca mt tc v.
Mt tc v l mt on m lin tc, n s khng bit v khng c bo trc
nu b dng hoc c phc hi bi kernel. Phn tch trng hp m mt tc v b
dng mt cch tc th khi ang thc hin mt lnh cng hai thanh ghi ca b vi x l.
Khi tc v b dng, cc tc v khc s thi hnh v c th thay i cc
gi tr thanh ghi ca b vi x l. Da trn s phc hi mt tc v s khng
nhn bit c rng cc thanh ghi ca vi x l b thay i - nu s dng
cc gi tr b thay i s dn n mt kt qu sai.
ngn chn kiu li ny, yu t cn thit l s phc hi mt tc v phi c
mt ng cnh ng nht. Nhn h iu hnh s chu trch nhim xc nh
chc chn trng hp no cn chuyn ng cnh v thc hin nhim v
khi tc v b dng. Khi tc v c phc hi, ng cnh c lu li s
c trao tr cho tc v thc hin tip.
d) Cc ng dng thi gian thc
H iu hnh thi gian thc thc hin a nhim cng vi nguyn l trn nhng
cc i tng ca n th rt khc so vi cc i tng ca h khng phi thi gian

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 22


n tt nghip

thc. S khc bit ny c phn nh bi c ch lp lch trnh. H thi gian thc/ h


nhng c thit k sao cho cc p ng v mt thi gian l thc i vi cc s kin
xy ra trn th gii tht. Cc s kin ny xy ra trn th gii thc c th c thi im
kt thc trc ngay c h nhng/h thi gian thc phi p ng v c ch lp lch ca
h RTOS phi xc nh c thi im kt thc m n phi gp.
thc hin nhng mc tiu trn, k s lp trnh phi gn quyn u tin cho
mi mt tc v. Sau c ch lp lch ca h RTOS ch n gin l xc nh tc v c
quyn u tin cao nht c php thi hnh thi im ang x l. iu ny dn n
cn chia s thi gian x l mt cch cng bng gia cc tc v c cng u tin v sn
sng thc thi.
Tc v iu khin c quyn u tin cao nht v:
Thi hn cho tc v iu khin c yu cu nghim ngt hn tc v x l bn
phm.
Hu qu ca vic mt thi hn kt thc (dead line) ca tc v iu khin s
ln hn tc v x l phm.
e) B lp lch thi gian thc
S di y trnh by cc tc v c nh ngha nh th no trong phn
trc s c lch trnh bi h thi gian thc. H RTOS trc tin t to cho n mt
tc v gi l Idle Task, tc v ny ch thc thi khi khng c tc v no c kh nng
thc thi. Tc v Idle ca h RTOS lun trng thi sn sng hot ng.

Hnh 9: S phn chia cc s kin theo thi gian


Vi gin trn, ta thy nu tc v iu khin yu cu hot ng th tc v bn
phm buc phi nhng do trong lp trnh ta lun tc v iu khin c mc u tin
cao hn, b lp lch thi gian thc cho php cc tc v c u tin cao hn chim quyn
chy trc. Trong b lp lch lun c tc v Idle nhm qun l phn phi ti nguyn
v n lun mc u tin thp nht, ch c chy khi khng c tc v no chy.
4. Cch phn phi ti nguyn ca FreeRTOS

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 23


n tt nghip

a) Phn phi RAM [1]


Kernel RTOS buc phi sp xp, phi hp RAM cho to ra mi tc v, hng
i hoc semaphore. Gi hm malloc() v free() thnh thong c s dng cho mc
ch ny nhng c mt s nhc im tn ti:
Khng phi lc no n cng tn ti trong cc h nhng
Chim nhiu dung lng code
y khng phi l mt on tin cy
Khng th tin liu c (s mt nhng khong thi gian khc nhau khi
chy cc hm ny khi gi t hm ny n hm khc).
nn nhng cch phn phi RAM l khng nhiu. Mt h thng nhng hay thi gian
thc s c s lng RAM v cc i hi v thi gian khc nhng h thng khc nn
nu ch c 1 cch phn phi RAM s ch p ng c mt s t ng dng.
gii quyt vn ny, phng php phn phi b nh API nm trong lp
portable cung cp cc gii php thch ng cho tng ng dng ring bit. Khi kernel
yu cu RAM, thay v gi malloc() c th gi pvPortMalloc(). Khi RAM c gii
phng, thay v gi free() c th gi vPortFree().
C ba kiu cp pht b nh API m ngun ca FreeRTOS :
scheme1 heap1.c:
y l cch sp xp n gin nht. N khng cho php gii phng b nh khi
chng c phn phi nhng mc d vy n vn thch hp cho phn ln cc ng
dng. Thut ton n gin l chia cc mng n vo cc khi khi c cc yu cu v
RAM. Dung lng tng ca dy c t bng cch nh ngha
configTOTAL_HEAP_SIZE trong FreeRTOSconfig.h. S phn phi ny:
C th s dng trong cc ng dng khng bao gi xa task hoc hng i
Lun tin nh (lun mt cng mt khong thi gian tr v block)
c s dng trong PIC, AVR v 8051 v khng linh hot trong vic to ra
v xa task sau khi vTaskStartScheduler() c gi.
Mc Lng RAM s dng (bytes)
B lp lch 83 (c th gim khi s dng kiu d liu khc nh hn)
Mi task mi 20 (TCB trong c 2 byte cho tn) + vng cho ngn xp
Mi mc u tin 16
Mi hng i 45 + vng lu tr hng i
Mi semaphore 45

Bng 3: Bng phn phi RAM ca heap1

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 24


n tt nghip

heap 1 rt ph hp vi cc ng dng thi gian thc nh, ti cc task v cc


hng i c to ra trc khi kernel to ra.
scheme 2 heap 2:
S sp xp ny c coi l thut ton tt nht, khng ging 1, n cho php cc
khi nh trc c gii phng. N khng kt hp cc khi nh c gii phng lin
k nhau thnh mt khi ln hn. Ngoi ra tng lng RAM c t bng cch nh
ngha trong configTOTAL_HEAP_SIZE trong FreeRTOSconfig.h. S sp xp ny:
C th dng khi cc ng dng gi li nhiu ln vTaskCreate() /
vTaskDelete() ...
Khng nn s dng nu b nh phn phi v gii phng vi dung lng bt
k, c th trong trng hp n gin sau: cc task b xa c su stack
khc nhau, cc hng i b xa c di khc nhau.
C th xy ra vn phn mnh b nh khi cc ng dng to cc khi, task,
hng i khng theo trt t. C th s khng xy ra vi nhng ng dng gn
y nhng hy ghi nh ch .
Khng tin nh nhng n khng phi khng c nhng kh nng c bit.
C th s dng trong ARM7 v Flashlite v n linh ng trong vic to v
xa task.
heap_2.c thch hp cho ng dng thi gian thc to task mt cch linh ng.
Mc Lng RAM s dng (bytes)
B lp lch 216 (c th gim khi s dng kiu d liu khc nh hn)
Mi task mi 64 (TCB trong c 4 byte cho tn) + vng cho ngn xp
Mi hng i 76 + vng lu tr hng i

Bng 4: Bng phn phi RAM ca heap2


scheme 3 heap_3.c
y l chun cho malloc() v free(), lm cho chc nng ny l thread an ton:
Yu cu cc lin kt ci t heap v cc th vin dch gip malloc() v
free() thc hin
Khng tin nh
S gia tng dung lng kernel ln rt nhiu
S dng cho PC
b) Cch lp lch
Khi FreeRTOS lp lch theo kiu preemtive, n s s dng kiu lp lch u tin
k tha (Priority Inheritance), bo hiu qua mutex. u tin k tha tc l trong qu

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 25


n tt nghip

trnh chy n mt thi im no task c mc u tien thp hn nm gi ti nguyn


m task c mc u tin cao hn ang yu cu th task u tin thp hn s nhn mc u
tin ca task cao hn chy. Khi no task u tin thp gii phng ti nguyn m task
u tin cao cn th mc u tin tr li nh c.
Ta ly v d minh ha vi 4 tin trnh nh sau:
Tin trnh Mc u tin Chui ti nguyn Thi im bt u
P4 4 EEQVE 4
P3 3 EVVE 2
P2 2 EE 2
P1 1 EQQQE 0

Bng 5: Bng phn chi tit cc tin trnh


Trong :
E: n v khng cn ti nguyn
Q: n v thi gian cn ti nguyn Q
V: n v thi gian cn ti nguyn V
Ta s c s chy sau:

Hnh 10: S lp lch ca v d v u tin k tha


C th gii thch s nh sau:
thi im u tin P1 c chy do ch c mnh n yu cu
Khi P3 bt u th P2 cng bt u, nhng do P3 c mc u tin cao hn P1
v P2 nn n ginh li quyn chy t P1.
Tng t ti im tip theo P4 chy.
Khi P4 cn ti nguyn Q th P1 ang gi, P4 phi dng li, P1 k tha mc
u tin t P4 v P1 c chy.
n khi P1 gii phng ti nguyn Q th n tr v mc u tin 1.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 26


n tt nghip

Tip sau c tin trnh no mc u tin cao hn th c chy trc cho


n khi hon thnh.
5. So snh h FreeRTOS vi h iu hnh thi gian thc uCOS
Ta so snh hai h iu hnh ny trn cc c s sau:
Thi gian p ng sau khi gi ngt, chuyn ng cnh ga cc task.
Dung lng b nh chng trnh khi dch ra file hex np vo chip.
Lng RAM cung cp cho b lp lch, khi to task mi, to hng i mi,
to semaphore mi.
Trong ba yu t ny im coi trng nht l yu t p ng thi gian, sau l
lng RAM cn cung cp cho mi hot ng v cui cng l b nh chng trnh. Do
hai yu t v ti nguyn ta c th chn chip ph hp, cn yu t v thi gian l yu t
ph thuc vo bn cht ca h iu hnh. Khc vi b nh chng trnh, RAM c
cung cp hn ch v quy nh cho tng tc v con b nh chng trnh hu nh l tnh
v c cung cp khng ngt ngho nh RAM.
a) Dung lng b nh chng trnh
Dung lng b nh chng trnh cho mi li h iu hnh tu thuc vo tng
trnh dch khc nhau. Vi so snh ny ta da trn vi iu khin PIC18F452 v trnh
dch MPLAB C18.
Li ca FreeRTOS chim c 10 KBytes b nh chng trnh.
Li ca uCOS chim c KBytes b nh chng trnh.
b) Dung lng RAM cung cp
Vi dung lng RAM cung cp ta c bng sau:
Mc FreeRTOS (byte) uCOS (byte)
B lp lch 83
Mi task mi 20 (2 byte cho tn) + ngn xp
Mi mc u tin 16
Mi hng i 45 + vng lu tr hng i
Mi semaphore 45

Bng 6: So snh lng RAM cung cp gia FreeRTOS v uCOS


c) Thi gian p ng
Ta cn so snh hai kiu p ng thi gian chnh:
p ng thi gian khi mt task thc hin xong chu k ca mnh v cho task
khc chy. Cc cng vic chuyn i ny gm 3 bc trung gian
Thm task thc hin xong vo danh sch task ch.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 27


n tt nghip

B lp lch tm task tip theo thc hin


Chuyn i ng cnh

Hnh 11: Bng so snh thi gian p ng 1


p ng thi gian khi gi ngt trong lc mt task ang thc hin. Cng vic
ny gm 4 bc trung gian:
Thm task b ngt vo danh sch task ch
VECTOR phc v ngt, gm c vic lu tr ng cnh ca task ang chy.
Kt thc phc v ngt
Trong kt thc phc v ngt cn tm xem c ngt no c mc u tin cao
hn khng, nu c task c mc u tin cao hn th chuyn i ng cnh,
ngc li cn khi phc ng cnh.

Hnh 12: Bng so snh thi gian p ng 2

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 28


n tt nghip

II. Cc file trong kernel ca FreeRTOS


Trong phn tm hiu k v FreeRTOS ny ta tip cn theo tng file. Mi file
cng chnh l mt modun, tip cn tng file cng chnh l tip cn tng modun ca
FreeRTOS, t ta c th trnh by c th ln lt tng vn .

Hnh 13: S cc file v th mc trong gi FreeRTOS.zip ti v

1. Cc file chnh trong kernel


Trong kernel ca FreeRTOS c nm file chnh, tt c cc chng trnh port
buc phi c:
FreeRTOS.h: kim tra xem FreeRTOSconfig,h nh ngha cc ng dng
macro ph thuc vo tng chng trnh mt cch r rng hay cha.
task.h: to ra cc hm v cc macro lin quan n cc task, nh khi to,
xa, treo,
list.h: to ra cc hm v cc macro lin quan n vic to v xo danh sch
trng thi cc task nh cc danh sch ready, running, block, suppend,
waiting.
croutine.h: to ra cc hm v cc macro lin quan n task v queue nhng
ch yu dng cho coorporative.
portable.h: to tnh linh ng cho lp API. Vi mi chng trnh port cho
mi vi iu khin v mi trnh dch khc nhau u cn thay i file ny
ph hp cc API.
a) FreeRTOS.h
File ny nhm nh hng cho h iu hnh xem s dng cc chc nng nh
th no. Kim tra xem FreeRTOSconfig,h nh ngha cc ng dng macro ph

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 29


n tt nghip

thuc vo tng chng trnh mt cch r rng hay cha. Nu hm hoc macro no
mun s dng cn c t ln 1, ngc li t 0.
b) task.h
Gm nm phn:
Cc macro v cc nh ngha: khai bo mt s kiu s dng trong file, khai
bo cc macro nh tskIDLE_PRIORITY(), taskYIELD(), taskENTER_CRITICAL(),
v nh ngha mt s hng s s dng.
Cc task to API: c hai nhim v rt quan trng l to mi v xa task.
To ra task mi v thm n vo danh sch task sn sng chy l nhim v
ca xTaskCreate(), trong hm ny phi khai bo tn task, su stack s
dng cho task, mc u tin ca task, ngoi ra cn mt s nhim v khc.
Task b xo s c g b t tt c cc danh sch sn sng, kho, ngt v s
kin. Ch l idle task c nhim v v gii phng vng nh dnh cho
kernel khi task ca b xo. V th iu quan trng l idle task phi c thi
gian ca vi iu khin nu trong ng dng c gi n vTaskDelete().
Cc task iu khin API: to ra cc hm iu khin API c th l cc nhim v
nh sau:
To tr: vTaskDelay() v vTaskDelayUntil(). vTaskDelay() dng to tr
trong mt khong thi gian nht nh, cn vTaskDelayUntil() to tr n
mt thi im nht nh.
Mc u tin: xTaskPriorityGet() v vTaskPrioritySet(). Hai hm lm nhim
v ginh li mc u tin v t mc u tin cho task.
Thay i trng thi task nh treo, khi phuc. vTaskSuspend() nhm treo
bt k task no. vTaskResume() c gi sau khi task b treo mun quay v
trng thi sn sng. Mun gi hm vTaskResume() t ngt th s dng
xTaskResumeFromISR(). Ngoi ra hai hm vTaskSuspendAll() v
vTaskResumeAll() cng tng t nhng n thc hin vi tt c cc task tr
ngt.
Lp lch: vTaskStartScheduler() v vTaskEndScheduler() l cc hm thc
hin vic bt u v kt thc vic lp lch. Ch l khi bt u vic lp lch
th Idle task t ng c to ra. Sau khi gi vTaskEndScheduler() m gi
li vTaskStartScheduler() th s phc hi t thi im .
Cc task tin ch
xTaskGetTicksCount: tr li gi tr ticks m c t khi
vTaskStartScheduler b hy b.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 30


n tt nghip

uxTaskGetNumberOfTasks(void): tr li s lng cc task m kernel ang


qun l. Hm ny cn bao gm c cc task sn sng, b kha hoc b treo.
Task b delete m cha c gii phng bi idle cng c tnh vo.
vTaskList(): hm ny s khng cho php ngt trong khong thi gian n lm
vic. N khng to ra chy cc ng dng bnh thng nhng gip cho
vic debug.
vTaskStartTrace(): nh du vic bt u hot ng ca kernel. Vic nh
du chia ra nhn ra task no ang chy vo lc no. nh du file c
lu tr dng nh phn. S dng nhng tin ch c lp ca DOS th gi
convtrce.exe chuyn chng sang kiu text file dng m c th c xem
v c v.

Hnh 14: V d v nh du hot ng ca kernel

ulTaskEndTrace(): Dng nh du kernel hot ng, tr li s byte m


vit vo b m nh du.
Lp lch ni b cho mc ch port
vTaskIncrementTick(): khng s dng code cho cc ng dng. Gi t
kernel tick, tng b m tick v kim tra xem c phi thi im cn chuyn
trng thi ca task hay khng, v d task ang b kha n thi im khi
phc s c loi b khi danh sch b kha v thay vo l danh sch sn
sng.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 31


n tt nghip

vTaskPlaceOnEventList(): khng s dng code cho cc ng dng. Hm


ny c gi khi khng cho php ngt. Loi b tt c cc task ang gi t
danh sch sn sng v thay vo l thm vo danh sch task ch s kin
v danh sch ca task tr. Task s c gii phng tr li khi s kin xy ra
hoc ht thi gian tr.
xTaskRemoveFromEventList(): khng s dng code cho cc ng dng.
Hm ny c gi khi khng cho php ngt. Loi b task t c list s kin
v list cc task b kha thay vo l hng i sn sng.
vTaskCleanUpResources(): khng s dng code cho cc ng dng. Xa
hng i sn sng v tr ca khi iu khin task, gii phng b nh cp
pht cho khi iu khin task v cc ngn xp task.
xTaskGetCurrentTaskHandle(): tr li knh iu khin cho task ang gi.
vTaskSetTimeOutState(): gi li nhng trng thi hin thi tham chiu
sau ny.
xTaskCheckForTimeOut(): kim tra xem c time out hay khng.
vTaskMissedYield(): s dng ngn cn nhng li gi hm taskYield()
khng cn thit.
vTaskPriorityInherit: nng mc u tin ca mutex holder ln n task ang
gi nu mutex holder c mc u tin thp hn task ang gi.
vTaskPriorityDisinherit: t mc u tin cho task tr li ng nh mc u
tin ca n trong trng hp m n k tha mc u tin cao hn trong khi
n ang gi semaphore.
c) list.h
Trong file list.h, FreeRTOS nh ngha cc cu trc, cc macro v cc hm phc
v cho cc tin ch v danh sch. Chc nng ca file l to mi, thm, bt cc tc v
vo danh sch cc task ang chy (running), sn sng (ready), kho (block), treo
(suppend). Cc chc nng ny c th l:
Khi to danh sch
Khi to cc phn t trong danh sch.
t i tng s hu cc phn t ca danh sch.
t gi tr ca phn t danh sch. Trong hu ht trng hp gi tr c
dng sp xp danh sch theo mt th t nht nh no .
ly gi tr ca phn t danh sch. Gi tr ny c th biu th bt c ci g,
v d nh mc u tin ca tc v hoc thi gian m task c th b kho.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 32


n tt nghip

Xc nh xem danh sch cn cha phn t no khng, ch c gi tr true nu


danh sch rng.
Kim tra s phn t trong danh sch.
Xc nh phn t tip theo ca danh sch.
Tm chng trnh ch ca phn t u tin trong danh sch.
Kim tra xem phn t c nm trong danh sch khng.
Thm phn t vo danh sch.
Loi b phn t t danh sch.
d) croutine.h
To ra cc hm v cc macro lin quan n task v queue nhng ch yu dng
cho coorporative. Cc chc nng ca file nh sau:
n nhng thc thi ca khi iu khin co-routine.
To mi cc co-routine v thm vo danh sch cc co-routine sn sng.
Lp lch cho co-routine, cho php co-routine c mc u tin cao nht c
chy. Co-routine ny s chy n khi n b kha, phi nhng hoc b ngt
bi tc v. Co-routine chy trong cooperatively th mt co-routine khng b
ngt bi cc co-routine khc nhng c th b ngt bi task. Nu ng dng
bao gm c task v co-routine th vCoRoutineScheduler c th c gi t
idle task ( trong idle task hook).
Cc co-routine phi c bt u vi nhng li gi macro crSTART().
Cc co-routine phi c kt thc vi nhng li gi macro crEND().
To tr cho cc co-routine trong khong thi gian c nh.
Cc macro crQUEUE_SEND(), crQUEUE_RECEIVE() l cc co-routine
tng ng vi cc hm xQueueSend() v xQueueReceive() ch c s
dng trong cc task.
Macro crQUEUE_SEND_FROM_ISR() v crQUEUE_RECEIVE_
FROM_ISR() l co-routine tng ng vi xQueueSendFromISR() v
xQueueReceiveFromISR() c s dng bi task.
vCoRoutineAddToDelayedList: ch c s dng co-routine macro. Cc
macro nguyn thy ca thc thi co-routie i hi c nhng nguyn mu
y. Hm ny loi b co-routine hin thi t list sn sng v t chng vo
list tr thch hp.
e) portable.h
y c th coi l file header ca port.c, cc hm ny s c tm hiu k hn
trong phn port.c. Bn cnh file lm mt s nhim v quan trng nhm to project:

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 33


n tt nghip

Khai bo ng dn vo file portmacro.h cho tng project ring bit cho


ph hp vi vi iu khin v chng trnh dch.
Vi mt s vi iu khin file my con include thm mt s file cn thit
to project. V d nh to project cho PC ngoi to ng dn n
portmacro.h cn phi include thm file frconfig.h.
Ngoi ra cn t ra cc chng trnh con qun l b nh yu cu cho port
2. Cc file cn li trongkernel ca FreeRTOS
Cc file cn li trong kernel l ba file:
project.h: nh ngha cc kiu ban u m cc hm thc hin phi ph hp.
queue.h: to cc hm nhm s dng hng i.
semphr.h: to cc hm nhm s dng semaphore
a) projdef.h
Nhim v ca file ch l nh ngha cc hng s m cc hm nn theo m s
dng. Nu khng s dng th hon ton c th b file ny i nhng ch rng phi
sa li ht cc hng s trong cc file dng sn do ngi vit m ngun FreeRTOS lun
tun th chun ny. Ngoi ra trong file nh ngha cc li.
b) queue.h
Nh tn gi ca file, tt c cc hm v macro c khai bo trong file nhm
phc v cho vic s dng hng i cho thun tin. Cc chc nng c th:
To hng i mi.
xQueueSendToToFront(): Gi phn t vo u hng i.
xQueueSendToToBack(): Gi phn t vo sau hng i.
xQueueGernericSend(): Gi phn t vo hng i.
xQueuePeek(): Ly phn t ra khi hng i m khng loi b n khi hng
i. Phn t c gi t hng i bng cch copy ra mt b m nn phi
cung cp cho b m dung lng . S lng byte c copy vo b m
phi c khai bo t khi to hng i.
xQueueReceive(): Nhn phn t t hng i. Phn t c gi t hng i
bng cch copy ra b m nn phi cung cp cho b m dung lng .
Lng byte c copy vo b m phi c khai bo t khi to hng i.
Tng t cc hm trn nhng vi hng i trong phm vi phc v ngt c
cc hm: xQueueSendToFrontFromISR(), xQueueSendToBackFromISR(),
xQueueGenericSendFromISR(), xQueueReceiveFromISR().
Tm s message lu tr trong hng i.
Xa hng i, gii phng b nh phn phi cho hng i.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 34


n tt nghip

c) semphr.h
Tt c cc hm v macro c khai bo trong file nhm phc v cho vic s
dng semaphore cho thun tin. Cc chc nng c th:
To ra semaphore nh phn, l kiu u tin c s dng trong ng b
gia cc tc v hoc gia tc v v ngtThis type of semaphore can be used
for pure synchronisation between tasks or between an interrupt and a task.
Kiu semaphore ny ch l nh phn nn nu mt task ang c sn xut
trong khi task khc c tiu th th s khng tha mn. Do kiu ny khng
c s dng cho thut ton u tin k tha m s
xSemaphoreCreateMutex().
Ly semaphore qua hm xSemaphoreTake(), s dng xQueueReceive().
Tr semaphore qua hm xSemaphoreGive(), s dng xQueueGenericSend().
Tng t c semaphore phc v ngt xSemaphoreGiveFromISR( ), s dng
hm xQueueGenericSendFromISR( ).
To mutex qua xSemaphoreCreateMutex(), s dng xQueueCreateMutex().
III. Port FreeRTOS ln vi iu khin PIC18F452
1. Mt s ch khi port FreeRTOS ln vi iu khin Commented [PNH2]: Xem li phn ny

a) Qun l v s dng RAM [1]


Hng i s dng nhiu RAM? do qun l s kin c xy dng thnh chc
nng hng i. C ngha l cu trc d liu hng i bao gm ton b RAM m nhng
h thng thi gian thc khc thng phn phi tch bit. y khng c khi nim v
khi iu khin s kin trong FreeRTOS.
FreeRTOS s dng bao nhiu ROM? ph thuc vo trnh bin dch v kin trc
tng chng trnh. Ring kernel s s dng khong 4KBytes ROM khi s dng cng
mt cu hnh trng thi.
gim lng RAM s dng ta lm nh sau:
t configMAX_PRIORITIES v configMINIMAL_STACK_SIZE (nm
trong portmacro.h) n gi tr nh nht chp nhn c trong ng dng.
Nu c h tr bi trnh dch nh ngha tc v chc nng v main()
bng naked. N ngn khng cho trnh dch nh nhng thanh ghi vo ngn
xp khi chng trnh chy. V chng trnh khng bao gi kt thc, cc
thanh ghi s khng bao gi c phc hi v khng b yu cu.
Ly li ngn xp c s dng bi main(). Ngn xp s dng trn lc
chng trnh bt u khng c yu cu ln no khi b lch trnh khi
ng ( tr khi ng dng c gi vTaskEndScheduler() m ch c h tr

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 35


n tt nghip

trc tip trong s sp xp cho PC v Flashlite port). Mi tc v u c ngn


xp cp pht ring nhng ngn xp phn phi cho main() tn ti s dng
mt ln khi b lch trnh bt u.
Gim ngn xp s dng bi main() xung mc nh nht. Idle task t ng
c to ra khi task ng dng u tin c to ra. Ngn xp s dng cho
chng trnh khi bt u (trc khi b lch trnh bt u) phi ln cho
lnh gi lng n xTaskCreate(). To idle task th cng c th ch cn mt
na ngn xp yu cu. To idle task bng tay nh sau:
1. Xc nh v tr chc nng prvInitialiseTaskList() trong Source/task.c.
2. Idle task c to ra di cng ca chc nng gi bi
xTaskCreate(). Ct dng ny v paste li vo main()
S task a ra u c ngha. Idle task khng cn thit nu:
1. ng dng c task khng bao gi b kha
2. ng dng khng bao gi gi vTaskDelete()
Gim dung lng d liu bng cch nh ngha portBASE_TYPE (iu ny
c th tng thi gian thc hin)
C nhng ngt khng quan trng khc c th c thc hin (v d nh
hng i mc u tin tc v khng ph thuc vo qun l s kin), nhng
nu gim cp xung th s cn nhiu RAM hn!
Mi task c phn phi RAM nh th no? to task th kernel c 2 lnh gi
n pvPortMalloc(). Th nht ch nh khi iu khin task, th hai l ch nh
ngn xp task.
Mi hng i c phn phi RAM nh th no? to hng i, kernel c
hai lnh gi n pvPortMalloc(). Th nht ch nh cu trc hng i, th hai l
vng ct gi ca hng i (dung lng ca n l thng s n xQueueCreate()).
Ngn xp nn ln bao nhiu? iu ny hon ton ph thuc vo ng dng c
th v khng d tnh c. N ph thuc vo su ca php gi chng trnh, s
bin cc b, s thng s trong chng trnh gi, yu cu ca ngn xp ngt... Ngn
xp phi ln cha ng cnh thc hin (tt c thanh ghi qu trnh). Ngn xp ca
mi task c phn b 0xa5 bytes trong lc to m cho php mc cao nht c th thy
c s dng ph hp vi cng c debug.
b) Tick v Idle Hooks
C th thm code vo RTOS idle task? Idle task c thc hin trong
Source/task.c (tm prvIdleTask). Ta c th thm nhng g cn vo, code thm vo s
khng lm idle task b kha.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 36


n tt nghip

C th thm code t vi iu khin vo trng thi power save? Cch thun


tin nht hon tt l s dng idle task hook.
C th s dng idle task hook bng cch t configUSE_IDLE_HOOK ln 1
trong FreeRTOSconfig.h.
C th s dng tick hoc context switch hook bng cch t
configUSE_TICK_HOOK ln 1 trong FreeRTOSconfig.h.
c) B lp lch
Lm th no vi cc task c mc u tin ngang nhau trong b lp lch? u tin
quay vng. Mi tc v s c chia s thi gian bng nhau trong b x l.
Cc task m chia s idle priority scheduled? Nh cc task chia s bt k mc
u tin khc. Nn t n ch hn v khi preemptive scheduler c s dng, idle
task s chy trong time slot ca n, khng thay i g nu cc task khc chia s mc
u tin ca chng.
d) Cc thanh ghi phc v ngt (ISRs)
Chuyn i ng cnh c th c thc hin trong ISR: mi port cha ngt n
gin drive cng ni tip m c s dng nh mt v d cho kin trc vi iu khin.
Tc l cc drive c vit vi mc ch kim tra chuyn i ng cnh t ISR
nhng khng c tc ti u
Cc ngt c th gi lng nhau c khng? Nhng port ti xung khng thc
hin gi lng cc ngt. Trong hu ht trng hp s dng ca kernel thi gian thc
nhanh g b vic gi ngt lng. Nhng ngt lng cho thy s khng chc chn trong
nhu cu s dng ngn xp v phc tp trong vic phn tch hnh vi ca h thng. Thay
vo , ngi ta thch cc knh iu khin ngt (interrupt handlers) khng lm g c
nhng thu thp d liu s kin, a d liu cho cc task v xa ngun ngt. iu ny
cho php cc ngt c th thot c nhanh chng cc tr hon bt ng trong qu trnh
tnh ton d liu s kin. Task level c th c thc hin bng cch cho php ngt,
khng cho ngt lng.
S phi hp ny c thm nhng thun li v s mm do trong vic x l u
tin ha cc s kin. Mc u tin cc tc v c s dng thay cho s u tin ph
thuc vo mc u tin n nh cho mi ngun ngt bi mc tiu x l. Quyn u tin
ca cc tc v nm bt ngt c th c chn cao hn mc thng thng trong phm
vi cng mt ng dng, cho php vic nm bt ngt quay li trc tip t tc v nm bt
ngoi vi. Ngt c th ngt cc tc v bnh thng, nhn d liu, sau quay v tc v
nm bt ngt. Khi tc v nm bt ngt hon thnh, cc tc v trc ngt t ng thc
hin tip t im b ngt. Qu trnh x l ngt t n v tc v nm bt ngt lin nhau

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 37


n tt nghip

theo thi gian nh l cc x l t c thc hin trong ngt nhng s dng nhiu c
cu n gin hn. Trong trng hp tr li ngt rt nhanh c yu cu cho ch xc
thit b ngoi vi th mc u tin ngoi vi c th c nng ln. iu ny c ngha l x
l ca thit b ngoi vi s khng b tr bi hot ng ca kernel.
2. Cc file cn port ln vi iu khin PIC18 s dng MPLAB
Khi port cho PIC cn 3 file chnh nh sau:
FreeRTOSconfig.h: file ny nh ngha ring cho tng ng dng. Cc nh
ngha ny phi c ph hp vi phn cng
port.c: y l file quan trng nht trong vic to ra cc hm nh ngha trong
portable.h cho vic port ln vi iu khin.
portmacro.h: nh ngha cho ring phn port. Cc nh ngha ny cu hnh
cho FreeRTOS ng vi tng phn cng v tng trnh dch
a) FreeRTOSconfig.h
File c to ra vi hai nhim v chnh:
nh ngha cc thng s, cc chc nng c bn m FreeRTOS h tr c
nh yu cu trong FreeRTOS.h. Cc hm, macro ny nu mun khai bo c
s dng th nh ngha l , ngc li l 0. xem thm cc thng s cn
khai bo cho phn ny xem FreeRTOS.h <PhnII.I.a>
Cc thng s cn nh ngha cho tng vi iu khin v tng project c th:
o configCPU_CLOCK_HZ: khai bo tn s lm vic ca vi iu khin
theo n v Hz.
o configTICK_RATE_HZ: khai bo tn s tick mun s dng, n v Hz.
o configMAX_PRIORITIES: gii hn mc u tin cao nht c h tr
lp lch.
o configMINIMAL_STACK_SIZE: gii hn su nh nht ca ngn xp
c dng cho mi task.
o configTOTAL_HEAP_SIZE: gii hn tng lng RAM trong heap
cp pht cho tng nhim v.
o configMAX_TASK_NAME_LEN: gii hn di ca tn cc tc v, n
v tnh bng byte.
b) port.c
y l file quan trng nht trong vic to ra cc hm nh ngha trong
portable.h cho vic port ln PIC. Cc nhim v chnh c th nh sau:
Khai bo ci t phn cng cho tick.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 38


n tt nghip

Khi to trng thi cho php ngt cho cc task c to mi. Gi tr ny


c copy vo INTCON khi chuyn task trong ln u tin.
nh ngha ny ch cho cc bit nm trong INTCON, ngt ton cc.
Khai bo hng s c s dng cho vic chuyn ng cnh khi yu cu ngt
chuyn t trng thi cho php ngt sang trng thi khng thay i khi task
va b ngt khi phc li.
Mt s vng nh cn c lu li nh mt phn ca ng cnh tc v.
Nhng vng nh ny c s dng bi trnh dch cho vic lu gi trung
gian, c bit l khi thc hin cc php tnh ton hc hoc khi s dng d
lu 32 bit. Hng s ny nh ngha ln vng nh phi lu.
Ci t phn cng cho php tick. V c thm chng trnh phc v ngt
duy tr tick v thc hin chuyn i ng cnh tick nu s dng kiu
preemptive.

Hnh 15: S chuyn i ng cnh

Phn quan trng cng l kh nht trong file l lu v khi phc ng cnh
trong mi ln chuyn i ng cnh. l hai macro portSAVE_CONTEXT()
v portRESTORE_CONTEXT(). Cc thao tc nh trong hnh di y. Ti
(1), b lp lch ti con tr tr ti TCB ca task mi v. Sau , ti (2), thanh

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 39


n tt nghip

ghi PC c ct vo ngn xp. Tip n ti (3) v (4), chng trnh ct cc


thanh ghi quan trng lin quan v ngn xp cng ca chip, cng vi ti
bc (5), ta lu s lng ngn xp cng va c lu. Bc cui cng l
ct nh ca ngn xp va lu vo TCB ca task va b ngt. Ngoi ra, trnh
dch thng s dng mt s vng pha di b nh dng lm lu tr trung
gian cho cc tnh ton. iu ny thc s ng khi kiu d liu 32bit c s
dng. Cc on .tmpdata v MATH_DATA phi c lu tr nh mt phn
ca ng cnh. Macro ny s lu tr t a ch 0x00 n
portCOMPLIER_MANAGED_MEMORY_SIZE. Vi hm khi phc ng
cnh ta thao tc gn nh ngc li vi lu tr. Nhng ht sc ch rng cc
lu tr ny ng vi hu ht cc ng dng nhng khng phi hon ton.
Cn phi kim tra li vi tng ng dng c th.
Ci t ngn xp cho task mi n sn sng hot ng khi b lp lch iu
khin. Cc thanh ghi phi c gi vo ngn xp theo th t port c th
tm c chng.
Ci t phn cng sn sng cho b lp lch iu khin. Nhn chung l ci t
cho ngt tick v ci t timer cho tn s ng ca tick.
Dng b lp lch tc l hy ton b ci t cho phn cng/ISR c thc
hin bi xPortStartScheduler() v th phn cng c tr li cc iu kin
u tin sau khi b lp lch dng hot ng. Hm ny khng th xy ra trong
b lp lch cho port PIC do khng th dng sau 1 ln chy.
prvLowInterrupt(): chng trnh phc v ngt thay th cho vector mc u
tin thp. N gi nhng chng trnh phc v ngt thch hp cho cc ngt
thc t. C th gii thch hnh v nh sau : khi task c mc u tin thp
ang chy, c tn hiu bo ngt. Khi bt u b ngt th task s c thm
vo danh sch ch. Sau gi hm phc v ngt, ring vi bc ny, task
b ngt s c lu ng cnh ri mi phc v ngt. Khi kt thc ngt, b lp
lch s tm task tip theo chy. Nu khng c task no c mc u tin cao
hn th khi phc task tip tc chy. Ngc li, s chuyn i cho task c
mc u tin cao hn chy (xem hnh 11).
Chuyn ng cnh th cng. Hm ny ging nh chuyn i ng cnh tick
nhng khng tng bin m tick. N phi ng nh chuyn i ng cnh
tick trong vic lu tr vo ngn xp ca task nh th no.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 40


n tt nghip

c) portmacro.h
File ny nh ngha cho ring phn port. Cc nh ngha ny cu hnh cho
FreeRTOS ng vi tng phn cng v tng trnh dch. Cc ci t ny khng c
thay i. Cc nhim v ca file nh sau:
nh ngha cc kiu s liu c bn s dng trong FreeRTOS, nh: char
(portCHAR), float (portFLOAT), int (portSHORT), ...
Kim tra xem nu s dng USE_16_BIT_TICKS th t cho thi gian cc
i delay l 0xFFFF, ngc li delay s ln hn 0xFFFFFFFF.
Ngoi ra phn rt quan trng l khai bo v tr thanh ghi ngt ton cc, hm
cho php v khng cho php ngt. V d nh i vi PIC18F452 cn khai
bo v tr thanh ghi ngt ton cc l 0x80, bit cho php ngt ton cc hay
khng l INTCONbits.GIEH.
To hm ENTER_CRITICAL() v EXIT_CRITICAL(). Khi bt u on bt
ly cn ct thanh ghi ngt vo ngn xp sau khng cho php ngt ton cc.
Ngc li, khi ra khi on bt ly cn khi phc thanh ghi ngt t ngn xp
v cho php ngt nu trc khi ngt c cho php. Khng c thay i bt
k bit no khc trong thanh ghi iu khin ngt.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 41


n tt nghip

Phn III: M phng v giao din h tr port


FreeRTOS ln PIC
I. M phng port FreeRTOS ln vi iu khin PIC
1. Phn tch bi ton m phng
a) tng v mc tiu ca bi ton m phng
Bi ton cn t ra y l m phng cho h iu hnh thi gian thc nn cc
yu cu t ra cho bi ton phi gn lin vi cc c im ca h iu hnh thi gian
thc. T ta phi t ra cc mc tiu trong phn m phng ny:
Lm ni bt ngha ca vic c h iu hnh thi gian thc, tc l trong
mt h thng ti nguyn hn ch, tranh chp gia cc tc v thng xuyn
xy ra. Nh vy tng bi ton c thit k l vi cng mt s tc v
nh nhau nu tng yu cu p ng v thi gian ca mt s tc v ln th h
thng s li khng tha mn c yu cu t ra.
Bi ton m phng c hu ht cc dng tc v ca h iu hnh thi gian
thc. Cc dng tc v cn m phng nh: tc v s kin, tc v theo chu k,
tc v truyn thng,
Ni bt vic thm, bt tc v vo h mt cch d dng.
b) Bi ton m phng
T nhng tng v mc tiu m phng trn. Ta t ra bi ton vi 5 tc v:
Tc v 1: Reset Watdog Timer. Tc v ny s khng cn thit trong chng
trnh ta disable Watdog Timer ngay t u nhng s dng Watdog vi 2
mc ch. Th nht y l m phng cho h iu hnh thi gian thc nn
chc nng bt li v chy n nh l kh quan trng, vi Watdog Timer h
thng c th thot ra khi trng thi dead lock, khi phc trng thi ban u.
Th hai, khi ta s dng reset Watdog l tc v mc u tin thp nht, nu
h iu hnh thi gian thc khng m bo chy ng cho cc tc v th tc
v ny s b nh hng u tin. Nu Watdog b reset ta s thy ngay c
kt qu m phng.
Tc v 2: Nhn chia lin tc bn s 32 bit v so snh vi kt qu ng. Tc
v ny c a ra do vi vi iu khin PIC18 lm cc thao tc tnh ton
trn s 32 bit mt rt nhiu thi gian ca b x l ton hc. Khi m phng ta
s thay i chu k lm vic ca tc v. Vi chu k di th h iu hnh thi
gian thc cn m trch c, cn khi gim chu k thc hin xung thp s

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 42


n tt nghip

thy ngay li ca h iu hnh khng lp lch cho cc tc v hon thnh


cng vic.
Tc v 3: Nhy LED theo chu k. Tc v ny c t ra nhm m phng
tc v theo chu k v kim tra kt qu ca tc v hai. C th tc v b tr
nh sau, c bn LED c ni vi bn chn vi iu khin, mc u tin ca
tc v 2 stng ng vi n my sang. Nu tc v 2 chy vi kt qu
ng th LED s nhy theo 1 chu k nht nh, cn tc v 2 chy sai th s
theo mt chu k khc nhanh hn hn chu k c.
Tc v 4: Nhy LED theo s kin, tc l c mt cng tc ngoi ni vo
mt chn ca vi iu khin, nu c ng mch th LED s nhy, cn
khng c ng mch th LED s sng.
Tc v 5: truyn thng qua cng USART, nhm m phng tc v truyn
thng trong FreeRTOS.
2. Trin khai bi ton v kt qu m phng
a) Trin khai bi ton
Do FreeRTOS l h iu hnh thi gian thc m ngun m nn ta xc nh cc
cng c i n chng trnh cng nn s dng cc bn min ph. c giao din
lp trnh ta s dng MPLAB IDE 8.0 [9] l bn IDE min ph ca hng Microchip [8],
cng vi ta s dng trnh dch l C18 Student [9] cng l bn min ph.
Vi bi ton t ra trn ta t ra cc yu cu cn gii quyt cho h iu hnh
thi gian thc nh sau:
STT Tn tc v Mc u tin Chu k hot ng su ngn xp
1 Reset Watdog Timer Idle 20ms 105 byte
2 Tnh ton cc s 32 bit Idle + 3 100ms (bi 1) 105 byte
1ms (bi 2)
3 Nhy LED theo task 2 Idle + 1 1000ms nu ng 105 byte
100ms nu sai
4 Nhy LED khi bm nt Idle + 2 200ms 105 byte
5 Truyn thng USART Idle + 1 200ms 105 byte

Bng 7: M t chi tit v cc task m phng


Cc thng s c t l hon ton m phng, ty tng ng dng c th ta
s tnh ton cc thng s cho ph hp. m phng c kh nng ca h iu hnh
thi gian thc ta s thay i chu k hot ng ca task 2.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 43


n tt nghip

Sau khi s dng cc phn mm min ph ca Microchip c c file *.hex,


ta s dng phn mm Proteus 7.0 m phng kt qu. Ta s m phng hai ln bng
cch thay i chu k hot ng ca task 2.
b) Kt qu m phng
Vi cc phn mm c s dng nh trn, bi ton c gii quyt ng yu
cu ra. Hai ln m phng xem p ng ca h iu hnh thi gian thc
FreeRTOS u ng nh tin liu ra. Hnh m phng trn Proteus nh sau:

Hnh 16: M phng trn Proteus

II. Giao din h tr port FreeRTOS ln PIC


1. tng, mc ch v nhim v ca giao din h tr

2. Trnh by c th v cc bc ci t v chy th

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 44


n tt nghip

Kt lun

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 45


n tt nghip

Ti liu tham kho


[1] Richard Barry, FreeRTOS.org Copyright (C) 2003-2007, www.freertos.org

[2] Andrews S. Tanenbaum, Modern Operating Systems, second edition, Prentice


Hall PTR.

[3] A. Burn & A.Wellings, Real Time Systems and Programing language, Addison
Wesley, 1997.

[4] G.Olsson, Computer System for Automation and Control, G.Piani Prentice
Hall, 1996.

[5] John A. Stankovic, Strategic Directions in Real-Time and Embedded Systems


ACM Computing Surveys, Vol. 28, No. 4, December 1996.

[6] Jason McDonald, senior edition, Selecting an embedded RTOS, eg3.com.

[7] Real-time and Embedded Systems forum: www.opengroup.org/rtforum/

[8] Microchip, 2001, PIC18FXX2 Data Sheet,

www.microchip.com/download/lit/pline/picmicro/families/18fxx2/39564b.pdf

[9] Microchip, 2000, MPLAB-CXX Compiler User's Guide,

www.microchip.com/download/tools/picmicro/code/mplab17/51217b.pdf

[10] Jean J. Labrosse, C/OS-II for the Philips XA,

www.ucos-ii.com/contents/support/downloads/an1000.pdf

[11] www.en.wikipedia.org/wiki/

[12] www.lynuxworks.com/rtos/rtos.php

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 46


n tt nghip

Ph lc
I. Gii thch r cc file trong FreeRTOS
1. Cc k hiu vit tt trong cc hm v bin
Cc k hiu bin:
Bin thuc kiu char c phn u ca tn l: c
Bin thuc kiu short c phn u ca tn l: s
Bin thuc kiu long c phn u ca tn l: l
Bin thuc kiu float c phn u ca tn l: f
Bin thuc kiu double c phn u ca tn l: d
Bin m c phn u ca tn l: e
Cc kiu khc (v d nh kiu cu trc) c phn u ca tn l: x
Bin con tr c phn u ca tn l p, v d con tr tr ti kiu short c
phn u ca tn l ps
Bin khng du c phn u ca tn l u, v d bin khng du kiu short c
phn u ca tn l us
Cc k hiu hm:
Hm private c phn u ca tn l: prv
Hm API c phn u ca tn l kiu m n tr li, nh quy c ca bin.
Tn hm c bt u vi tn file m n c nh ngha, v d
xTaskcreate() c nh ngha trong file task.
2. Cc file chnh cn c trong li FreeRTOS
a) FreeRTOS.h
Cc thng s cn kim tra xem khai bo trong FreeRTOSconfig.h hay cha:
configUSE_PREEMTION: xc nh c s dng PREEMTION hay khng
(trong PIC ta c s dng PREEMTION nn c nh ngha bng 1)
configUSE_IDLE_HOOK: xc nh c s dng IDLE HOOK hay khng
configUSE_TICK_HOOK: xc nh c s dng TICK HOOK hay khng
configUSE_CO_ROUTINE: xc nh c s dng CO-ROUTINE hay khng
vTaskPrioritySet: t mc u tin cho cc task
uxTaskPriorityGet: gi mc u tin cho cc task.
vTaskDelete: xa cc task (trong PIC khng s dng hm ny)
vTaskCleanUpResources: xa ngun cc task
vTaskSuspend: treo task, khi b treo th task khng c x l bt k mc
u tin ca n th no

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 47


n tt nghip

vTaskDelayUntil: to tr n mt thi im no
vTaskDelay: to tr task trong khong tick c a ra. Thi gian thc hin
cn li ca task ph thuc vo nhp tick.
configUSE_16_BIT_TICKS: c dng xc nh c s dng 16 bit tick
hay khng
configUSE_MUTEXES: c s dng nh ngha c s dng mutexes
hay khng, khi s dng mutex ta cn s dng phng php mc u tin k
tha nn ta phi nh ngha xTaskGetCurrentTaskHandle bng 1.
b) task.h
Cc macro v cc nh ngha
xTaskHandle kiu m cc task c tham chiu. Chng hn, khi gi
xTaskCreate tr li (qua mt tham s con tr) mt bin xTaskHandle l c
th sau s dng nh mt tham s ti vTaskDelete xa task.
tskIDLE_PRIORITY: nh ngha mc u tin ca idle task, mc u tin ny
khng th thay i.
taskYIELD(): macro cho vic bt buc chuyn ng cnh
taskENTER_CRITICAL(): macro nh du on m khng th phn chia
(critical). Khng th thc hin chuyn i ng cnh preemptive trong mt
on critical. Ch rng iu ny c th lm thay i ngn xp (ph thuc
vo vic thi hnh portable) v th phi rt cn thn. Tng t nh th cng
tn ti macro nh du kt thc on critical: taskEXIT_CRITICAL().
taskDISABLE_INTERRUPTS(): macro v hiu cc ngt che c. Tng t
cng c macro cho php cc ngt: taskENABLE_INTERRUPTS()
Ngoi ra cn c cc nh ngha tr li cho xTaskGetSchedulerState():
o taskSCHEDULER_NOT_START: 0
o taskSCHEDULER_RUNNING: 1
o taskSCHEDULER_SUPPEND: 2
Cc task to API
xTaskCreate: To ra task mi v thm n vo danh sch cc task sn
sng chy.
o pvTaskCode tr n task vo cc chc nng. Cc task phi thi hnh m
khng bao gi c gi tr li.
o pcName biu th tn cho task. iu ny chnh l g ri mt cch d
dng. di ln nht c nh ngha trong
taskMAX_TASK_NAME_LEN, c mc nh l 16.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 48


n tt nghip

o usStackDepth: dung lng ca ngn xp task c trng cho s bin m


stack c th gi c (khng phi l s byte). Chng hn, nu ngn xp
c rng 16 bit v usStackDepth c nh ngha th 100, 200 byte s
c phn phi cho d tr ca ngn xp.
o pvParameter s c s dng nh thng s cho task c to ra.
o uxPriority: mc u tin m ti task nn chy
o pvCreatedTask s dng chuyn li cc im c th li dng c m
n tham chiu vo task to ra.
o pdPASS: nu task c to thnh cng c thm vo danh sch sn sng,
trng hp c li code s c nh ngha trong file errors.h
vTaskDelete phi c nh ngha l 1 nu mun s dng. Di cc task t
qun l ca li thi gian thc. Task b xo s c g b t tt c cc danh
sch sn sng, kho, ngt v s kin. Ch l idle task c nhim v v gii
phng vng nh dnh cho kernel khi task ca b xo. V th iu quan
trng l idle task phi c thi gian ca vi iu khin nu trong ng dng c
gi n vTaskDelete(). B nh c phn phi bi code task khng t ng
c gii phng, v nn gii phng trc khi xo task.
o pxTask dng cho xo task.
Cc task iu khin API
vTaskDelay: To tr cho task trong mt s nhp tick cho trc.thi gian thc
m task b kha ph thuc vo nhp tick. Hng s portTICK_RATE_MS c
th c s dng tnh thi gian thc t nhp tick vi thi gianca 1 tick.
.vTaskDelay phi c nh ngha l 1 nu mun s dng. xTicksToDelay :
Lng thi gian, trong tng k tick, m vic gi task s phi kha.
vTaskDelayUntil: phi c nh ngha l 1 nu mun s dng. To tr task
cho n mt thi gian c ch r. Chc nng ny c th c s dng bi
nhng chu k task bo m mt tn s thc hin khng i. Chc nng
ny khng cng mt kha cnh quan trng vi vTaskDelay: vTaskDelay ()
s kha task trong khong tick nht nh t khong thi gian vTaskDelay
c gi. Bi vy kh s dng vTaskDelay () bi chnh n sinh ra tn s
thc hin c nh v thi gian gia lc task bt u thc hin n khi task
gi vTaskDelay() c th khng c nh (task c th i qua nhng ng dn
khc nhau qua nhng lnh gi, hoc c nhng ngt hoc o u tin hot
ng). Nh vy s mt nhng khong thi gian khc nhau cho mi ln thc
hin

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 49


n tt nghip

o pxPreviousWakeTime tr ti bin gi thi gian ti task c cho


thc thi ln cui. Bin ny phi c khi to trc thi im m n
c s dng ln u. Theo bin ny s c t ng cp nht
bn trong vTaskDelayUntil ().
o xTimeIncrement chu k thi gian. Nhim v s c cho php thc
thi ti thi im pxPreviousWakeTime + xTimeIncrement. Gi
vTaskDelayUntil vi cng gi tr tham s xTimeIncrement s lm cho
task thc hin vi interface period c nh
xTaskPriorityGet phi c nh ngha l 1 nu mun s dng. pxTask l v
tr ca task c hi. Chuyn v rng nhm s dng nhng kt qu trong
mc u tin ca vic goi tr li task
vTaskPrioritySet phi c nh ngha l 1 nu mun s dng. Hm ny t
cc mc u tin cho cc task. Vic chuyn ng cnh s c thc hin sau
khi hm tr li nu mc u tin c t cao hn task ang hot ng hin
thi
pxTask s dng cho task mc u tin c t. Chuyn v rng s dng
cc kt qu trong mc u tin ca task ang gi c t
vTaskSuspend phi c nh ngha l 1 nu mun s dng. Hm ny
treo cc task. Khi b treo cc task ny s khng c s dng thi gian ca
b vi iu khin bt k mc u tin no. Nhng li gi n vTaskSuspend
khng c gi chng, v d gi vTaskSuspend () hai ln trong cng mt
task th vn l 1 li gi n vTaskResume () treo task. pxTaskToSuspend
s dng trong task b treo. Chuyn v rng sau khi gi n treo task.
vTaskResume: phi c nh ngha l 1 nu mun s dng. Hm s dng
tip tc cc task b treo. Cc task b treo bi 1 hay nhiu li gi n
vTaskSuspend () s c tr li sn sang chy ch bi 1 li gi
vTaskResume (). pxTaskToResume s dng cho task c sn sng.
xTaskResumeFromISR c nh ngha l 1 nu mun s dng. Vic chy
hm vTaskResume() c th c gi trong ISR. Cc task b treo bi 1 hay
nhiu li gi n vTaskSuspend() s c tr li sn sang chy ch bi 1
li gi vTaskResumeFromISR(). pxTaskToResume s dng cho task c
sn sng.
vTaskStartScheduler(void) bt u tick x l ca li thi gian thc. Trc
khi vic gi kernel c lm ch qua cc task c thc hin. Chc nng
ny khng gi tr li n khi c li gi vTaskEndScheduler (). t nht l 1

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 50


n tt nghip

task c to ra qua li gi xTaskCreate () sau li gi vTaskStartScheduler


(). Idle task c t ng to ra khi task ng dng u tin c to ra.
vTaskEndScheduler(void) dng tick ca kernel thi gian thc. Tt c cc
task c to ra t ng b xa v a nhim ( hoc preemptive hoc
cooperative) s dng li. Gi s vTaskStartScheduler c gi li th s
thc hin phc hi t im m vTaskStartScheduler() c gi.
vTaskEndScheduler yu cu chc nng thot c nh ngha trong lp
porable (xem vPortEndScheduler() trong port.c cho PC port). iu ny c
xy dng cho phn cng c trng ring bit nh dng kernel tick.
vTaskEndScheduler() gii phng ton b ti nguyn c cp pht bi
kernel nhng s khng gii phng ti nguyn cp pht bi task ng dng.
vTaskSuspendAll() treo tt c kernel thi gian thc hot ng trong khi vn
gi ngt (bao gm c kernel tick) hot ng. Sau khi gi vTaskSuspendAll()
cc task ang c gi vn tip tc thc hin ngoi tr nguy c hon i ra
ngoi cho n khi li gi xTaskResumeAll() c thc hin.
xTaskResumeAll(void) phc hi kernel hot ng thi gian thc theo li gi
vTaskSuspendAll(). Sau li gi vTaskSuspendAll(), kernel s t iu khin
vo cc task ang thc hin vo bt k thi gian no. Nu phc hi lp lch
gy ra chuyn ng cnh th pdTRUE c tr li, trng hp khc
pdFALSE c tr li.
Cc task tin ch
xTaskGetTicksCount: tr li gi tr ticks m c t khi
vTaskStartScheduler b hy b.
uxTaskGetNumberOfTasks(void): hm ny s tr li s lng cc task m
kernel ang qun l. Hm ny cn bao gm c cc task sn sng, b kha
hoc b treo. Task b delete m cha c gii phng bi idle cng c
tnh vo b m
vTaskList(): configUSE_TRACE_FACILITY, vTaskDelete v vTaskSuspend
phi c nh ngha l 1 nu mun s dng. Ch : hm ny s khng cho
php ngt trong khong thi gian n lm vic. N khng to ra chy cc
ng dng bnh thng nhng gip cho vic debug. Hm ny cng lit k cc
task hin thi, cng vi trng thi hin thi v ngn xp s dng ca chng
nh du mc water cao. Tasks c ghi nhn l blocked ('B'), ready ('R'),
deleted ('D') hoc suspended ('S').

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 51


n tt nghip

o pcWriteBuffer: mt b m c cp chi tit trn c vit bng


m ASCII. B m ny c coi l ln cha cc bo cc pht sinh.
Khong 40 bytes cho 1 task l
vTaskStartTrace(): nh du vic bt u hot ng ca kernel. Vic nh
du chia ra nhn ra task no ang chy vo lc no. nh du file c
lu tr dng nh phn. S dng nhng tin ch c lp ca DOS th gi
convtrce.exe chuyn chng sang kiu text file dng m c th c xem
v c v
o pcBuffer: m m vt c ghi.
ulBufferSize dung lng ca pcBuffer tnh bng byte. Vic nh du s c
tip tc n khi b m y hoc ulTaskEndTrace () c gi.
ulTaskEndTrace(void): Dng nh du kernel hot ng, tr li s byte m
vit vo b m nh du.
Lp lch ni b cho mc ch port
vTaskIncrementTick(void): Hm ny khng sdng t code ng dng. N
c to ra khi thc thi vic port ca lp lch v n l giao din dng cho
sdng loi tr ca b lp lch. Gi t kernel tick (hoc preemptive hoc
cooperative), n tng b m tick v kim tra nu bt k task no b kha
n mt im hu hn s c loi b khi danh sch b kha v thay vo
l danh sch sn sng.
vTaskPlaceOnEventList(): Hm ny khng sdng t code ng dng. N
c to ra khi thc thi vic port ca lp lch v n l giao din dng cho
sdng loi tr ca b lp lch. Hm ny c gi khi khng cho php ngt.
Loi b tt c cc task ang gi t danh sch sn sng v thay vao c
danh sch task ch s kin lin quan v danh sch ca task tr. Task s b
loi b t cc list v thay th list sn sng hoc s kin xut hin (c th
khng phi l task c mc u tin cao hn trong cng mt s kin) hoc k
tr ht hn.
pxEventList: gm cc task b kha ch n khi c s kin xy ra.
xTicksToWait: Lng thi gian ln nht m task phi ch n khi s kin
xut hin. iu ny r rng trong kernel ticks, hng s
portTICK_RATE_MS c th c s dng ss chuyn kernel ticks sang
thi gian thc t.
xTaskRemoveFromEventList(): Hm ny khng sdng t code ng dng.
N c to ra khi thc thi vic port ca lp lch v n l giao din dng

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 52


n tt nghip

cho sdng loi tr ca b lp lch. Hm ny c gi khi khng cho php


ngt. Loi b task t c list s kin v list cc task b kha thay vo l hng
i sn sng. xTaskRemoveFromEventList() s c gi nu hoc s
kinxut hin gii phng task hoc thi gian block b timeout. Hm ny tr
li pdTRUE nu task b loi b c mc u tin cao hn task to li gi,
ngc li pdFALSE.
vTaskCleanUpResources(): Hm ny khng sdng t code ng dng. N
c to ra khi thc thi vic port ca lp lch v n l giao din dng cho
sdng loi tr ca b lp lch. Hm ny phi c nh ngha l 1 nu
mun s dng. Xa ht hng i sn sng v tr ca khi iu khin task,
gii phng b nh cp pht cho khi iu khin tk v cc ngn xp task.
xTaskGetCurrentTaskHandle(): tr li knh iu khin cho cc task ang
gi.
vTaskSetTimeOutState(): gi li nhng trng thi hin thi tham chiu
sau ny.
xTaskCheckForTimeOut(): so snh trng thi thi gian hin ti vi thi
im trc xem c b timeout hay khng.
vTaskMissedYield(): shortcut c s dng bi hng i thc thi ngn
cn nhng li gi hm taskYield () khng cn thit.
vTaskPriorityInherit: nng mc u tin ca mutex holder ln n task ang
gi nu mutex holder c mc u tin thp hn task ang gi.
vTaskPriorityDisinherit: t mc u tin cho task tr li ng nh mc u
tin ca n trong trng hp m n k tha mc u tin cao hn trong khi
n ang gi semaphore.
c) list.h
Trong file list.h, FreeRTOS nh ngha cc cu trc, cc macro v cc hm phc
v cho cc tin ch v danh sch. Cc chc nng ca file nh to mi, thm, bt cc
tc v vo danh sch cc task ang chy (running), sn sng (ready), kho (block), treo
(suppend).
listSET_LIST_ITEM_OWNER(): macro t i tng s hu cc phn t
ca danh sch. Cc i tng s hu phn t danh sch l i tng
(thng l TCB) nm trong phn t danh sch
listSET_LIST_ITEM_VALUE(): macro t gi tr ca phn t danh sch.
Trong hu ht trng hp gi tr c dng sp xp danh sch theo
mt th t no .

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 53


n tt nghip

listGET_LIST_ITEM_VALUE(): macro ly li gi tr ca phn t danh


sch. Gi tr ny c th biu th bt c ci g, v d nh mc u tin ca tc
v hoc thi gian m task c th b kho.
listLIST_IS_EMPTY: macro xc nh xem danh sch cn cha phn t
no khng. Macro ch c gi tr true nu danh sch rng.
listCURRENT_LIST_LENGTH(): tr li s phn t trong danh sch.
listGET_OWNER_OF_NEXT_ENTRY(): hm ny tr li phn t tip theo
cu danh sch. Tham s pxIndex c s dng duyt dc theo danh sch.
Khi gi hm ny th pxIndex tng ln n phn t tip theo ca danh sch v
tr li thng s pxOwner. V th s dng nhiu li gi hm ny loi
mi phn t ra khi danh sch. Thng s pxOwner ca phn t danh sch
tr vo i tng s hu phn t danh sch. Trong b lp lch th thng
l khi iu khin tc v (TCB).
listGET_OWNER_OF_HEAD_ENTRY(): s dng tm chng trnh ch
ca phn t u tin trong danh sch. Cc danh sch thng c sp xp
theo gi tr phn t tng dn. Gi tr cng c tr li vo pxOwner. Thng
s pxOwner c th c to ra theo hai cch lin kt gia phn t danh sch
v chng trnh s hu n.
listIS_CONTAINED_WITHIN(): kim tra xem phn t c nm trong danh
sch khng. Phn t danh sch duy tr con tr container m tr vo danh
sch m n nm trong . Cng vic m macro ny l kim tra xem
container v danh sch c khp nhau khng.
vListInitialise(): phi gi ngay trc khi danh sch c s dng. Hm ny
khi to tt c cc phn t trong cu trc danh sch v thm phn t
xListEnd vo danh sch ghi li dng cho vic khi phc li danh sch.
vListInitialiseItem(): phi gi ngay trc khi phn t danh sch c s
dng. Hm ny khi to ton b danh sch trng v th phn t khng nm
trong danh sch.
vListInsert(): thm phn t vo danh sch. Phn t s c thm vo danh
sch v tr c xc nh r bi gi tr ca phn t (sp xp theo th t
tng dn).
vListInsertEnd(): thm phn t vo danh sch. Phn t s c thm vo v
tr chng hn nh v tr phn t cui cng trong phm vi danh sch tr li t
nhiu li gi hm listGET_OWNER_OF_NEXT_ENTRY. Phn t danh sch
pvIndex dng duyt danh sch, thng s ny s tng n phn t tip theo

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 54


n tt nghip

ca danh sch. Thay th phn t danh sch s dng vListInsertEnd hiu qu


thay vo v tr tr bi pvIndex. C ngha l mi phn t khc trong danh
sch s c tr li bi hm listGET_OWNER_OF_NEXT_ENTRY trc khi
thng s pvIndex tr tr li phn t ang c thm vo.
vListRemove(): loi b phn t t danh sch. Phn t danh sch c con tr
n danh sch cha n, v th ch phn t danh sch cn c chuyn thnh
hm. Phn t s loi b chnh n t con tr danh sch bi thng s
pxContainer ca n.
d) croutine.h
Nhim c ca file l:
xCoRoutineHandle: S dng n nhng thc thi ca khi iu khin co-
routine. Cu trc khi iu khin d sao cng phi nm trong header quy
nh trong cc macro thc thi ca cc chc nng ca co-routine.
xCoRoutineCreate: to mi cc co-routine v thm chng vo danh sch cc
co-routine sn sng. Hm ny tr li pdPASS nu co-routine to ra v
thm vo thnh cng list co-routine sn sng chy. Cc bin phi c cho
l static nu nun duy tr qua nhng li gi block. Cc thng s l:
o pxCoRoutineCode: Tr vo chc nng ca co-routine. Cc chc nng
co-routine yu cu nhng c php c bit
o uxPriority: Mc u tin i vi co-routine khc ti co-routine s
chy.
o uxIndex: c s dng phn bit cc co-routine chy trong cng mt
chc nng.
vCoRoutineSchedule(): cho php co-routine c mc u tin cao nht c
chy. Co-routine ny s chy n khi n b kha, phi nhng hoc b ngt
bi tc v. Co-routine chy trong cooperatively th mt co-routine khng b
ngt bi cc co-routine khc nhng c th b ngt bi task. Nu ng dng
bao gm c task v co-routine th vCoRoutineScheduler c th c gi t
idle task ( trong idle task hook).
Cc co-routine phi c bt u vi nhng li gi macro crSTART().
Cc co-routine phi c kt thc vi nhng li gi macro crEND(). Cc
macro c d phng cho s dng bn trong ch bi cc thc thi co-routine
nh crEND, crSET_STATE. Cc macro ny c khng c s dng bi
ngi vit ng dng

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 55


n tt nghip

crDELAY: To tr cho cc co-routine trong khong thi gian c nh.


crDELAY ch c th gi t cc hm co-routine ch khng th gi n t mt
hm ca co-routine v crDELAY khng th duy tr stack ring ca n.
o xHandle: thng s iu kin tr co-routine.
o xTickToDelay: s lng tick m co-routine to tr. Lng thi gian thc
t bi configTICK_RATE_HZ (t trong freeRTOSconfig.h). Hng s
portTICK_RATE_MS c th c s dng i t tick ra thi gian
thc.
Cc macro crQUEUE_SEND(), crQUEUE_RECEIVE() l cc co-routine
tng ng vi cc hm xQueueSend() v xQueueReceive().
crQUEUE_SEND(), crQUEUE_RECEIVE() ch c th s dng trong cc
co-routine ngc li cc hm xQueueSend() v xQueueReceive() ch c
s dng trong cc task. CrQUEUE_SEND() ch c th gi t cc hm co-
routine ch khng th gi n t mt hm ca co-routine v
CrQUEUE_SEND() khng th duy tr stack ring ca n.
o pxQueue: l mt knh iu khin ca hng i, ti d liu s c
a ln. Knh iu khin ny s dng nh vic tr li gi tr khi m hng
i c to ra bng cach s dng hm xQueueCreate() ca API.
o pvItemToQueue: tr vo d liu s c a vo queue. S lng byte
ca mi hng i l ring bit. S lng byte ny c sao chp t
pvItemToQueue vo chnh queue .
o xTickToDelay: s lng tick m co-routine b kho ch tn ti trong
queue, thng l khong ny khng tc thi.
o pxResult: bin c tr bi pxResult s c t n pdPASS nu d liu
c a hnh cng vo hng i, ngc li n s bo li c nh
ngha trong projdef.h.
Macro crQUEUE_SEND_FROM_ISR() v crQUEUE_RECEIVE_
FROM_ISR() l co-routine tng ng vi xQueueSendFromISR() v
xQueueReceiveFromISR() c s dng bi task.
crQUEUE_SEND_FROM_ISR() v crQUEUE_RECEIVE_FROM_ISR ch
c th s dng chuyn d liu gia co-routine v ISR, ngc li
xQueueSendFromISR() v xQueueReceiveFromISR() ch c s dng
chuyn d liu gia task v ISR. crQUEUE_SEND_FROM_ISR ch c th
gi t ISR gi d liu n queue trong phm vi co-routine.
o pxQueue : knh iu khin hng i ti cc mc c a ln.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 56


n tt nghip

o pvItemToQueue tr n mc s c t vo hng i. Dung lng ca


mc m hng i s gi c nh ngha khi hng i c to ra, do
nhiu byte s c sao chp t pvItemToQueue vo vng d tr ca
hng i.
o xCoRoutinePreviouslyWoken: cho ISR c th a d liu vo cng mt
hng i trong nhiu thi im t cc ngt n. Li gi u lun chuyn
vo pdFALSE. Cc li gi sau chuyn vo gi tr t li gi trc
o Tr li gi tr pdTRUE nu co-routine c nh thc bi a d liu
vo hng i. iu ny c s dng bi ISR tin liu nu chuyn
ng cnh c yu cu theo cc ngt.
vCoRoutineAddToDelayedList: Hm ny c to ra cho nhng s dng ni
ti ch bi cc co-routine macro. Cc macro nguyn thy ca thc thi co-
routie i hi c nhng nguyn mu y. Hm ny khng c s dng
bi ngi vit ng dng. Hm ny loi b co-routine hin thi t list sn
sng v t chng vo list tr thch hp.
e) portable.h
y c th coi l file header ca port.c, cc hm ny s c tm hiu k hn
trong phn port.c (Phn II.III.2):
*pxPortInitialiseStack()
xPortStartScheduler()
vPortEndScheduler()
Bn cnh file lm mt s nhim v quan trng cho vic to project:
Khai bo ng dn vo file portmacro.h cho tng project ring bit cho
ph hp vi vi iu khin v chng trnh dch.
Vi mt s vi iu khin file my con include thm mt s file cn thit
to project. V d nh to project cho PC ngoi to ng dn n
portmacro.h cn phi include thm file frconfig.h.
Ngoi ra cn t ra cc chng trnh con qun l b nh yu cu cho port
*prvPortMalloc()
vPortFree()
vPortInitialiseBlocks()
3. Cc file cn li trong kernel ca FreeRTOS
Cc file cn li trong kernel l ba file:
project.h: nh ngha cc kiu ban u m cc hm thc hin phi ph hp
queue.h:

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 57


n tt nghip

semphr.h:
a) projdef.h
Nhim v ca file ch l nh ngha cc hng s m cc hm nn theo m s
dng. nu khng s dng th hon ton c th b file ny i nhng ch rng phi sa
li ht cc file dng sn do ngi vit lun tun th chun ny:
pdTRUE = 1
pdFALSE = 0
pdPASS = 1
pdFAIL = 0
errQUEUE_EMPTY = 0
errQUEUE_FULL = 0
Ngoi ra nh ngha cc li:
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY = -1
errNO_TASK_TO_RUN = -2
errQUEUE_BLOCKED = -4
errQUEUE_YIELD = -5
b) queue.h
Nh tn gi ca file, tt c cc hm v macro c khai bo trong file nhm
phc v cho vic s dng hng i cho thun tin. Cc chc nng c th:
To hng i mi.
xQueueSendToToFront(): Gi phn t vo u hng i.
xQueueSendToToBack(): Gi phn t vo sau hng i.
xQueueGernericSend(): Gi phn t vo hng i.
xQueuePeek(): Ly phn t ra khi hng i m khng loi b n khi hng
i. Phn t c gi t hng i bng cch copy ra mt b m nn phi
cung cp cho b m dung lng . S lng byte c copy vo b m
phi c khai bo t khi to hng i.
xQueueReceive(): Nhn phn t t hng i. Phn t c gi t hng i
bng cch copy ra b m nn phi cung cp cho b m dung lng .
Lng byte c copy vo b m phi c khai bo t khi to hng i.
Tng t cc hm trn nhng vi hng i trong phm vi phc v ngt c
cc hm: xQueueSendToFrontFromISR(), xQueueSendToBackFromISR(),
xQueueGenericSendFromISR(), xQueueReceiveFromISR().
Tm s message lu tr trong hng i.
Xa hng i, gii phng b nh phn phi cho hng i.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 58


n tt nghip

c) semphr.h
Tt c cc hm v macro c khai bo trong file nhm phc v cho vic s
dng semaphore cho thun tin. Cc chc nng c th:
To ra semaphore nh phn, l kiu u tin c s dng trong ng b
gia cc tc v hoc gia tc v v ngtThis type of semaphore can be used
for pure synchronisation between tasks or between an interrupt and a task.
Kiu semaphore ny ch l nh phn nn nu mt task ang c sn xut
trong khi task khc c tiu th th s khng tha mn. Do kiu ny khng
c s dng cho thut ton u tin k tha m s
xSemaphoreCreateMutex().
Ly semaphore qua hm xSemaphoreTake(), s dng xQueueReceive().
Tr semaphore qua hm xSemaphoreGive(), s dng xQueueGenericSend().
Tng t c semaphore phc v ngt xSemaphoreGiveFromISR( ), s dng
hm xQueueGenericSendFromISR( ).
To mutex qua xSemaphoreCreateMutex(), s dng xQueueCreateMutex().
4. Cc file cn port FreeRTOS ln vi iu khin
a) FreeRTOSconfig.h
File c to ra vi hai nhim v chnh:
nh ngha cc thng s, cc chc nng c bn m FreeRTOS h tr c
nh yu cu trong FreeRTOS.h. Cc hm, macro ny nu mun khai bo c
s dng th nh ngha l , ngc li l 0. xem thm cc thng s cn
khai bo cho phn ny xem FreeRTOS.h <PhnII.I.a>
Cc thng s cn nh ngha cho tng vi iu khin v tng project c th:
o configCPU_CLOCK_HZ: khai bo tn s lm vic ca vi iu khin
theo n v Hz.
o configTICK_RATE_HZ: khai bo tn s tick mun s dng, n v Hz.
o configMAX_PRIORITIES: gii hn mc u tin cao nht c h tr
lp lch.
o configMINIMAL_STACK_SIZE: gii hn su nh nht ca ngn xp
c dng cho mi task.
o configTOTAL_HEAP_SIZE: gii hn tng lng RAM trong heap
cp pht cho tng nhim v.
o configMAX_TASK_NAME_LEN: gii hn di ca tn cc tc v, n
v tnh bng byte.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 59


n tt nghip

b) port.c
y l file quan trng nht trong vic to ra cc hm nh ngha trong
portable.h cho vic port ln PIC. Cc nhim v chnh c th nh sau:
portTIMER_FOSC_SCALE = 4: khai bo ci t phn cng cho tick.
portINITAL_INTERRUPT_STATE = 0xc0: khi to trng thi cho php ngt
cho cc task c to mi. Gi tr ny c copy vo INTCON khi chuyn
task trong ln u tin.
portGLOBAL_INTERRUPT_FLAG = 0x80: nh ngha ny ch cho cc bit
nm trong INTCON, ngt ton cc.
portINTERRUPTS_UNCHANGED = 0x00: hng s c s dng cho vic
chuyn ng cnh khi yu cu ngt chuyn t trng thi cho php ngt sang
trng thi khng thay i khi task va b ngt khi phc li.
portCOMPILER_MANAGED_MEMORY_SIZE = 0x13: mt s vng nh
cn c lu li nh mt phn ca ng cnh tc v. Nhng vng nh ny
c s dng bi trnh dch cho vic lu gi trung gian, c bit l khi thc
hin cc php tnh ton hc hoc khi s dng d lu 32 bit. Hng s ny
nh ngha ln vng nh phi lu.
vSerialTxISR() v vSerialRxISR(): chng trnh phc v ngt cho cng
truyn tin ni tip c nh ngha trong serial.c nhng vn c gi t
portable, coi nh cng l vector nh tick ISR. Trong phn demo c th m
em lm, em b phn ny i lm gn li h ca h iu hnh, cn
ngi s dng khi c th t ci t thm nu cn.
prvSetupTimerInterrupt(): ci t phn cng cho php tick.
prvTickISR(): chng trnh phc v ngt duy tr tick v thc hin chuyn
i ng cnh tick nu s dng kiu preemptive.
prvLowInterrupt(): chng trnh phc v ngt thay th cho vector mc u
tin thp. N gi nhng chng trnh phc v ngt thch hp cho cc ngt
thc t.
Phn quan trng cng l kh nht trong file l lu v khi phc ng cnh
trong mi ln chuyn i ng cnh. l hai macro portSAVE_CONTEXT()
v portRESTORE_CONTEXT(). Vi macro lu ng cnh, n ct tt c cc
thanh ghi lm nn ng cnh ca tc v vo ngn xp, sau ct nh mi
ca ngn xp ny vo TCB. Nu li gi hm ny n t ISR th bit cho php
ngt ny c set ISR c gi. V th ta mun lu thanh ghi
INTCON vi cc bit c set v ucForcedInterruptFlags. iu ny c

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 60


n tt nghip

ngha l cc ngt s c cho php tr li khi task va b ngt khi phc.


Nu li gi t thao tc (bng tay) chuyn ng cnh (v d t yield) th ta s
lu INTCON vi trng thi hin thi ca n, v ucForcedInterruptFlags
phi 0. N cho php yield trong vng bt ly. Ngoi ra, trnh dch thng
s dng mt s vng pha di b nh dng lm lu tr trung gian cho
cc tnh ton. iu ny thc s ng khi kiu d liu 32bit c s dng.
Cc on .tmpdata v MATH_DATA phi c lu tr nh mt phn ca
ng cnh. Macronayf s lu tr t a ch 0x00 n
portCOMPLIER_MANAGED_MEMORY_SIZE.
o Lu thanh ghi WREG u tin, n s b thay i ngay trong cc thao tc
di y.
o Lu thanh ghi INTCON vi cc bit thch hp.
o Lu cc thanh ghi cn thit vo ngn xp nh: BSR, FSR2L, FSR2H,
o Lu .tmpdata v MATH_DATA.
o Lu con tr ngn xp phn cng trong thanh ghi trung gian trc khi tat
hay i chng.
o Lu nh ca con tr ngn xp mm vo TCB.
vi macro portRESTORE_CONTEXT ta lm gn nh ngc li. Nhng ht
sc ch rng cc lu tr ny ng vi hu ht cc ng dng nhng khng
phi hon ton. Cn phi kim tra li vi tng ng dng c th.
*pxPortInitialiseStack(): ci t ngn xp ca task mi n sn sng hot
ng khi b lp lch iu khin. Cc thanh ghi phi c gi vo ngn xp
theo th t port c th tm c chng.
xPortStartScheduler(): ci t phn cng sn sng cho b lp lch iu
khin. Nhn chung l ci t cho ngt tick v ci t timer cho tn s ng
ca tick. Hm ny c s dng preemptive (tc l
configUSE_PREEMTIVE c t bng 1)
vPortEndScheduler(): hy ton b cit cho phn cng/ISR c thc
hin bi xPortStartScheduler() v th phn cng c li cc iu kin
u tin sau khi b lp lch dng hot ng. Hm ny khng th xy ra trong
b lp lch cho port PIC do khng th dng sau 1 ln chy.
vPortYield(): chuyn ng cnh th cng. Hm ny ging nh chuyn i
ng cnh tick nhng khng tng bin m tick. N phi ng nh chuyn
i ng cnh tick trong vic lu tr vo ngn xp ca task nh th no.

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 61


n tt nghip

c) portmacro.h
File ny nh ngha cho ring phn port. Cc nh ngha ny cu hnh cho
FreeRTOS ng vi phn cng v trnh dch. Cc ci t ny khng c bin i.
Cc nhim v ca file nh sau:
nh ngha cc kiu s liu c bn s dng trong FreeRTOS, nh: char
(portCHAR), float (portFLOAT), int (portSHORT), ...
Kim tra xem nu s dng USE_16_BIT_TICKS th t cho thi gian cc
i delay l 0xFFFF, ngc li delay s ln hn 0xFFFFFFFF.
Ngoi ra phn rt quan trng l khai bo v tr thanh ghi ngt ton cc, hm
cho php v khng cho php ngt. V d nh i vi PIC18F452 cn khai
bo v tr thanh ghi ngt ton cc l 0x80, bit cho php ngt ton cc hay
khng l INTCONbits.GIEH. Tip l lnh delay ca vi iu khin
portNOP().
Vn khc trong file l to hm ENTER_CRITICAL() v
EXIT_CRITICAL(). Khi bt u on bt ly cn ct thanh ghi ngt vo
ngn xp sau khng cho php ngt ton cc. Ngc li, khi ra khi on
bt ly cn khi phc thanh ghi ngt t ngn xp v cho php ngt nu trc
khi ngt c cho php. Khng c thay i bt k bit no khc trong thanh
ghi iu khin ngt.
II. Gii thch r v giao din

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 62


n tt nghip

Cc phn b sung
Rtos ppts.ppt: File ny trnh by v uCOS
Rtproj.pdf: so snh Free vi RTLinux
36-danlu911pdf: so snh Free v eCOS
Freertos.pdf: cc cu hi v freeRTOS
RTOS.doc: xem li k file ny c phn so snh
Vic cn li
Hon thnh phn so snh
Vit li cm n, li m u, kt lun, hng pht trin
Chnh li phn ph lc.
Xem li cc cu ch

Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 63

You might also like