UCOS3嵌入式作業系統學習 ucos3原理

2021-06-02 07:53:43 字數 1976 閱讀 6955

1.任務控制塊tcb

2.排程演算法

優先順序列表ospriotbl[os_prio_tbl_size]:如圖,每位代表乙個優先順序,被置「1」表示此優先順序對應的任務就緒了。找出優先順序最高的就緒任務就是找出第乙個被置1的位所在的位置。

就緒表osrdylis[os_cfg_prio_max]:此陣列下標表示任務優先順序,其內容是乙個結構體;如圖:

同一優先順序且已經就緒的任務通過其tcb的nextptr與prevptr域鏈結為乙個鍊錶,上述的結構體用tailptr指向鍊錶的尾(鍊錶中最後乙個tcb),headptr指向鍊錶的頭。osrdylis的下標則對應任務的優先順序。比如osrdylis[3]中headptr指向所有就緒的且優先順序為3的tcb組成的鍊錶的頭。

ossched 、osintexit引發任務排程。ossched是任務級排程;osintexit是中斷級任務排程;

ossched 及osintexit排程過程:首先查詢優先順序列表ospriotbl中最高優先順序(假設為5),接著找到就緒表中osrdylis[5].headptr指向的tcb,如果此tcb指標與當前執行的任務tcb不同,則通過上下文切換,轉到此tcb對應的任務,完成排程。任務排程時總是執行就緒表中指向tcb煉表頭。所以時間片輪轉就是把就緒表中tcb鍊錶的頭移到尾(為嘛不用迴圈佇列?),然後呼叫ossched完成。輪轉借用了tcb中timequanta、timequantactr來判斷時間片是否到期。

3.上下文切換

ossched流程:

(1)    判斷是否允許排程(是否在中斷,是否鎖排程器等)

(2)    進入臨界區,關中斷(需要儲存當前cup中斷狀態)

(3)    獲得當前就緒任務中最高的優先順序,再獲得此優先順序對應任務tcb指標

(4)    當此tcb與當前正在執行的任務相同則不排程,返回(先恢復cup中斷狀態)

(5)    兩者不相同則呼叫os_task_sw巨集,觸發可掛起系統呼叫(pendsv)中斷(或同型別中斷)

(6)    開中斷,跳轉到中斷os_cpu_pendsvhandler

a.      關中斷

b.      獲得當前任務sp

c.      儲存未自動入棧的cpu暫存器

d.      當前任務sp存入堆疊

e.      呼叫ostaskswhook鉤子函式

f.       獲得就緒任務中優先順序最高並賦值到當前優先順序(ospriocur = ospriohighrdy)

g.      獲得對應的任務(ostcbcurptr = ostcbhighrdyptr)

h.      從新任務tcb中得到sp位址

i.        從新任務堆疊中恢復不自動儲存的暫存器(與存入順序一致)

j.        中斷返回(彈出自動儲存的cpu暫存器)

(7)    執行新任務

osintexit是中斷級的任務切換,與任務級切換差不多,要考慮本身已經處在中斷了(當前任務的cpu暫存器已經儲存)。cortexm3 移植例子直接觸發任務級切換用的os_cpu_pendsvhandler,因為pendsv的優先順序最低,所以雖然被觸發但必須等到其他中斷退出後才進入pendsv完成排程。osintexit使用osintctxsw巨集實現切換。

4. 任務掛起狀態

任務狀態包括掛起、就緒、執行與被中斷;ucos3建立核心資源(訊號量、 mutex 、事件標誌組、訊息佇列)時,會生成對應的掛起佇列(os_pend_list),任務在等待這些資源時被放入相應的掛起佇列(掛起佇列由os_pend_data結構鏈結在一起,乙個os_pend_data對應乙個tcb)。這些資源都包含乙個相同的os_pend_obj區域,其中tailptr指向掛起佇列的尾(最低優先順序),headptr指向頭(最高優先順序)。

在物件被提交時會檢查對應掛起佇列並把掛起佇列中的任務置於就緒態。

等待物件超時檢測是在系統任務ostimetick中完成(在等待物件時設定了超時時間,則等待物件的任務會被加入到時基列表oscfg_tickwheel)。

嵌入式系統學習

實時多工作業系統 美國的火星表面登陸的火星探測器上使用的嵌入式作業系統是vxworks c os ii是 microcontroller operating system 的縮寫,它是原始碼公開的實時嵌入式操作 vxworks的微核心wind是乙個具有較高效能的 標準的嵌入式實時作業系統核心 嵌入式...

《時間觸發嵌入式作業系統》學習筆記

時間觸發嵌入式作業系統 這本書已經有一些年份了,他是以古老的51微控制器 8051 作為控制器講解的,本書涉及到一些硬體基礎知識,這些可能在平時開發中已經熟悉,軟體部分則介紹了時間觸發的嵌入式系統的設計和原理。本章主要概述了幾種系統 它們之間存在著重疊,比如本書的核心,時間觸發嵌入式系統,它則屬於時...

嵌入式系統學習之路

1 window環境程式設計 2 linux環境程式設計 3 微控制器 1 c語言 第二版譚浩強 c程式語言 第二版 徐寶文譯機戒工業出版社 你能區分開指標陣列和陣列指標嗎?你知道函式指標嗎?你能區分開定義乙個變數時系統給它分配的空間與用malloc 函式給乙個變數分配的空間有什麼不一樣嗎?2 資料...