色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FreeRTOS嵌入式實(shí)時(shí)操作系統(tǒng)開發(fā)介紹

          FreeRTOS嵌入式實(shí)時(shí)操作系統(tǒng)開發(fā)介紹

          作者: 時(shí)間:2012-07-02 來源:網(wǎng)絡(luò) 收藏

          1 功能

          本文引用地址:http://cafeforensic.com/article/148818.htm

            作為一個(gè)輕量級的,提供的功能包括:任務(wù)管理、時(shí)間管理、信號量、消息隊(duì)列、內(nèi)存管理、記錄功能等,可基本滿足較小系統(tǒng)的需要。內(nèi)核支持優(yōu)先級調(diào)度算法,每個(gè)任務(wù)可根據(jù)重要程度的不同被賦予一定的優(yōu)先級,CPU總是讓處于就緒態(tài)的、優(yōu)先級最高的任務(wù)先運(yùn)行。FreeRT0S內(nèi)核同時(shí)支持輪換調(diào)度算法,系統(tǒng)允許不同的任務(wù)使用相同的優(yōu)先級,在沒有更高優(yōu)先級任務(wù)就緒的情況下,同一優(yōu)先級的任務(wù)共享CPU的使用時(shí)間。

            FreeRTOS的內(nèi)核可根據(jù)用戶需要設(shè)置為可剝奪型內(nèi)核或不可剝奪型內(nèi)核。當(dāng)FreeRTOS被設(shè)置為可剝奪型內(nèi)核時(shí),處于就緒態(tài)的高優(yōu)先級任務(wù)能剝奪低優(yōu)先級任務(wù)的CPU使用權(quán),這樣可保證系統(tǒng)滿足性的要求;當(dāng)FreeRTOS被設(shè)置為不可剝奪型內(nèi)核時(shí),處于就緒態(tài)的高優(yōu)先級任務(wù)只有等當(dāng)前運(yùn)行任務(wù)主動釋放CPU的使用權(quán)后才能獲得運(yùn)行,這樣可提高CPU的運(yùn)行效率。

            2 FreeRTOS的原理與實(shí)現(xiàn)

            2. 1任務(wù)調(diào)度機(jī)制的實(shí)現(xiàn)

            任務(wù)調(diào)度機(jī)制是操作系統(tǒng)的一個(gè)重要概念,也是其核心技術(shù)。對于可剝奪型內(nèi)核,優(yōu)先級高的任務(wù)一旦就緒就能剝奪優(yōu)先級較低任務(wù)的CPU使用權(quán),提高了系統(tǒng)的響應(yīng)能力。不同于μC/OS-II,F(xiàn)reeRTOS對系統(tǒng)任務(wù)的數(shù)量沒有限制,既支持優(yōu)先級調(diào)度算法也支持輪換調(diào)度算法,因此FreeRTOS采用雙向鏈表而不是采用查任務(wù)就緒表的方法來進(jìn)行任務(wù)調(diào)度。系統(tǒng)定義的鏈表和鏈表節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)如下所示:

            


            FreeRTOS定義就緒任務(wù)鏈表數(shù)組為xList pxReady—TasksLists[portMAX_PRIORITIES]。其中portMAX_PRIORITIES為系統(tǒng)定義的最大優(yōu)先級。若想使優(yōu)先級為n的任務(wù)進(jìn)入就緒態(tài),需要把此任務(wù)對應(yīng)的TCB中的結(jié)點(diǎn)xGenericListltem插入到鏈表pxReadyTasksLiStS[n]中,還要把xGenericListItem中的pvContainer指向pxReadyTasksLists[n]方可實(shí)現(xiàn)。

            當(dāng)進(jìn)行任務(wù)調(diào)度時(shí),調(diào)度算法首先實(shí)現(xiàn)優(yōu)先級調(diào)度。系統(tǒng)按照優(yōu)先級從高到低的順序從就緒任務(wù)鏈表數(shù)組中尋找usNumberOfItems第一個(gè)不為0的優(yōu)先級,此優(yōu)先級即為當(dāng)前最高就緒優(yōu)先級,據(jù)此實(shí)現(xiàn)優(yōu)先級調(diào)度。若此優(yōu)先級下只有一個(gè)就緒任務(wù),則此就緒任務(wù)進(jìn)入運(yùn)行態(tài);若此優(yōu)先級下有多個(gè)就緒任務(wù),則需采用輪換調(diào)度算法實(shí)現(xiàn)多任務(wù)輪流執(zhí)行。

            若在優(yōu)先級n下執(zhí)行輪換調(diào)度算法,系統(tǒng)先通過執(zhí)行(pxReadyTasksLists[n])→pxIndex=( pxReadyTasks-Lists[n ]) → pxlndex→pxNext語句得到當(dāng)前結(jié)點(diǎn)所指向的下一個(gè)結(jié)點(diǎn),再通過此結(jié)點(diǎn)的pvOwner指針得到對應(yīng)的任務(wù)控制塊,最后使此任務(wù)控制塊對應(yīng)的任務(wù)進(jìn)入運(yùn)行態(tài)。由此可見,在FreeRTOS中,相同優(yōu)先級任務(wù)之間的切換時(shí)間為一個(gè)時(shí)鐘節(jié)拍周期。

            以圖1為例,設(shè)系統(tǒng)的最大任務(wù)數(shù)為pottMAX_PRIORITIES,在某一時(shí)刻進(jìn)行任務(wù)調(diào)度時(shí),得到pxReadyTasksLists[ i].usNumberOfItems=O(i=2...portMAX_PRIORITIES)以及pxReadyTasksLists。usNumberOfItems=3。由此內(nèi)核可知當(dāng)前最高就緒優(yōu)先級為l,且此優(yōu)先級下已有三個(gè)任務(wù)已進(jìn)入就緒態(tài).由于最高就緒優(yōu)先級下有多個(gè)就緒任務(wù),系統(tǒng)需執(zhí)行輪換調(diào)度算法實(shí)現(xiàn)任務(wù)切換;通過指針pxlndex可知任務(wù)l為當(dāng)前任務(wù),而任務(wù)l的pxNext結(jié)點(diǎn)指向任務(wù)2,因此系統(tǒng)把pxIndex指向任務(wù)2并執(zhí)行任務(wù)2來實(shí)現(xiàn)任務(wù)調(diào)度。當(dāng)下一個(gè)時(shí)鐘節(jié)拍到來時(shí),若最高就緒優(yōu)先級仍為1,由圖可見,系統(tǒng)會把pxIndex指向任務(wù)3并執(zhí)行任務(wù)3。

            

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉