uCOS-III操作系統簡單分析

源碼獲取

源碼下載地址:https://www.micrium.com。

源碼需要自己去網站裡面找,也可以在網站裡面找一個開發板的例子,也就包括了源碼的。


任務講解


1.任務怎樣創建來的?

編寫一個函數,定義為:OSTaskCreate(),裡面需要包含參數:任務結構體,要執行的函數、任務的名稱、棧的大小、當前任務的優先級,棧數組等。


2.任務的私有信息需要怎麼存放?

定義一個函數,命名為:OSTaskStkInit(),裡面包含的就是xPSR、PC、LR、R12、R3、R2、R1、R0,R11, R10, R9, R8, R7, R6, R5 and R4等的初始化。uCOS-III,rtx,rt-thread在這上面的處理都是相同的,所以也沒什麼好多說的了。

所以,這一路分析下來,基本上套路沒差。


3.任務怎麼切換?

對於系統運行,要執行第一個任務,可以調用函數:OSStart(),實際是調用OSStartHighRdy();這個函數是使用匯編編寫的,在裡面找到最高任務,然後跳轉過去運行,而運行堆棧信息也切換到psp中。

之後則是多個任務之間進行調度。

在普通任務中,可以調用函數OSTimeDly(),其實就是調用OSCtxSw(),需要設置PENDSV位,這樣就能做到PENDSV中斷產生,然後切換到應該切換到的任務中。

在中斷服務函數中, 可以調用OSIntExit(),跟普通任務不同,它會調用到OSIntCtxSw(),但是它跟OSCtxSw()內容一樣,也就能切換任務了。


4.訪問同一個資源(變量)如何處理?

對於uCOS-III處理起來也很簡單了,直接粗暴的操作PRIMASK。

從這些rtos中的代碼來看,應該只有uCOS-III寫的最淺顯易懂了,怪不得市面上分析它的代碼的書籍特別多。

本篇持續更新。。。


分享到:


相關文章: