新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > μC/OS-II的內(nèi)核結(jié)構(gòu)

        μC/OS-II的內(nèi)核結(jié)構(gòu)

        作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

        了任務(wù),棧檢驗功能報告的棧使用情況將是錯誤的。如果任務(wù)一旦建立就決不會被刪除,

        而用戶初始化時,已將RAM清過零,則OS_TASK_OPT_STK_CLR不需要再定義,這可以節(jié)約程

        序執(zhí)行時間。傳遞了OS_TASK_OPT_STK_CLR將增加TaskCreateExt()函數(shù)的執(zhí)行時間,因為

        要將棧空間清零。棧容量越大,清零花的時間越長。最后一個選擇項

        OS_TASK_OPT_SAVE_FP通知TaskCreateExt(),任務(wù)要做浮點運算。如果微處理器有硬件的

        浮點協(xié)處理器,則所建立的任務(wù)在做任務(wù)調(diào)度切換時,浮點寄存器的內(nèi)容要保存。

        .OSTCBId用于存儲任務(wù)的識別碼。這個變量現(xiàn)在沒有使用,留給將來擴展用。

        .OSTCBNext 和.OSTCBPrev 用于任務(wù)控制塊OS_TCBs的雙重鏈接,該鏈表在時鐘節(jié)拍函數(shù)

        OSTimeTick()中使用,用于刷新各個任務(wù)的任務(wù)延遲變量.OSTCBDly,每個任務(wù)的任務(wù)控制

        塊OS_TCB在任務(wù)建立的時候被鏈接到鏈表中,在任務(wù)刪除的時候從鏈表中被刪除。雙重連

        接的鏈表使得任一成員都能被快速插入或刪除。

        .OSTCBEventPtr是指向事件控制塊的指針,后面的章節(jié)中會有所描述(見第6章任務(wù)間通

        訊與同步)。

        .OSTCBMsg是指向傳給任務(wù)的消息的指針。用法將在后面的章節(jié)中提到(見第6章任務(wù)間通

        訊與同步)。

        .OSTCBDly 當需要把任務(wù)延時若干時鐘節(jié)拍時要用到這個變量,或者需要把任務(wù)掛起一段

        時間以等待某事件的發(fā)生,這種等待是有超時限制的。在這種情況下,這個變量保存的是

        任務(wù)允許等待事件發(fā)生的最多時鐘節(jié)拍數(shù)。如果這個變量為0,表示任務(wù)不延時,或者表

        示等待事件發(fā)生的時間沒有限制。

        .OSTCBStat是任務(wù)的狀態(tài)字。當.OSTCBStat為0,任務(wù)進入就緒態(tài)。可以給.OSTCBStat賦

        其它的值,在文件uCOS_II.H中有關(guān)于這個值的描述。

        .OSTCBPrio是任務(wù)優(yōu)先級。高優(yōu)先級任務(wù)的.OSTCBPrio值小。也就是說,這個值越小,任

        務(wù)的優(yōu)先級越高。

        .OSTCBX,.OSTCBY,.OSTCBBitX和.OSTCBBitY 用于加速任務(wù)進入就緒態(tài)的過程或進入等

        待事件發(fā)生狀態(tài)的過程(避免在運行中去計算這些值)。這些值是在任務(wù)建立時算好的,

        或者是在改變?nèi)蝿?wù)優(yōu)先級時算出的。這些值的算法見程序清單L3.4。

        程序清單 L3.4 任務(wù)控制塊OS_TCB中幾個成員的算法

        OSTCBY=priority>>3;

        OSTCBBitY=OSMapTbl[priority>>3];

        OSTCBX=priority0x07;

        OSTCBBitX=OSMapTbl[priority0x07];

        .OSTCBDelReq是一個布爾量,用于表示該任務(wù)是否需要刪除,用法將在后面的章節(jié)中描述

        (見第4章任務(wù)管理)

        應(yīng)用程序中可以有的最多任務(wù)數(shù)(OS_MAX_TASKS)是在文件OS_CFG.H中定義的。這個

        最多任務(wù)數(shù)也是μC/OS-Ⅱ分配給用戶程序的最多任務(wù)控制塊OS_TCBs的數(shù)目。將

        OS_MAX_TASKS的數(shù)目設(shè)置為用戶應(yīng)用程序?qū)嶋H需要的任務(wù)數(shù)可以減小RAM的需求量。所有

        的任務(wù)控制塊OS_TCBs都是放在任務(wù)控制塊列表數(shù)組OSTCBTbl[]中的。請注意,μC/OS-Ⅱ

        分配給系統(tǒng)任務(wù)OS_N_SYS_TASKS若干個任務(wù)控制塊,見文件μC/OS-Ⅱ.H,供其內(nèi)部使

        用。目前,一個用于空閑任務(wù),另一個用于任務(wù)統(tǒng)計(如果OS_TASK_STAT_EN是設(shè)為

        1的)。在μC/OS-Ⅱ初始化的時候,如圖3.2所示,所有任務(wù)控制塊OS_TCBs被鏈接成單

        向空任務(wù)鏈表。當任務(wù)一旦建立,空任務(wù)控制塊指針OSTCBFreeList指向的任務(wù)控制塊便

        賦給了該任務(wù),然后OSTCBFreeList的值調(diào)整為指向下鏈表中下一個空的任務(wù)控制塊。一

        旦任務(wù)被刪除,任務(wù)控制塊就還給空任務(wù)鏈表。

        圖3.2空任務(wù)列表

        3.4 就緒表(ReadyList)

        每個任務(wù)被賦予不同的優(yōu)先級等級,從0級到最低優(yōu)先級OS_LOWEST_PR1O,包括0和S_LOWEST_PR1O在內(nèi)(見文件OS_CFG.H)。當μC/OS-Ⅱ初始化的時候,最低優(yōu)先級OS_LOWEST_PR1O總是被賦給空閑任務(wù)idletask。注意,最多任務(wù)數(shù)目OS_MAX_TASKS和最低優(yōu)先級數(shù)是沒有關(guān)系的。用戶應(yīng)用程序可以只有10個任務(wù),而仍然可以有32個優(yōu)先級的級別(如果用戶將最低優(yōu)先級數(shù)設(shè)為31的話)。

        每個任務(wù)的就緒態(tài)標志都放入就緒表中的,就緒表中有兩個變量OSRedyGrp和OSRdyTbl[]。在OSRdyGrp中,任務(wù)按優(yōu)先級分組,8個任務(wù)為一組。OSRdyGrp中的每一位表示8組任務(wù)中每一組中是否有進入就緒態(tài)的任務(wù)。任務(wù)進入就緒態(tài)時,就緒表OSRdyTbl[]中的相應(yīng)元素的相應(yīng)位也置位。就緒表OSRdyTbl[]數(shù)組的大小取決于OS_LOWEST_PR1O(見文件OS_CFG.H)。當用戶的應(yīng)用程序中任務(wù)數(shù)目比較少時,減少OS_LOWEST_PR1O的值可以降低μC/OS-Ⅱ?qū)AM(數(shù)據(jù)空間)的需求量。

        為確定下次該哪個優(yōu)先級的任務(wù)運行了,內(nèi)核調(diào)度器總是將OS_LOWEST_PR1O在就緒表中相應(yīng)字節(jié)的相應(yīng)位置1。OSRdyGrp和OSRdyTbl[]之間的關(guān)系見圖3.3,是按以下規(guī)則給出的:

        當OSRdyTbl[0]中的任何一位是1時,OSRdyGrp的第0位置1,

        當OSRdyTbl[1]中的任何一位是1時,OSRdyGrp的第1位置1,

        當OSRdyTbl[2]中的任何一位是1時,OSRdyGrp的第2位置1,

        當OSRdyTbl[3]中的任何一位是1時,OSRdyGrp的第3位置1,

        當OSRdyTbl[4]中的任何一位是1時,OSRdyGrp的第4位置1,

        當OSRdyTbl[5]中的任何一位是1時,OSRdyGrp的第5位置1,

        當OSRdyTbl[6]中的任何一位是1時,OSRdyGrp的第6位置1,

        當OSRdyTbl[7]中的任何一位是1時,OSRdyGrp的第7位置1,

        程序清單3.5中的代碼用于將任務(wù)放入就緒表。Prio是任務(wù)的優(yōu)先級。

        程序清單L3.5使任務(wù)進入就緒態(tài)

        OSRdyGrp|=OSMapTbl[prio>>3];

        OSRdyTbl[prio>>3]|=OSMapTbl[prio0x07];

        表T3.1OSMapTbl[]的值



        關(guān)鍵詞:

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 石门县| 灵丘县| 宝应县| 洛宁县| 新野县| 屯留县| 衡阳县| 神木县| 陈巴尔虎旗| 华池县| 清原| 宁晋县| 镇平县| 拉孜县| 盈江县| 吉木乃县| 迭部县| 晴隆县| 海口市| 襄樊市| 林口县| 孝义市| 宜君县| 铁力市| 高台县| 平原县| 通州区| 南阳市| 金昌市| 长丰县| 牟定县| 北京市| 同江市| 大渡口区| 晋城| 崇礼县| 鞍山市| 富裕县| 镇赉县| 司法| 甘德县|