網(wǎng)站做二級站全網(wǎng)網(wǎng)絡(luò)營銷
STM32F1+HAL庫+FreeTOTS學習1——FreeRTOS入門
- 裸機開發(fā)與操作系統(tǒng)
- 嵌入式操作系統(tǒng)簡介
- FreeRTOS簡介
- FreeRTOS的幾個重要概念
- 任務(wù)調(diào)度器
- 任務(wù)狀態(tài)
- 狀態(tài)列表
裸機開發(fā)與操作系統(tǒng)
在以往的嵌入式學習中,我們最常用的就是裸機開發(fā),所謂裸機開發(fā)就是指在沒有操作系統(tǒng)支持的情況下,直接使用裸機硬件的一種開發(fā)方式。在裸機開發(fā)中,我們往往會定義一個循環(huán),比如while(1)來控制單片機循環(huán)內(nèi)的代碼,實現(xiàn)特定的功能;但是這樣的方法存在一些問題:單片機始終受困于循環(huán)之中,雖說有各種各樣的中斷,讓裸機開發(fā)能夠應(yīng)對一些較為復雜的場合,但是單片機始終無法擺脫單任務(wù),簡單應(yīng)用的場合。
而操作系統(tǒng)的出現(xiàn),則是準確的解決了裸機開發(fā)的痛點。最顯著的就是讓單片機不再局限于單任務(wù),能夠同時運行多個任務(wù),處理更為復雜的任務(wù),實現(xiàn)單片機芯片性能的釋放。
以上為個人總結(jié)的出,操作系統(tǒng)具體介紹看下面:
嵌入式操作系統(tǒng)簡介
嵌入式操作系統(tǒng)(Embedded Operating System)是專門設(shè)計用于嵌入式系統(tǒng)的操作系統(tǒng),它通常運行在資源有限、功耗低、特定功能的硬件平臺上,如微控制器、傳感器節(jié)點、嵌入式設(shè)備等。與桌面計算機或服務(wù)器操作系統(tǒng)不同,嵌入式操作系統(tǒng)需要考慮更多的實時性、穩(wěn)定性和功耗優(yōu)化。
嵌入式操作系統(tǒng)的主要特點和功能包括:
-
實時性:對于許多嵌入式應(yīng)用來說,時間的準確性和響應(yīng)速度至關(guān)重要。因此,嵌入式操作系統(tǒng)通常提供實時調(diào)度器,能夠確保任務(wù)在指定的時間內(nèi)完成。
-
資源管理:由于嵌入式系統(tǒng)資源有限,嵌入式操作系統(tǒng)需要有效地管理內(nèi)存、處理器時間、外設(shè)等資源。它們提供了資源分配和調(diào)度的機制,以便多個任務(wù)能夠協(xié)同工作而不互相干擾。
-
低功耗設(shè)計:嵌入式操作系統(tǒng)通常優(yōu)化了功耗管理,能夠有效控制設(shè)備在不同運行狀態(tài)下的能耗,延長電池壽命或者減少能源消耗。
-
實時操作:針對需要處理實時數(shù)據(jù)流或事件的應(yīng)用,嵌入式操作系統(tǒng)能夠確保及時響應(yīng)和處理,如控制系統(tǒng)、傳感器數(shù)據(jù)采集等。
-
驅(qū)動程序支持:嵌入式操作系統(tǒng)提供了通用的設(shè)備驅(qū)動程序接口,簡化了與硬件的交互,開發(fā)者可以通過API調(diào)用來訪問和控制各種硬件設(shè)備。
-
任務(wù)調(diào)度:多任務(wù)管理是嵌入式操作系統(tǒng)的一個重要功能。它能夠管理多個任務(wù)的優(yōu)先級、調(diào)度順序以及任務(wù)之間的通信和同步。
-
通信支持:許多嵌入式系統(tǒng)需要與外部設(shè)備或網(wǎng)絡(luò)進行通信。嵌入式操作系統(tǒng)提供了通信協(xié)議和接口支持,如串口通信、網(wǎng)絡(luò)協(xié)議棧等。
FreeRTOS是嵌入式操作系統(tǒng)的一種,也是我們要學習的內(nèi)容:
FreeRTOS簡介
FreeRTOS(Real-Time Operating System)是一個開源的實時操作系統(tǒng)內(nèi)核,專為嵌入式系統(tǒng)設(shè)計。它提供了輕量級的多任務(wù)管理、任務(wù)調(diào)度、定時器、信號量、消息隊列等功能,使得開發(fā)者能夠在嵌入式設(shè)備上輕松實現(xiàn)復雜的應(yīng)用程序。
主要特點:
-
開源和免費:FreeRTOS是開源項目,采用MIT許可證,可以免費用于商業(yè)和個人項目。這使得開發(fā)者可以自由地使用、修改和分發(fā)它,同時享受開源社區(qū)的支持和貢獻。
-
輕量級和高效:FreeRTOS的內(nèi)核設(shè)計非常精簡,占用資源少,適合運行在內(nèi)存和處理器能力有限的嵌入式設(shè)備上。其任務(wù)切換速度快,響應(yīng)時間短,適用于對實時性要求高的應(yīng)用場景。
-
多任務(wù)管理:FreeRTOS支持多任務(wù)管理,可以同時運行多個任務(wù),每個任務(wù)有獨立的任務(wù)優(yōu)先級。開發(fā)者可以利用任務(wù)調(diào)度器(scheduler)來控制任務(wù)執(zhí)行的順序和時間片分配,實現(xiàn)復雜的并發(fā)控制和協(xié)同工作。
-
實時調(diào)度器:內(nèi)置的實時調(diào)度器確保任務(wù)能按照優(yōu)先級和預定時間執(zhí)行,滿足實時數(shù)據(jù)處理和響應(yīng)的需求。這使得FreeRTOS特別適合需要及時處理事件或數(shù)據(jù)的應(yīng)用,如工業(yè)控制、汽車電子等領(lǐng)域。
-
資源管理:FreeRTOS提供了豐富的資源管理功能,包括內(nèi)存管理、任務(wù)間通信(如信號量、消息隊列、郵箱等)、定時器和事件控制等。這些功能能夠有效地管理和分配設(shè)備的有限資源,提高系統(tǒng)的效率和穩(wěn)定性。
-
可移植性:FreeRTOS支持多種架構(gòu)和開發(fā)板,如ARM、AVR、PIC等,以及多種編譯器,如GCC、Keil、IAR等。這種廣泛的支持使得開發(fā)者可以輕松在不同硬件平臺上移植和使用FreeRTOS。
-
社區(qū)支持和生態(tài)系統(tǒng):FreeRTOS擁有活躍的開發(fā)社區(qū)和生態(tài)系統(tǒng),提供了豐富的文檔、示例代碼和技術(shù)支持。開發(fā)者可以通過社區(qū)獲取技術(shù)支持、交流經(jīng)驗,加速開發(fā)過程。
總結(jié)下來就是:免費開源、簡單好用、可移植性高、可裁剪、輕量級、使用廣泛。
FreeRTOS的幾個重要概念
任務(wù)調(diào)度器
調(diào)度器就是使用相關(guān)的調(diào)度算法來決定當前需要執(zhí)行的哪個任務(wù),FreeRTOS 一共支持三種任務(wù)調(diào)度方式:
- 搶占式調(diào)度:主要是針對優(yōu)先級不同的任務(wù),每個任務(wù)都有一個優(yōu)先級,優(yōu)先級高的任務(wù)可以搶占優(yōu)先級低的任務(wù)。
- 高優(yōu)先級任務(wù),優(yōu)先執(zhí)行。
- 高優(yōu)先級任務(wù)不停止(或者說是阻塞:任務(wù)內(nèi)部在延時或者等待系統(tǒng)信號量等操作叫阻塞),低優(yōu)先級任務(wù)無法執(zhí)行。
- 被搶占的任務(wù)會進入就緒狀態(tài)。
- 時間片調(diào)度:主要針對優(yōu)先級相同的任務(wù),當多個任務(wù)的優(yōu)先級相同時, 任務(wù)調(diào)度器會在每一次系統(tǒng)時鐘節(jié)拍到的時候切換任務(wù)。
- 同等優(yōu)先級任務(wù)輪流地享有相同的 CPU 時間(可設(shè)置), 叫時間片,在FreeRTOS中,一個時間片就等于SysTick 中斷周期
- 同等優(yōu)先級任務(wù),輪流執(zhí)行;時間片流轉(zhuǎn)
- 一個時間片大小,取決為滴答定時器中斷周期
- 當一個任務(wù)進入阻塞,但是時間片還沒用完時,會直接進入下一個任務(wù),且下一個任務(wù)的時間片長短不變。
- 協(xié)程式調(diào)度:當前執(zhí)行任務(wù)將會一直運行,同時高優(yōu)先級的任務(wù)不會搶占低優(yōu)先級任務(wù),FreeRTOS現(xiàn)在雖然還支持,但是官方已經(jīng)表示不再更新協(xié)程式調(diào)度,基本上不使用了。
任務(wù)狀態(tài)
在FreeRTOS中任務(wù)一共有以下四種狀態(tài):
- 運行態(tài):正在執(zhí)行的任務(wù)處于運行態(tài),在STM32中,同一時刻只有一個任務(wù)處于運行態(tài),之所以說FreeRTOS能夠?qū)崿F(xiàn)多任務(wù),是因為單片機在很短時間內(nèi)依次執(zhí)行多個任務(wù),由于一個時間片間隔很短,導致好像同時在運行多個任務(wù)。
- 就緒態(tài):表示該任務(wù)已經(jīng)可以被執(zhí)行,但是還沒輪到它,處于就緒態(tài)
- 阻塞態(tài):如果一個任務(wù)因延時或等待外部事件發(fā)生,那么這個任務(wù)就處于阻塞態(tài)
- 掛起態(tài):類似暫停,調(diào)用函數(shù) vTaskSuspend() 進入掛起態(tài),需要調(diào)用解掛函數(shù)vTaskResume()才可以進入就緒態(tài)
只有就緒態(tài)的任務(wù)可以變成運行態(tài)!!!
狀態(tài)列表
除了運行態(tài)之外,其他狀態(tài)的任務(wù)都有一個任務(wù)列表
- 就緒列表:pxReadyTasksLists[x] ,X表示優(yōu)先級
- 阻塞列表:pxDelayedTaskList
- 掛起列表:xSuspendedTaskList
調(diào)度器總是在所有處于就緒列表的任務(wù)中,選擇具有最高優(yōu)先級的任務(wù)來執(zhí)行 ,當所有任務(wù)處于同一個優(yōu)先級時,會都在同一個就緒列表上