新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > FreeRTOS嵌入式實時操作系統介紹

        FreeRTOS嵌入式實時操作系統介紹

        作者: 時間:2012-08-11 來源:網絡 收藏

        1 功能

        本文引用地址:http://www.104case.com/article/148620.htm

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

          FreeRTOS的內核可根據用戶需要設置為可剝奪型內核或不可剝奪型內核。當FreeRTOS被設置為可剝奪型內核時,處于就緒態的高優先級任務能剝奪低優先級任務的CPU使用權,這樣可保證系統滿足性的要求;當FreeRTOS被設置為不可剝奪型內核時,處于就緒態的高優先級任務只有等當前運行任務主動釋放CPU的使用權后才能獲得運行,這樣可提高CPU的運行效率。

          2 FreeRTOS的原理與實現

          2. 1任務調度機制的實現

          任務調度機制是操作系統的一個重要概念,也是其核心技術。對于可剝奪型內核,優先級高的任務一旦就緒就能剝奪優先級較低任務的CPU使用權,提高了系統的響應能力。不同于μC/OS-II,FreeRTOS對系統任務的數量沒有限制,既支持優先級調度算法也支持輪換調度算法,因此FreeRTOS采用雙向鏈表而不是采用查任務就緒表的方法來進行任務調度。系統定義的鏈表和鏈表節點數據結構如下所示:

          


          FreeRTOS定義就緒任務鏈表數組為xList pxReady—TasksLists[portMAX_PRIORITIES]。其中portMAX_PRIORITIES為系統定義的最大優先級。若想使優先級為n的任務進入就緒態,需要把此任務對應的TCB中的結點xGenericListltem插入到鏈表pxReadyTasksLiStS[n]中,還要把xGenericListItem中的pvContainer指向pxReadyTasksLists[n]方可實現。

          當進行任務調度時,調度算法首先實現優先級調度。系統按照優先級從高到低的順序從就緒任務鏈表數組中尋找usNumberOfItems第一個不為0的優先級,此優先級即為當前最高就緒優先級,據此實現優先級調度。若此優先級下只有一個就緒任務,則此就緒任務進入運行態;若此優先級下有多個就緒任務,則需采用輪換調度算法實現多任務輪流執行。

          若在優先級n下執行輪換調度算法,系統先通過執行(pxReadyTasksLists[n])→pxIndex=( pxReadyTasks-Lists[n ]) → pxlndex→pxNext語句得到當前結點所指向的下一個結點,再通過此結點的pvOwner指針得到對應的任務控制塊,最后使此任務控制塊對應的任務進入運行態。由此可見,在FreeRTOS中,相同優先級任務之間的切換時間為一個時鐘節拍周期。

          以圖1為例,設系統的最大任務數為pottMAX_PRIORITIES,在某一時刻進行任務調度時,得到pxReadyTasksLists[ i].usNumberOfItems=O(i=2...portMAX_PRIORITIES)以及pxReadyTasksLists。usNumberOfItems=3。由此內核可知當前最高就緒優先級為l,且此優先級下已有三個任務已進入就緒態.由于最高就緒優先級下有多個就緒任務,系統需執行輪換調度算法實現任務切換;通過指針pxlndex可知任務l為當前任務,而任務l的pxNext結點指向任務2,因此系統把pxIndex指向任務2并執行任務2來實現任務調度。當下一個時鐘節拍到來時,若最高就緒優先級仍為1,由圖可見,系統會把pxIndex指向任務3并執行任務3。

          

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

        linux相關文章:linux教程



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 同德县| 肥城市| 东莞市| 大姚县| 太康县| 芮城县| 旬阳县| 本溪市| 当阳市| 大悟县| 株洲县| 新宁县| 泽库县| 达孜县| 布拖县| 博湖县| 乌什县| 贡嘎县| 汶川县| 罗山县| 阿巴嘎旗| 乌兰县| 广汉市| 临颍县| 绥化市| 和平区| 石棉县| 始兴县| 时尚| 玉环县| 宝坻区| 胶南市| 盐池县| 黑河市| 凭祥市| 蓝田县| 翼城县| 桐城市| 弋阳县| 德保县| 海原县|