RTOS 基礎(chǔ)概念
想象一下,你是一個忙碌的廚師,在廚房里同時要完成煎牛排和煮意大利面兩項任務(wù)。
1.傳統(tǒng)單線程模式(沒有RTOS)
如果你只能按順序一項一項地做,就會是這樣的過程:
- 先煎一會兒牛排
- 然后去看看意大利面煮得怎么樣
- 再回來煎牛排
如果煎牛排的過程比較復(fù)雜,需要頻繁翻面和控制火候,那么意大利面就可能會煮過頭。反之,如果一直盯著意大利面,牛排就可能煎糊了。這種方式就類似于傳統(tǒng)的單片機開發(fā),沒有使用操作系統(tǒng),任務(wù)之間相互影響,效率較低。
用代碼來表示就是:
2.使用 RTOS 的多任務(wù)模式
當(dāng)引入 RTOS 后,就可以 “同時” 進行多項任務(wù)。你可以這樣安排:
- 啟動一個 “煎牛排任務(wù)”,讓它自己在那里煎著
- 同時啟動一個 “煮意大利面任務(wù)”,讓它也自己煮著
- 你只需要在適當(dāng)?shù)臅r候去查看一下每個任務(wù)的進度,比如每隔一會兒去給牛排翻個面,或者看看意大利面有沒有煮好
這樣,牛排和意大利面都能在合適的時間完成,而且不會相互干擾。這就是 RTOS 的基本概念,它可以讓單片機同時處理多個任務(wù),提高系統(tǒng)的效率和實時性。
RTOS 的全稱是 Real-time operating system,即實時操作系統(tǒng)。與我們?nèi)粘J褂玫?Windows 等通用操作系統(tǒng)不同,RTOS 更注重實時性,能夠確保任務(wù)在規(guī)定的時間內(nèi)完成。例如,在一個工業(yè)控制系統(tǒng)中,如果某個傳感器的數(shù)據(jù)采集任務(wù)不能及時完成,可能會導(dǎo)致整個系統(tǒng)的失控。
下面是一個簡單的 RTOS 程序示例,用 C 語言編寫:
在這個示例中,我們創(chuàng)建了兩個任務(wù):Task_FrySteak 和 Task_CookPasta。每個任務(wù)都有自己的獨立運行邏輯,通過 vTaskDelay 函數(shù)來控制任務(wù)的執(zhí)行時間間隔。xTaskCreate 函數(shù)用于創(chuàng)建任務(wù),vTaskStartScheduler 函數(shù)用于啟動任務(wù)調(diào)度器,開始調(diào)度各個任務(wù)的執(zhí)行。
FreeRTOS 簡介
為什么選擇 FreeRTOS
在眾多的 RTOS 中,F(xiàn)reeRTOS 是一個非常受歡迎的選擇,它有以下幾方面優(yōu)點:
- 開源免費:FreeRTOS 是開源的,任何人都可以免費使用和修改,這對于降低開發(fā)成本非常有幫助。
- 輕量級:它的內(nèi)核非常小巧,占用的資源很少,適合在資源有限的單片機上運行。
- 實時性好:FreeRTOS 提供了高效的任務(wù)調(diào)度算法,能夠確保任務(wù)在規(guī)定的時間內(nèi)完成,滿足實時性要求。
- 易于使用:FreeRTOS 提供了豐富的 API 函數(shù),易于學(xué)習(xí)和使用。同時,它還支持多種硬件平臺,包括 ARM、RISC-V 等常見的架構(gòu)。
FreeRTOS 的架構(gòu)
FreeRTOS 的架構(gòu)可以分為以下幾個層次:
1.硬件抽象層(HAL)
這一層負責(zé)與硬件進行交互,包括處理器、內(nèi)存、外設(shè)等。它提供了一些基本的函數(shù),如中斷處理、時鐘管理等,使得 FreeRTOS 能夠在不同的硬件平臺上運行。
2.內(nèi)核層
這是 FreeRTOS 的核心部分,包括任務(wù)調(diào)度器、內(nèi)存管理、信號量、互斥量等組件。任務(wù)調(diào)度器負責(zé)決定哪個任務(wù)應(yīng)該在當(dāng)前時刻運行,內(nèi)存管理組件負責(zé)分配和釋放內(nèi)存,信號量和互斥量用于任務(wù)之間的同步和通信。
3.應(yīng)用層
這一層是用戶編寫的應(yīng)用程序,包括各種任務(wù)和函數(shù)。用戶可以根據(jù)自己的需求創(chuàng)建和管理任務(wù),使用 FreeRTOS 提供的 API 函數(shù)來實現(xiàn)各種功能。
FreeRTOS 內(nèi)核組件詳解
1.堆內(nèi)存管理
FreeRTOS 提供了多種堆內(nèi)存管理方案,用戶可以根據(jù)自己的需求選擇合適的方案。常見的堆內(nèi)存管理方案包括:
- 簡單分配器:這種方案簡單易用,但內(nèi)存利用率較低,可能會產(chǎn)生內(nèi)存碎片。
- 最佳適配分配器:這種方案能夠更好地利用內(nèi)存,減少內(nèi)存碎片的產(chǎn)生,但實現(xiàn)相對復(fù)雜一些。
2.任務(wù)管理
任務(wù)是 FreeRTOS 中最基本的執(zhí)行單元。FreeRTOS 支持多任務(wù),每個任務(wù)都有自己的優(yōu)先級和堆棧空間。任務(wù)可以處于以下幾種狀態(tài)之一:
- 運行態(tài):當(dāng)前正在執(zhí)行的任務(wù)。
- 就緒態(tài):任務(wù)已經(jīng)準(zhǔn)備好運行,但由于其他任務(wù)正在運行,暫時無法執(zhí)行。
- 阻塞態(tài):任務(wù)因為等待某個事件(如信號量、消息隊列等)而暫停執(zhí)行。
- 掛起態(tài):任務(wù)被掛起,暫時不會被調(diào)度執(zhí)行。
3.隊列管理
隊列是 FreeRTOS 中用于任務(wù)之間通信的重要機制。任務(wù)可以通過隊列發(fā)送和接收數(shù)據(jù),實現(xiàn)數(shù)據(jù)的共享和傳遞。隊列具有以下特點:
- 先進先出(FIFO):數(shù)據(jù)按照發(fā)送的順序依次被接收。
- 支持中斷安全:可以在中斷服務(wù)程序中安全地使用隊列。
4.軟件定時器
軟件定時器是 FreeRTOS 提供的一種定時機制,它可以在指定的時間間隔后觸發(fā)一個回調(diào)函數(shù)。軟件定時器可以用于實現(xiàn)一些周期性的任務(wù),如數(shù)據(jù)采集、系統(tǒng)監(jiān)控等。
5.中斷管理
中斷是單片機中非常重要的機制,它可以讓 CPU 及時響應(yīng)外部事件。FreeRTOS 提供了對中斷的支持,用戶可以在中斷服務(wù)程序中調(diào)用 FreeRTOS 的 API 函數(shù),實現(xiàn)任務(wù)的切換和通信。
6.臨界區(qū)
臨界區(qū)是指一段代碼,在這段代碼執(zhí)行期間,不允許其他任務(wù)或中斷打斷。FreeRTOS 提供了進入和退出臨界區(qū)的函數(shù),用戶可以在需要保護的代碼段前后調(diào)用這些函數(shù),確保代碼的原子性。
7.互斥量
互斥量是一種用于保護共享資源的機制,它可以確保在同一時刻只有一個任務(wù)能夠訪問共享資源。FreeRTOS 提供了互斥量的實現(xiàn),用戶可以通過獲取和釋放互斥量來控制對共享資源的訪問。
8.守門任務(wù)
守門任務(wù)是一種特殊的任務(wù),它可以用于控制對某些資源的訪問。只有當(dāng)守門任務(wù)允許時,其他任務(wù)才能訪問這些資源。
9.事件組
事件組是一種用于任務(wù)之間同步的機制,它可以讓一個任務(wù)等待多個事件的發(fā)生。任務(wù)可以通過設(shè)置和清除事件組中的事件來通知其他任務(wù)。
10.任務(wù)通知
任務(wù)通知是一種輕量級的任務(wù)間通信機制,它可以讓一個任務(wù)向另一個任務(wù)發(fā)送通知。任務(wù)通知可以用于實現(xiàn)一些簡單的任務(wù)間同步和通信。
FreeRTOS 實驗部分
為了幫助讀者更好地理解和掌握 FreeRTOS 的使用方法,我們的課程提供了豐富的實驗內(nèi)容。實驗部分采用了兩種不同的開發(fā)板:華清遠見STM32F103 和 STM32F407,并分別使用了 MDK-ARM 和 STM32CubeIDE 兩種集成開發(fā)環(huán)境。
在實驗中,我們將逐步引導(dǎo)初學(xué)者完成以下內(nèi)容:
使用 STM32CubeMX 配置 FreeRTOS:通過圖形化界面快速配置 FreeRTOS 的各項參數(shù),生成初始化代碼。
創(chuàng)建和管理任務(wù):學(xué)習(xí)如何創(chuàng)建、啟動、停止和刪除任務(wù),以及如何設(shè)置任務(wù)的優(yōu)先級和堆棧大小。
使用隊列和信號量進行任務(wù)間通信:了解如何通過隊列和信號量實現(xiàn)任務(wù)之間的數(shù)據(jù)傳遞和同步。
使用軟件定時器和中斷:掌握軟件定時器和中斷的使用方法,實現(xiàn)周期性任務(wù)和外部事件的響應(yīng)。
內(nèi)存管理和性能優(yōu)化:學(xué)習(xí)如何優(yōu)化內(nèi)存使用,提高系統(tǒng)的性能和穩(wěn)定性。
通過這些實驗,讓初學(xué)者深入了解 FreeRTOS 的工作原理和使用方法,掌握如何在實際項目中應(yīng)用 FreeRTOS 來開發(fā)高效、穩(wěn)定的實時系統(tǒng)。
總之FreeRTOS 是一款功能強大、易于使用的實時操作系統(tǒng),它為單片機開發(fā)提供了豐富的功能和高效的任務(wù)管理機制。通過學(xué)習(xí) FreeRTOS,讀者可以掌握實時系統(tǒng)的開發(fā)方法,提高自己的編程能力和解決實際問題的能力。
在我們的《嵌入式體系課:STM32全棧工程師實戰(zhàn)課》里有專門的FreeRTOS課程(如下圖紅框),課程全面覆蓋FreeRTOS基礎(chǔ)與使用、任務(wù)創(chuàng)建方法、任務(wù)參數(shù)使用、任務(wù)的優(yōu)先級、相對延時函數(shù)、隊列、定時器等,通過理論講解、案例分析和實驗操作相結(jié)合的方式,幫助用戶深入理解 FreeRTOS 的架構(gòu)和應(yīng)用。無論你是初學(xué)者還是有一定經(jīng)驗的開發(fā)者,都能從課程中獲得有益的知識和技能,為自己的嵌入式學(xué)習(xí)奠定堅實的基礎(chǔ)。
這部分課程不單賣,可以直接購買嵌入式VIP/SVIP會員(按月/半年),就可以看上面紅框內(nèi)容的教學(xué)視頻。當(dāng)然如果您想學(xué)習(xí)更多嵌入式領(lǐng)域的知識點,比如GPIO控制器、串口控制器、LVGL、原理圖與PCB設(shè)計等,或?qū)崙?zhàn)嵌入式體系課的綜合項目,購買嵌入式會員都可以在會員有效期內(nèi)觀看。
-
單片機
+關(guān)注
關(guān)注
6072文章
45283瀏覽量
661798 -
嵌入式
+關(guān)注
關(guān)注
5178文章
20067瀏覽量
326771 -
STM32
+關(guān)注
關(guān)注
2302文章
11111瀏覽量
370388 -
FreeRTOS
+關(guān)注
關(guān)注
14文章
496瀏覽量
66128
發(fā)布評論請先 登錄
【資料分享】FreeRTOS編程指南
FreeRTOS實時內(nèi)核使用指南_中文
什么是FreeRTOS?怎樣去移植FreeRTOS呢
FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南
FreeRTOS實時內(nèi)核使用指南-中文
FreeRTOS 內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南PDF電子書免費下載
關(guān)于FreeRTOS內(nèi)核的配置說明
【RTOS的最通俗理解】行業(yè)大佬用一篇文章帶你快速理解RTOS
FreeRTOS學(xué)習(xí)(1)——FreeRTOS移植
FreeRTOS系列第6篇---FreeRTOS內(nèi)核配置說明

FreeRTOS通俗理解指南:基礎(chǔ)概念 + 架構(gòu)+ 內(nèi)核組件+練手實驗
評論