1 前後臺系統
不復雜的小系統通常選擇前後臺系統,應用程序是一個無限循環。在循環中調用相應的函數完成相應的操作,這部分可以看成後臺行爲。中斷服務程序處理異步事件,可以看成前臺行爲。
2 代碼的臨界段
需要在前後關開中斷的代碼,不能被打斷的代碼
3 資源
輸入輸出設備,各種變量,結構,數組
4 共享資源
可以被多個任務使用的資源
5多任務
通過CPU在許多任務之間轉換和調度
6任務
每個任務都是一個無限循環,都可能處於五種狀態之一:休眠,就緒,運行,掛起,被中斷。UCOS中提供各種函數使任務能從一個狀態變爲另一個狀態
每個任務都有自己的CPU寄存器和棧空間以及TCB任務控制塊
7任務切換
任務切換過程是將正在運行任務的CPU寄存器全部內容保存到任務自己的棧區中,再將下一個要運行的任務的當前狀況從該任務的棧中重新裝入CPU的寄存器,並開始下一個任務的運行
8內核
負責管理各個任務,爲每個任務分配CPU時間,並負責任務間的通信
9調度
決定該輪到哪個任務運行。主要是通過優先級來決定。總是讓處於就緒態的優先級最高的任務先運行。
10不可剝奪型內核
每個任務主動放棄CPU的使用權,放棄的方法可以使用多種函數定時或者定事件的放棄。異步事件還是由中斷服務來處理。中斷處理結束之後還是回到被中斷的那個任務直到該任務主動放棄CPU的使用權。在任務級,不可剝奪型內核允許使用不可重入函數函數不必擔心被重複調用,因爲每個時刻都只有一個任務在運行。當然,該函數不能具有放棄CPU使用權的功能。
11可剝奪型內核
當系統響應時間很重要,就需要使用可剝奪型內核。最高優先級任務一旦就緒,總能得到CPU的使用權。當運行的任務使一個更高優先級的任務進入就緒態,當前任務的CPU使用權就被剝奪或掛起,更高優先級的任務獲得CPU的使用權。如果是中斷服務子程序造成的,中斷完成後被中斷的任務被掛起,執行更高優先級的任務。
在可剝奪型內核中,要謹慎使用不可重入函數。因爲低優先級的和高優先級的任務有可能都調用該函數。
總是讓就緒態的高優先級的任務先運行,中斷服務程序可以搶佔CPU
12可重入函數
可重入函數或者只使用局部變量,要麼就是使用全局變量並且對全局變量予以保護。
13時間片輪番調度法
UCOS中各個任務的優先級都是不同的。。不支持時間片輪番調度
14任務優先級
從0開始,越小的優先級越高
15靜態優先級
在執行過程中優先級是不變的
16動態優先級
優先級在運行過程中可以變化
17優先級反轉
避免優先級反轉的方法是使佔有共享資源的任務的優先級升到最高。
18任務優先級分配
19互斥條件
滿足互斥條件的一般方法:
關中斷
使用測試並置位指令,獲得共享資源時置位,只有爲零纔有權獲得共享資源
禁止作任務切換:用給任務切換上鎖然後開鎖的方法
利用信號量:信號量的操作:初始化create 掛起pend 發送post
UCOS中是等待信號量任務中優先級最高的
20死鎖
死鎖也稱爲抱死指兩個任務無限期地互相等待對方控制着的資源。
21同步
可以單向同步也可以雙向同步
22事件標誌
當某個任務要與多個事件同步時,須使用事件標誌。
23任務間通信
任務間或中斷服務與任務間的通信。有兩種途徑:通過全程變量或者發消息給另一個任務
24消息郵箱
把一則消息放到郵箱,通過內核也可以接收這則消息。
25消息隊列
用於給任務發消息。
26中斷
27中斷延遲
28中斷響應
29中斷恢復時間
對於可剝奪型內核,中斷的恢復要複雜一些。在中斷服務子程序的末尾,要調用一個由實時內核提供的函數。這個函數用於判斷中斷是否脫離了所有嵌套。如果脫離了嵌套就判斷是否中斷讓一個更高優先級的任務進入就緒。
30中斷延遲、響應及恢復
31中斷處理時間
32非屏蔽中斷
33時鐘節拍
34對存儲器的需求
使用多任務內核時內核本身需要額外的代碼空間ROM。因爲每個任務都是獨立運行的,必須給每個任務提供單獨的棧空間RAM。