久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4069|回復: 0
打印 上一主題 下一主題
收起左側

UCOS的任務就緒表表算法

[復制鏈接]
跳轉到指定樓層
樓主
ID:82781 發表于 2015-6-13 16:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一直在看UCOS,終于今天有所長進,僅僅是一點點,很微不足道的,對于我來說卻是很難很難!



操作系統建立任務后任務的優先級便建立了,這個優先級是上下文切換的參照,內核的關鍵在于擦看當前任務的優先級并總是執行優先級最高的任務,ucos不支持時間片輪轉調度,所以內部的任務必須各不相同,也是內核切換的核心,但是內核又是有什么依據來調度任務的呢,ucos里的調度是靠建立任務就緒表作為參照,所以這個任務就緒表是個重點,就緒的任務都在表里,內核只要查表就可以知道哪些任務或者說哪些優先級搞的任務已經準備好了,內核就取出優先級最高的任務開始執行,是怎樣做的呢?

首先就緒任務寫入就緒表:
      OSRdyGrp  |=OSMapTbl[prio>>3];
    OSRdyTab[prio>>3]  |=OSMapTbl[prio&0x07];
在CORE.C文件中定義
INT8U const DT_XDATA OSMapTbl[]   = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
就構成了寫入就緒表算法,
例如:任務優先級=10,則首先計算組=OSMapTbl[prio>>3]=OSMapTbl[10>>3]=OSMapTbl[1]=0x02;
                                                      計算位=OSRdyTab[1] =OSMapTbl[10&0x07]=OSMapTbl[2]=0x04;
                                                       這事位于矩陣上的10個單元置1,他的坐標分別是(4,2)點。就緒表就寫入了,
                                                       至此優先級為10的任務完成了優先級的寫就緒表。

其次刪除就緒表中的就緒任務:
if((OSRdyTab[prio>>3] )&=~OSMapTbl[prio&0x07])==0)
OSRdyGrp&=~OSMapTbl[prio>>3]  ;
例如:任務優先級=10;刪除就緒表操作
if(OSRdyTab[1]&=~0x04==0)保證OSRdyTab[1]=0;表示沒有任務進入就緒列表才可以執行下面的操作,
OSRdyGrp&=~0x04;
即矩陣的(4,2)點的值變為0;也就清了就緒表

最后是找到優先級最高的任務:
牽扯到另一個數組也在CORE.C中定義為:
INT8U const DT_XDATA OSUnMapTbl[] = {
    0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};

計算矩陣坐標
y=OSUnMapTbl[OSRdyGrp] ;
x=OSUnMapTbl[OSRdyTab[y]];
prio=(y<<3)+x;
例如:OSRdyGrp=0x06;OSRdyTab[1]=0x03;
y=OSUnMapTbl[OSRdyGrp] =1;
x=OSUnMapTbl[OSRdyTab[1]]=OSUnMapTbl[3]=0;
最高級任務=8+0=8;
表示:在就緒表組=6,表示行1和行2都有任務就緒,單是查表得行優先級最高的是1,所以令Y=1,而在這第一行里又有3個任務就緒了,在在他們里面找到優先級最高的就是第0位,所以X=0,這時候就可以找到優先級最高的點坐標(1,0)其他的都比他低,比他高的沒有就緒,所以當讓就是娶她的值為8,內核就知道了原來這么多就緒的任務當中就緒的是你小子啊,找出來了!







分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品日韩一区二区三区av动图 | 国产日韩欧美中文字幕 | 亚洲视频免费在线看 | 久久久久国产一区二区三区四区 | www.887色视频免费 | 欧美成人精品一区二区男人看 | 国产偷录视频叫床高潮对白 | 伊人网91 | 91精品久久久久久久久99蜜臂 | 色欧美片视频在线观看 | av在线免费观看网址 | xx视频在线观看 | 99精品亚洲国产精品久久不卡 | 韩日在线视频 | 中文字幕一区在线观看视频 | 91精产国品一二三区 | 久久黄视频 | 久久久91精品国产一区二区三区 | 色天堂视频 | 91在线视频一区 | 中文字幕av亚洲精品一部二部 | 丁香六月激情 | 久久精品一区二区三区四区 | 亚洲国产二区 | 国产精品一区网站 | 亚洲国产欧美在线人成 | 久久一久久 | 国产精品明星裸体写真集 | 影音先锋欧美资源 | a在线视频观看 | 99精品久久久久 | 久久久久国产一区二区三区四区 | 久久久久99 | 综合精品 | www国产亚洲精品久久网站 | 亚洲高清在线观看 | 日韩免费中文字幕 | 在线视频一区二区三区 | 国产一区二区不卡 | 精品视频一区二区在线观看 | 精品国产91亚洲一区二区三区www |