建立使用者任務
開啟任務排程
執行第乙個任務->系統tick中斷->系統時鐘處理->搜尋最高優先順序任務->如果當前任務不是最高優先順序任務,則觸發一次任務排程->否則進行正常的中斷返回
在明白了uc/os - ii的大致流程後,有點迷茫了,大概有這樣幾個困惑:
對上述困惑,也有了以下的一些分析:
為特定的處理器編寫特定**的過程成為「移植」1。
在閱讀c語言教程時經常會碰到臨界段這個概念,從字面上一直不好理解。查閱了英文資料,臨界段的英文原文叫做critical section或者critical region,意思是特別重要的、不能被中斷打斷執行的**段。所以一般把關中斷的操作叫做進入臨界段,開中斷的操作叫做退出臨界段2。
上下文切換一詞在作業系統中經常提到,對應英文為context switches,本質上是指cpu暫存器內容的切換,實際效果對應於系統執行任務的切換3。
作為系統設計的一條原則,cpu的利用率應該小於60%-70%4。
作業系統中,任務通常是無限迴圈5,形如:
void yourtask(void *pdata)
}
在uc/os - ii中,使任務進入就緒狀態的**如下:
osrdygrp |= osmaptbl[prio>>3];
osrdytbl[prio>>3] |= osmaptbl[prio&0x07];
其中,osmaptbl
陣列內容如下:
下標位掩碼(二進位制)
000000001
100000010
200000100
300001000
400010000
500100000
601000000
710000000
而使得任務脫離就緒狀態的**如下:
if ((osrdytbl[prio>>3] &= ~osmaptbl[prio&0x07]) == 0)
在獲取當前優先順序最高的任務時,為了保證系統的實時性,即不管最高優先順序任務在哪,系統查詢到最高優先順序任務所花費的時間要固定。因此不能採用常規的迴圈查詢的方法,此處,uc/os - ii採用了直接查表的方法,每次都能以相同的時間獲取最高優先順序任務。原理6如下:
1. 先搞個例子感受下
某一時刻osrdygrp
的值為0b00010001
,而此時osrdytbl
中的值為:
osrdytbl[0] = 0b00000110;
osrdytbl[4] = 0b00010000;
則時刻系統中就緒任務優先順序如下:
0 * 8 + 1 = 1;
0 * 8 + 2 = 2;
4 * 8 + 4 = 36;
即系統中的優先順序為1,2,36
2. 分析
在上述例子中,假設osrdygrp
二進位制表示下最低位為1的位置為y
,osrdytbl[y]
最低位為1的位置為x
,則系統中最高優先順序為:
prio = y * 8 + x;
因此,要想求得系統最高優先順序任務,只需把0x00 - 0xff
(osrdygrp
和osrdytbl[i]
都是8位二進位制數,共有0x00 - 0xff
種二進位制表示)二進位制表示的最低位為1的位置列成表就行:
int8u const osunmaptbl[256] =
;
最終,求最高優先順序任務**如下:
y = osunmaptbl[osrdygrp];
x = osunmaptbl[osrdytbl[y]];
prio = y * 8 + x;
看懂乙個作業系統,有以下好處:
當中斷程式可能會改變一段**中用到的某些變數的值的時候,就需要關中斷來保證**執行的正確性。執行完這段**後要立即開中斷保證系統對非同步事件的處理速度(實時性)。上述的那段**叫做臨界段。
感覺要自己寫出彙編部分的**還是比較困難
邵貝貝《嵌入式實時作業系統ucos-ii(第2版)》1.04 範例4 ↩
邵貝貝《嵌入式實時作業系統ucos-ii(第2版)》2.01 **的臨界段 ↩
邵貝貝《嵌入式實時作業系統ucos-ii(第2版)》2.06 任務切換 ↩
邵貝貝《嵌入式實時作業系統ucos-ii(第2版)》2.17 任務優先順序分配 ↩
邵貝貝《嵌入式實時作業系統ucos-ii(第2版)》3.01 任務 ↩
解讀ucos中優先順序判定表osunmaptbl原理
↩
uCOSII學習使用記錄
最近學習和使用ucosii,在這裡做一下筆記 串列埠中斷 中斷處理前新增 os enter critical osintnesting os exit critical 退出中斷後 osintexit 有人移植了2.86或者2.88版本後,發現跑的時間長了,會出現某些任務跑步了了,是需要設定將中斷改...
ucosII學習筆記
以前很少接觸過嵌入式作業系統,這次因為要嘗試研究ucosii這個嵌入式作業系統,看看自己能不能盡快的會使用它,查詢了不少資料。ucosii學習筆記。以下是nathan.yu的 ucosii學習筆記 整理的不錯,自己先借鑑。ucosii學習筆記 by nathan.yu ucos ii特性 l 可剝奪...
UC OS II學習小結
由於公司最近的產品都是以uc os ii作為系統平台,雖然自我感覺uc os與linux難易程度相差太大,所以意願上不相去弄uc os,感覺好像落伍來了一樣,不過有些事情是沒辦法的,公司用的這個平台,你不去了解,就什麼都不會做了。經過了乙個多月的學習,忽然感覺到uc os的魅力所在,首先是簡單易學,...