ucos2學習筆記 3 核心架構

2021-06-01 03:04:36 字數 1781 閱讀 3404

核心結構

1.處理臨界**:為了是有些**不被中斷或其他任務打斷,使其完整操作,同時核心中有

許多臨界**需要儲存。從而ucos中加入開關中斷的巨集定義(os_enter_critical-關中斷)(os_exit_critical開中斷)。

在ocos2中,開關中斷有有三種實現方法:

1)os_critical_method ==1,只是簡單的開關中斷,不會儲存中斷前的中斷狀態(例如,(關中斷狀態)->呼叫函式 (關中斷)->函式返回(開中斷))因為沒有記錄呼叫函式前的中斷狀態,所以無法恢復。這就是方法一,由於它的缺陷就產生了方法二,

2)os_critical_method ==2,為了儲存呼叫函式之前的中斷狀態,方法二在堆疊中儲存它的中斷狀態,同時,有些編譯器對彙編的優化並不理想,有可能導致入棧出棧的位址出錯,所以有了方法三。

3)os_critical_method ==3,全用c語言實現來儲存當預處理器的狀態字,並儲存在c語言的區域性變數之中,用於恢復psw

注:在時鐘管理中關中斷會使得程式死翹翹。

2.任務:通常是乙個無限迴圈,同時每個任務都有不同的優先順序,優先順序號越低的任務優先順序越高。

1)for(;;)和while(1)的區別:for的效率》=while;

2)任務的自動刪除:不是真真的刪除而是廢棄不用了。

3)任務狀態:dormant(休眠態),ready(就緒態),waiting(等待態),running(執行態),isr(終端服務態)

4)任務控制塊(os_tcb)

任務一旦建立,乙個新的os_tcb就會被賦值,os_tcb是乙個資料結構,儲存任務的狀態,他全部駐留在ram中。

5)就緒表

應為每個任務有不同的優先順序,最低優先順序的os_lowest_prio總是被賦為空閒任務。每個就緒的任務都放在就緒表中(ready_list),就緒表中有兩

個變數(osrdygrp和osrdytb[ ])

就緒表的操作:使任務進入就緒態,使任務脫離就緒態,查詢最高優先順序的任務。  

6)任務排程:scheduler

任務級的排程由函式:os_sched實現:

1>在函式中臨界保護方法3

2>判斷osintnesting(中斷服務程式判斷條件)和osschedlock(任務排程上鎖函式)

3>獲得最高優先順序的任務 

4>記錄任務切換次數

5>任務切換os_task_sw(通常含有微處理器的軟中斷)儲存當前任務的cpu暫存器的值,載入要執行的任務。

7)給排程器上加鎖和開鎖(鎖住系統,不讓執行其他任務)

8)空閒任務(ostaskidle):永遠優先順序最低

9)統計任務

10)uc/os2中的中斷

11)時鐘節拍

3.uc/os-|| 初始化

1) osiint()建立空閒任務os_taskidle,空閒任務總是處於就緒態,優先順序總是最低

2)ostcblist總是指向最後建立的任務。同時鍊錶的終點指向null

3)oslist還初始化5個空的資料的單鏈表,ostcbfreelist,oseventfreelist,osqfreelist,osflagfreelist, osmemfreelist。

4.uc/os-||的啟動

啟動是通過osstart()實現的,osstart開始啟動優先順序高的就緒任務啟動函式osstarthighrdy(),他永遠不返回osstart函式()。

UCOS2作業系統學習筆記(4)

讀 嵌入式實時作業系統uc os ii 第二版 1 與處理器型別無關的 p73 os core.c os flag.c os mbox.c os mem.c os mutex.c os q.c os sem.c os task.c os time.c ucos ii.c ucos ii.h 2 與應...

ucos2學習筆記 4任務管理

任務管理 在任務管理中,uc os2雖然可以管理多達64的任務,但建議保留幾個最高和最低的優先順序的任務,以備不時之需。任務管理 建立任務 刪除任務 改變任務優先順序 掛起任務 恢復任務以及獲取任務資訊。1.建立任務 uc os中提供了兩種,建立方式,ostaskcreate和ostaskcreat...

UCOS2系統核心講述(三) TCB任務控制塊

寫在前面 ucos2 stm32f1移植詳細過程 彙總文章 ucos2系統核心講述 一 總體描述 ucos2系統核心講述 二 初始化呼叫函式 tcb任務控制塊是用來記錄任務的堆疊指標 任務的當前狀態 任務的優先級別等一些與任務有關屬性的乙個資料結構表 因此,學習本文之前需要了解資料結構 任務控制塊相...