Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 1
Li cm n
n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 2 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 3 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 .......................... Li! Th nh du khng c xc nh. II. RTOS.pdf .......................... Li! Th nh du khng c xc nh. III. Rtos ppts.ppt ........................................................................................ 63 IV. Cc file khc ...................... Li! Th nh du khng c xc nh. V. Lm cui tun .................... Li! Th nh du khng c xc nh. VI. Vic lm ngy th 2 .......... Li! Th nh du khng c xc nh.
n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 4 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
n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 5 M u
Ch thch [PNH1]: Ni r v ngha ca vic port ln VDK v s dng nhng phn mm free n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 6 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.
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 ng dng n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 7 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 8 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 9 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 10 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.
n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 11 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 12 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 13 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 thc cng H iu hnh thi gian thc mm Thi gian p ng tho mn nghim ngt cho php sai lch trong gii hn Thc thi ti thi im ti nng nht c th d bo trc gim st 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 14 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 15 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 16 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 . n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 17 Phn II: Tm hiu chi tit v FreeRTOS I. Tng quan v FreeRTOS 1. Khi nim FreeRTOS
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: Thng mi ho Chun IEC 61508 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 18 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 19 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 20 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 21 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 22 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 23 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 24 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 25 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 26 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 27 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 28 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 29 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 30 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 31 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 32 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 33 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: n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 34 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 35 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 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 Ch thch [PNH2]: Xemli phn ny n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 36 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 37 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 38 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 39 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 40 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 41 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 42 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 43 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) 1ms (bi 2) 105 byte 3 Nhy LED theo task 2 Idle +1 1000ms nu ng 100ms nu sai 105 byte 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 44 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 45 Kt lun n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 46 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] J ohn A. Stankovic, Strategic Directions in Real-Time and Embedded Systems ACM Computing Surveys, Vol. 28, No. 4, December 1996. [6] J ason 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] J ean 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
n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 47 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 48 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 49 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 50 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 51 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'). n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 52 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 53 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 . n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 54 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 55 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 56 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 57 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: n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 58 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 59
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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 60 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 n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 61 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. n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 62 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
n tt nghip
Nghin cu v port h iu hnh thi gian thc FreeRTOS ln vi iu khin PIC 63 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