Professional Documents
Culture Documents
Li cm n
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
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
ng dng
Hnh 1: S h iu hnh
H iu hnh c th nhn t hai quan im [2]:
Qun l ti nguyn (resource manages)
My m rng (extended machines).
quan im qun l ti nguyn, cng vic ca h iu hnh l qun l cc phn
khc nhau ca h thng mt cch hiu qu. Ti nguyn ca h thng (CPU, b nh,
thit b ngoi vi, ...) vn rt gii hn, nhng trong cc h thng a nhim, nhiu ngi
s dng c th ng thi yu cu nhiu ti nguyn. tha mn yu cu s dng ch
vi ti nguyn hu hn v nng cao hiu qu s dng ti nguyn, h iu hnh cn
phi c c ch v chin lc thch hp qun l vic phn phi ti nguyn. Ngoi
yu cu dng chung ti nguyn tit kim chi ph, ngi s dng cn cn phi chia
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
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
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:
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 .
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
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.
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.
c) semphr.h
Tt c cc hm v macro c khai bo trong file nhm phc v cho vic s
dng semaphore cho thun tin. Cc chc nng c th:
To ra semaphore nh phn, l kiu u tin c s dng trong ng b
gia cc tc v hoc gia tc v v ngtThis type of semaphore can be used
for pure synchronisation between tasks or between an interrupt and a task.
Kiu semaphore ny ch l nh phn nn nu mt task ang c sn xut
trong khi task khc c tiu th th s khng tha mn. Do kiu ny khng
c s dng cho thut ton u tin k tha m s
xSemaphoreCreateMutex().
Ly semaphore qua hm xSemaphoreTake(), s dng xQueueReceive().
Tr semaphore qua hm xSemaphoreGive(), s dng xQueueGenericSend().
Tng t c semaphore phc v ngt xSemaphoreGiveFromISR( ), s dng
hm xQueueGenericSendFromISR( ).
To mutex qua xSemaphoreCreateMutex(), s dng xQueueCreateMutex().
III. Port FreeRTOS ln vi iu khin PIC18F452
1. Mt s ch khi port FreeRTOS ln vi iu khin Commented [PNH2]: Xem li phn ny
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.
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
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.
2. Trnh by c th v cc bc ci t v chy th
Kt lun
[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.
www.microchip.com/download/lit/pline/picmicro/families/18fxx2/39564b.pdf
www.microchip.com/download/tools/picmicro/code/mplab17/51217b.pdf
www.ucos-ii.com/contents/support/downloads/an1000.pdf
[11] www.en.wikipedia.org/wiki/
[12] www.lynuxworks.com/rtos/rtos.php
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
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.
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.
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.
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
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
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