uCOS優先順序與任務編號計算之解析

2021-05-27 11:16:04 字數 1331 閱讀 5181

初開兩三遍ucos優先順序與任務編號

。)os_ext  int8u             osrdygrp;           /* ready list group                         */

os_ext  int8u             osrdytbl[8];       /* table of tasks which are ready to run    */

int8u  const  osunmaptbl[256] = ;

解釋-1

如果0~7之間任何乙個任務就緒,osrdygrp的第0位置1。

如果8~15之間任何乙個任務就緒,osrdygrp的第1位置1。

......(依次類推)

解釋-2

osrdytbl[0] 的8位對應於任務#0~7, 如果第0位是1表明任務#0就緒;第1位是1表明任務#1就緒......

osrdytbl[1] 的8位對應於任務#8~15, 如果第0位是1表明任務#8就緒;第1位是1表明任務#9就緒.....

舉例:

假設任務#25號就緒,那將它加入就緒表的**是(b表示二進位制):

y = (25>>3);     // 0x3

osrdygrp |= 1 osrdytbl[(25>>3)]  |= 1 《把任務移出就緒隊立做相應的反操作,只是當osrdytbl[n]為0時,要把osrdygrp 第n位置0。

如何找最高優先順序任務:

假設現在25,27,32號任務就緒,那

osrdygrp    == 00011000b. 

osrdytbl[3] == 00001010b;

osrdytbl[4] == 00000001b;

顯然我們要求出osrdygrp 從右向左第乙個1的位置, 應當是3。你可以通過移位實現,但如果有一張表,一查便知就快多了。於是有

y = osunmaptbl[osrdygrp] ;// osunmaptbl[00011000b] == osunmaptbl[24] == 3

同理,求出osrdytbl[3]  從右向左第乙個1的位置, 應當是1。

x=osunmaptbl[ osrdytbl [y] ];//osunmaptbl[00001010b] == osunmaptbl[10] ==1

有了x,y再求優先順序用很容易了。

priority = y * 8 + x;

再從優先順序即可找到tcb!!!

ucos 四 優先順序

define os lowest prio 7 定義最小優先順序 小於63 define os stat prio os lowest prio 1 統計任務 可選 define os idle prio os lowest prio 空閒任務 必須 優先順序最低 osinit 呼叫如下 os in...

uC OS優先順序反轉及解決

1 uc os ii的執行機制 在嵌入式系統的應用中,實時性是乙個重要的指標,而優先順序翻轉是影響系統實時性的重要問題。本文著重分析優先順序翻轉問題的產生和影響,以及在uc os ii中的解決方案。uc os ii採用基於固定優先順序的佔先式排程方式,是乙個實時 多工的作業系統。系統中的每個任務具有...

Ucos作業系統任務優先順序分配原則

ucos是乙個可剝奪性核心的作業系統。所以每乙個任務都必須有乙個優先順序。ucos作業系統中任務的優先順序使用乙個8位整型資料來表示的。比如我們的0,1,2,3這些數,ucos任務優先順序的取值範圍為 0 os lowest prio之間,數字越小,優先順序越大。靜態優先順序 這個優先順序被分配以後...