核心結構
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任務控制塊是用來記錄任務的堆疊指標 任務的當前狀態 任務的優先級別等一些與任務有關屬性的乙個資料結構表 因此,學習本文之前需要了解資料結構 任務控制塊相...