<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2012-07-02 來源:網絡 收藏

          1 功能

          本文引用地址:http://www.ex-cimer.com/article/148818.htm

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

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

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

            2. 1任務調度機制的實現(xiàn)

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

            


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

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

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

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

            

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

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();