Introduction:
一個非常小的即時核心。
preemptible的以優先權驅動的排程,優先權是數字越小優先權越高。
架空DOS的interrupt,然後把自己的掛上去,uC/OS-II可直接往下層存取到DOS或硬體。
Example1: Multitasking
程式架構圖

main
OSInit: 建立ready list、priority table、TCB、Free pools
Install context switch handler: 將OSCtxSw掛到IVT的0x80
OSTaskCreate: 建立TaskStart的TCB並初始化它
OSStart: 執行context-switch到TasStart
TaskStart
prio: 0
Install tickISR: 將OSTickISR掛到0x08上
Create other task: 建立10個Task的TCB,優先權照建立的順序給
Exit?: 判斷有沒有按下ESC離開,離開會longjmp回到DOS
OSTimeDyHMSM: 沒按下ESC就呼叫Dly睡1秒,去讓其他Task執行
Task1~10
每個Task的prio為他的編號
OSSemPend: 取得Semaphore
random: random取得0~9的數字
OSSemPost: 釋放掉Semaphore
OSTimeDly: Dly自己讓別的Task去執行
執行結果:
沒有留言:
張貼留言