在嵌入式領域中,嵌入式(主要裝在嵌入式工控機)實時操作系統得到了廣泛的運用。采用嵌入式實時操作系統(RTOS)可以合理地、有效地利用CPU的資源,簡化應用軟件的設計,減少系統開發時間,更好地完善系統的實時性和可靠性。由于RTOS需占用一定的系統資源(尤其是RAM資源),只有μC/OS-II、embOS、salvo、FreeRTOS等少數實時操作系統能在小RAM單片機上運行。相對于C/OS-II、embOS等商業操作系統,FreeRTOS操作系統是免費的操作系統,具有源碼公開、可移植、可裁減、調度策略的特點,可以方便地移植到各種單片機上運行,其新版本為2.6版。
1 FreeRTOS操作系統功能
作為一個輕量級的操作系統,FreeRTOS提供的功能包括:任務管理、時間管理、信號量、消息隊列、內存管理、記錄功能等,可基本滿足較小系統的需要。FreeRTOS內核支持優先級調度算法
,每個任務可根據重要程度的不同被賦予一定的優先級,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中,相同優先級任務之間的切換時間為一個時鐘節拍周期。