uCosIII複習筆記(一)

2021-08-18 17:56:40 字數 1525 閱讀 6371

1.ucosiiii啟動和初始化:osinit()初始化,ostaskcreate()建立任務,osstart()啟動ucosiii

3.任務控制塊:os_tcb,結構體

建立:os_tcb  ***tasktcb;

初始化:建立任務時ostaskcreate()中會呼叫os_taskinittcb()

4.任務堆疊:任務切換時儲存工作現場(內部暫存器值)

建立:#define ***_stk_size 512//堆疊大小

cpu_stk ***_task_stk[***_stk_size];    //任務堆疊

初始化:建立任務時ostaskcreate()中會呼叫os_taskstkinit()

5.任務就緒表

5.1優先順序位對映表ospriotbl 記錄哪個優先順序下有任務就緒

cpu_dataospriotbl[os_prio_tbl_size],64優先順序下os_prio_tbl_size=2

os_priogethighest()計算前導零的方法找到就緒的最高優先順序任務

5.2就緒任務列表 osrdylist 記錄每個優先順序下所有就緒的任務

同一優先順序下,永遠先執行headptr所指向的任務

6.任務排程

6.1可剝奪型排程:終止當前正在執行的任務轉而去執行其他任務(ucosiii為可剝奪型核心,高優先順序任務準備就緒可剝奪低優先順序任務的cpu使用權),包括任務級排程器ossched()和中斷級排程器osintexit()。

排程器上鎖和解鎖:**執行過程中不想被打斷,可以通過osschedlock()給排程器上鎖,osschedunlock()解鎖。

常見的任務排程點:1.使用延時函式ostimedly()或者ostimedlyhmsm();2.建立任務;3.刪除任務;4.任務通過呼叫ostasksuspend()將自身掛起;5.解掛某個掛起的任務;6.使用者呼叫ossched()。

時間片輪轉排程函式os_schedroundrobincfg()

7.任務切換:ucosiii切換到另乙個任務時,儲存當前任務現場(暫存器值)到堆疊中,恢復新的現場並執行新的任務。

任務級切換osctxsw() (在任務級排程ossched()中被呼叫)

中斷級切換osintctxsw()(在中斷級排程osintexit()中被呼叫)

UCOS III學習筆記(一)

使用者指定元素的位數 如32bit 那麼ospriotbl結構即為任務就緒表,其中每乙個元素是乙個使用者制定位數的元素 os priogethighest 函式遍歷這個陣列並找到第乙個不為零的元素 找到那一行 計算這個元素的前導零個數之後即可得到最高的優先順序任務 前導零為乙個二進位制數第乙個1前出...

UCOSIII 移植筆記(一)

這篇博文為本人ucosiii移植筆記第一篇 先說一下ucosiii micrium在2009年推出了ucosiii,相對於之前的ucosii版本,在效能上有了進一步的提公升,主要是支援時間片輪排程,極短的關中斷事件等。可剝奪多工管理 什麼是可剝奪多工管理呢?查相關資料,意思就是這個系統總是在執行當前...

正點原子ucosIII學習筆記(一)

最近又開了新坑,在學過stm32後,我選擇去學學嵌入式作業系統,就從ucosiii開始好了。我看的是正點原子ucosiii的課程。第一節主要是介紹了下裸機跑程式和加作業系統跑程式的區別 裸機的話,乙個程式可分為前端和後端。後端就是乙個大迴圈,通過乙個死迴圈,不斷的呼叫hadeware裡函式的api,...