Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

FREE RTOS

INSIDE-KERNEL

1.Tng quan v FreeRTOS 2. M ta KernelFreeRTOS


2.1 Cu hinh 2.2 Quan ly Task 2.3 Quan ly List 2.4 t lich cho FreeRTOS 2.5 X ly Critical Section 2.6 Quan ly Queue

1. Tng quan FreeRTOS c nghin cu bi Richard Barry vi tn ban u la FRTOS07. Muc ich cua FreeRTOS la portable, open source, mini kernel ma co th c thao tac trong ch u tin cung nh phi hp. Cac chc nng chinh 1.1 Thi gian thc 1.2 Thi gian thc hoc hoat ng ng b Trong ch ng b thi vic t lich khng c thc hin bi 1 im xac inh cua timer ma c x ly qua vic iu khin t task nay n task khac bi c ch yielding. 1.3 Dynamic Scheduling Thi im xp xp lai lich xay ra sau 1 khoang thi gian cu th (phu thuc vao tn s ng h) 1.4 Giai thut c lich La giai thut co u tin cao nht trc tin. Nu co nhiu hn 1 tast co cung u tin cao nht thi cac task se c thc hin theo kiu round-robin 1.5 Giao tip gia cac tin trinh 1.5.1 Queuing: Inter-process comm c thc hin bng queue, thi hu ht thng tin c truyn bng gia tri ch khng phai tham chiu nn vn rang buc v b nh la ang xem xet. Queue read or write t bn trong ISR la non-blocking. Queue read or write bi timeout=0 non-blocking 1.5.2 Synchroniztion: FreeRTOS cho phep tao ra va s dung binary semaphore. Ban thn Semaphore la 1 trng hp c bit cua queue vi chiu dai =1 va kich thc d liu la =0. Vi iu nay nn vic ly va tra semaphore la cac thao tac nguyn thuy, do o cac ngt se bi v hiu hoa va b t lich phai bi treo nhn 1 lock trn queue nay 1.6 Tranh Blocking va Deadlock Trong FreeRTOS cac task hoc la non-blocking hoc se bi block vi 1 khoang thi gian c inh. Cac task ma thc dy khi ht timeout va vn ko th truy nhp ti 1 tai nguyn vi i khi li goi API ti 1 tai nguyn co th tra v fail 1.7 X ly critical Section Critical Section c x ly bi vic v hiu hoa tt ca cac ngt. Critical section bn trong mi task co th c xp chng ln nhau va mi task se ghi du lai bi vic tng gia tri xp chng cua no. 1.8 Treo b t lich Khi danh ring vic truy nhp ti MCU ma vic MCU bi yu cu la khng gy nguy him cho thao tac cua ISR, b t lich co th bi treo. Vic treo nay am bao rng tin trinh hin tai se khng c u tin bi 1 t lich 1.9 Cp phat b nh FreeRTOS cung cp 3 m hinh heap. M hinh n gian nht la vic cp phat c inh, phc tap hn la m hinh cho phep cp phat va giai phong bng vic s

dung giai thut best fit va phc tap nht la heap_3 cho phep s dung malloc va calloc() 1.10 ao ngc u tin FreeRTOS khng thc hin bt ky ky thut nng cao nao vi u tin tin trinh nh k tha u tin hay xoay vong u tin thc hin ao ngc prio

Cu truc cua 1 con FreeRTOS la nh trn. Trong o phn nhn (HAL) la bao gm trong 3 file port.c, port.asm va portmacro.h

2. M ta nhn cua FreeRTOS

2.1 FreeRTOS configuration 2.2 Task Management 2.2.1 TCB FreeRTOS kernel quan ly cac task qua TCB. 1 TCB tn tai cho tng task trong FreeRTOS va bao gm toan b cac thng tin v trang thai cua 1 task.

2.2.2Task State:

- FreeRTOS tao ra 1 task bng vic tao ra va thit lp gia tri cho TCB. Task mi c t ngay vao trong ReadyList vi state=ready -ReadyLists c sp xp u tin vi cac task la bng nhau phuc vu cho vic round-robin. -FreeRTOS tao nhiu ReadyList- cho tng prirority. Khi la chon task tip theo thc thi, scheduler bt u vi list co u tin cao nht va lam vi list co u tin thp dn -FreeRTOS ko co 1 list hay state Running tng minh. Thay vao o no duy tri 1 bin la pxCurrentTCB chi ro tin trinh nao trong ReadyList ang chay, pxCurrentTCB do o c inh nghia nh la 1 con tro tro n cu truc TCB. -Task trong FreeRTOS co th bi khoa khi truy nhp vao 1 tai nguyn ma ko co sn. Scheduler khoa cac task chi khi chung c gng oc hay ghi vao queue ma la rng hay full. -Vic c gng truy cp vao queues co th bi blocking hay non-blocking. S phn bit la qua bin vTicksToWait. Nu =0, va queue la empty/full, task ko bi block. Ngc lai, task se bi block 1 khoang xTicksToWait ticks hoc cho ti khi 1 s kin nao o trn queue giai phong tai nguyn -Task cung co th t nguyn block 1 khongar thi gian qua vic goi ham API. Scheduler duy tri 1 danh sach delayed cho muc ich nay. Scheduler se thm

danh sach nay tai mi decision point quyt inh liu rng task a time-out. Sau o chung c t ln Ready list. Trong FreeRTOS cung cp vTaskDelay va vTaskDelayUntil. Bt ky task nao ngoai task ang chay va cac task phuc vu ISR co th c t trong trang thai Suspended vinh vin Task kt thuc chu ky sng cua minh bng vic bi xoa(t xoa). Trang thai deleted c yu cu cho ti khi khng con cn thit va kt qua la vic giai phong ngay tai nguyn bi gi bi task. y task vao trong trang thai deleted. Scheduler trong FreeRTOs c hng ti vic bo qua task nay. IDLE task co trach nhim thu don sau khi cac task a bi khoa va do o IDLE task co u tin thp nht.

2.3 Quan ly LIST

2.3.1 Ready and Blocked Lists FreeRTOSConfig.h List Created configMAX_PRIORITIES ReadyTaskLists[0]..[configMAX_PRIORITIES] INCLUDE_vTaskDelete==1 TaskWaitingTermination INCLUDE_vTaskSuspend==1 SuspendedTaskList N/A PendingReadyList N/A DelayedTaskList N/A OverflowDelayedTaskList Mi 1 list c tao vi kiu xList ma cu truc nh sau NumberOfItems S lng item trong danh sach (xListItem) *pxIndex Con tr c s dung i trn danh sach. No tro ti item k tip (xMiniListItem)xListEnd 1 item cua list ma anh du kt thuc cua list. No gm 1 gia tri ln nht trong xItemValue va do o no lun xut hin tai cui cua list xListItem xItemValue *pxNext *pxPrevious *pvOwner *pvContainer xItemValue *pxNext *pxPrevious Gia tri c dung sp th t thng la thi gian Con tro tro ti item tip Tro ti i tng ma bao gm trong list item. No thng la TCB Tro ti danh sach ni ma item c t Tr ti item tip theo

Khi tao List:

Vd khi tao DelayedTaskList. NumberOfItems=0 pxIndex,pxNext va pxPrevious tt ca u c set la ia chi cua cu truc xListEnd. xItemValue phai gi gia tri ln nht co th =portMAX_DELAY 2.3.2 Inserting a Task Into a List Vd DelayedTaskList. FreeRTOS s dung vListInsert.

xItemValue=38. pvOwnerTCB iu nay cho phep xac inh nhanh TCB

chen 1 task mi vao trong DelayedTaskList, vListInsert thc hin nh sau xItemValue trong GenericListItem mi c so sanh vi xItemValue t TCB u cua danh sach( s clock tick trn o task nn c anh thc). Nu gia tri ang tn tai la nho hn (24<38 ) con tro *pxNext c s dung di chuyn ti TCB tip theo trong list. Khi so sanh la false, TCB phai c di chuyn ti ung vi tri ma no c chen. iu nay c thc hin bi vic chinh sa pxNext va pxPrev trong cac items va ca pxNext va pxPrev cua chinh TCB o. Cui cung pxContainer trong TCB mi c t c sa tro ti DelayedTaskList. Con tro nay giup cho vic g bo nhanh chong sau nay. Khi 1 TCB mi c vao , NumberOfItems trong {DelayedTaskList} c cp nht 2.3.2 Timer Counter Size va {DelayedTaskList} Cac Task c t trn DelayedTaskList bi Scheduler hoc bi goi API khi goi vTaskDelay hoc vTaskDelayUntil. FreeRTOS ma b m co resolution 8bit 255 ticks. thc hin iu nay FreeRTOS inh nghia va s dung 2 danh sach delay- DelayedTaskList va OverflowDelayedTaskList -xTimeToWake=xTickCount+xTicksToDelay; -G bo xGenericListItem t ReadyTaskList -Nu xTimeToWake<xTickCount tran thi chen no vao danh sach pxOverflowDelayedTaskList Ngc lai chen no vao danh sach pxDelayedTaskList.

y la s tick ma task co th c locked phai nho hn hoc bng portMAX_DELAY

Mi khi tick count c tng ln (trong ham vTaskIncrementTick),1 kim tra c thc hin quyt inh xem liu counter a over. Nu co thi cac con tro tro ti DelayedTaskList va OverflowDelayTaskList c trao i

2.3.3 Task Scheduler

Thao tac u tin c thc hin bi scheduler la reset counter/timer (1 chi lnh cu th ua rphaanf cng) bt u khoang tick mi. FreeRTOS co th c cu hinh cooperate hoc preemtive. Trong ch cooperative, thao tac duy nht c thc hin trc skhi tra v t ngt timer la tng tick count. Cung con 1 lng ang k nm ng sau thao tac nay Nu Scheduler la preemptive, bc u la stack ngc canh cua task hin tai trong event ma chuyn i ng canh yu cu. Scheduler tng tick count va sau khi kim tra liu rng hanh ng nay co gy nn 1 blocked task tr thanh unblock hay khng? Nu task unblock va task nay co u tin hn task hin tai thi 1 vic chuyn ng canh c thc thi. Cui cung, ng canh c lueeu, cac thanh ghi mm c un stacked va scheduler tra v t ngt 2.3.4 Cu truc ng canh cua Task

Khi ISR xay ra, MCU se ngay lp tc lueu ng canh MCU bng vic s dung con tro n stack hin tai(SP). Ng canh cua MCU gm PC,Y,X reg, A,B reg va cac thanh ghi iu kin (CCR). Tt ca cac thanh ghi nay c stack theo th t a chi ra trc khi MCU nhay ti dich vu ngt.

Trong thc thi FreeRTOS trn HC12 MCU, n c 12bytes cc thanh ghi mm c stack ln nh ca trng thi MCU c cung cp bi c ch ISR Cc thanh ghi c stack 1 cch tng minh bi vic thc thi macro portISR_HEAD bn trong HAL. Chng c unstack bi portISR_TAIL Thng tin ng cnh cui cng c cung cp bi vic thc thi macro portSAVE_CONTEXT bn trong HAL. Macro ny trc tin stack 1 bin m track- theo di su ca nesting cho task. Nu target ang s dng m hnh b nh xp chng cho thit b Freescale, sau thanh ghi PPAGE nn c lue. Sau macro ny lu gi tr hin ti ca thanh ghi SP vo trong TCB ca Task1.

exit t ISR, portRESTORE_CONTEXT, portISR_TAIL v 1 RTI phi c thc thi theo th t c th xa b hon ton stack ca context frame

2.4.5 Chuyn ng cnh bi thao tc trn con tr Stack(SP)

Mt trong s cc task ca Scheduler c quyt nh nu CS(context switch) c yu cu. Scheduler copy head entry ca Task 2 vo trong thanh ghi SP. Nu ng cnh ca Task 2 c lu xc nh context frame, sau vic thc thi portRESTORE_CONTEXT, portISR_TAIL v 1 RTI s phc hi ng cnh ca Task2 ti MCU 2.4.6 Starting v Stopping Tasks Mc d hot ng ny khng trc tip trong hm scheduler, nhng y chng ta s m t tm tt qu trnh ny. Do vic hiu v to v xa Task s h tr trong vic m t phn cn li ca chc nng Scheduler -Task c to bi li gi xTaskCreate() t trong main.c hoc t trong1 task Tham s -Con tr tr ti hm m thc thi task -Tn ca task - su stack ca task ny - u tin -Con tr tr ti tham s cn thit

xTaskCreate trc tin phi cp pht b nh cho TCB v Task ca n. iu ny c thc hin bi li gi AllocateTCBandStack gi portMalloc nhn c b nh cho TCB chnh l kch thc ca cu trc TCB v khi nh ca stack vi kthuoc= kiu d liu Stack * kch thc stack yu cu. Cui cng AllocateTCBandStack set 1 con tr tr ti a ch c s ca stack bn trong TCB

Gi s bc 1 v 2 trong hnh 17 c thit lp TCB vi gi tr bit. Bc 3 v 4 chun b cho vic chuyn ng cnh. 1 con tr ti top-oF-Stack c thit lp vi gi tr c s c tm thy trong TCB. Stack cho task sau c chim vi dummy fraame m trng khp tuyt i vi nhng g c yu cu khi 1 vic chuyn ng cnh c thc hin bi s kt hp portRESTORE_CONTEXT v port_ISRTAIL nh tho lun trc . Thnh phn quan trng ca dummy frame l a ch tr v m s tr ti a ch bt u ca task code

Sau qu trnh c tr dummy Stack cho task, con tr topOfStack c cp nht v c vit li ti TCB. SP ny l gi tr u ca TCB c ly ra trc tip thc hin vic chuyn ng cnh Khi 1 task c thc hin thnh cng, xTAskCreate phi quyt nh liu rng Scheduler ang chy? Nu c, task mi n gin l thm vo Ready list v scheduler s da trn ngt u tin tip theo quyt nh task c u tin cao nht. Nu scheduler ang khng chy, th xTaskCreate phi quyt nh liu rng task va c to c u tin co nht hay ko? V sau m bo rng iu ny c ghi li (s dng pxCurrentTCB) Bc cui cng trong vic to 1 task l thm n ti ReadyTaskList. iu ny c thc hin bi li gi ti hm prvAddTaskToReadyQueue. Hm ny quyt nh mc u tin ca task m c thm vo n tm kim danh sch Ready ph hp. Nu danh sch ny l ko tn ti vi u tin ( m ch xy ra nu task c to ng sau khi khi ng) th danh sch ph hp s c to ra trc tin. pxCurrentTCB c thay i bi prvAddTaskToReadyQueue ghi li TCB c chuyn ln tip Yielding Between Ticks

Scheduler tng ng vi ngt ISR. 1 ISR th hai c yu cu cho vic nhng 1 task trong khi 1 s kin ang b kha hoc hon thnh sm. iu ny c thc hin bi ngt mm Swi. Bt k li gi ti portYIELD gy ra ch lnh ngt swi thc thi, triu gi n m ISR lin kt ti ngt. Swi xy dng context frame nh m t trc - n thc thi portISR_HEAD v portSAVE_CONTEXT, quyt nh nu bt k vic chuyn ng cnh l c yu cu (v load TCB head ca task mi vo trong SP nu cn thit) v sau un-stack context frame ph hp. rng 1 Swi l non-maskable cn timer cho scheduler c th b mask

Starting the Scheduler

vTaskStartScheduler() nn l hm c gi cui cng trong main.c sau khi tt c cc task c yu cu khc c to ra s dng hm xTaskCreate() - Hm vTaskStartScheduler trc tin to IDLE task vi u tin thp nht v sau set global timer xTickCount=0. xSchedulerRunning=TRUE. Bin ny c s dng nhiu ni quyt nh liu rng scheduler l sn dng quyt nh scheduler hoc quyt nh khc cn thit. V d, cc task c th c to trc hoc sau khi scheduler c bt u. Khi cc tasks ch

c to vi u tin mi v chuyn pxTCBCurrent phn nh trng thi(m khng thc hin vic chuyn ng cnh). Ngc li scheduler c s dng.vTaskStartScheduler chuyn quyn iu khin ti xTaskStartScheduler trong HAL. HAL l cn thit ti im ny bi v th t u tin ca cng vic cho xTaskStartScheduler() l thit lp 1 ngt timer gi scheduler. Do timer l ph thuc phn cng, cu hnh n phi xy ra trong HAL.

You might also like