<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > FreeRTOS嵌入式實(shí)時(shí)操作系統開(kāi)發(fā)介紹

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

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

1 功能

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

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

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

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

  2. 1任務(wù)調度機制的實(shí)現

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

  


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

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

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

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

  

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

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>