嵌入式OS入門筆記——以RTX為案例
嵌入式OS入門筆記-以RTX為案例
本篇筆記將簡單介紹RTX,包括基本架構(gòu),如何在Keil中配置。需要安裝ARM-MDK和一塊硬件板,筆記以STM32F4Discovery為例子。
1.為什么要用RTOS?
盡管把所有程序放在一個大的循環(huán)里順序執(zhí)行,總是可能的(甚至很多時候是足夠的勝任任務(wù)的),但是這樣做有好幾個明顯的缺點:
? 過分依賴中斷 ISR(Interrupt Service Routine, 中斷服務(wù)例程)
? 同步不同的ISR不容易
? 可預(yù)測性和延展性很差(大量的ISR,甚至是中斷嵌套)
? 對局部的修改會對整個系統(tǒng)有水花效應(yīng)(沒有模塊化,牽一發(fā)而動全身)
RTOS主要是把要執(zhí)行的運算包裝在小的task里面,這樣好的好處是:
? 更好的程序流(program flow)和反應(yīng)
? 多任務(wù)(盡管這是假象)
? 簡單的ISR,強的決定性
? 更好的進程間通信
? 更好的資源管理
? 最關(guān)鍵的是,開發(fā)成本低!
一個不成文的小經(jīng)驗:如果源程序大于1MB,那就有必要用RTOS了!
2.為什么不要用RTOS?
當然,也有很多情況下我們不希望用RTOS的:
? 項目簡單
? 不想學RTOS
? RTOS盡管性能方便出色,但不是最優(yōu)的!(好比用匯編還是用C,有經(jīng)驗的程序員可以寫出比編譯器效率更高的代碼,可是編譯器大大簡化開發(fā)過程。)如果需要極致的性能優(yōu)化,那可能RTOS不是你的第一選擇,畢竟RTOS是有內(nèi)存和運行overhead的。
? 開發(fā)RTOS很耗時間
? 不是所有RTOS都是免費的
3.為什么RTX?
為什么選RTX不選別的RTOS,例如FreeRTOS?
? 免費(royalty-free,買斷式的授權(quán))
? 好上手
? 對硬件要求低
? 和ARM軟硬件兼容性好(ARM-MDK自帶)
? 可以查看源代碼
其實主要還是看應(yīng)用,RTX在行業(yè)里聲譽還是很好的,穩(wěn)定性強,開發(fā)成本低,而且基本功能齊全。
4.RTX的結(jié)構(gòu)
RTX其實是Keil Real-Time Library (RTL)的核心,這個RTL有很多部分的,都是在RTX kernel基礎(chǔ)上庫。 RTX Kernel本身的話,結(jié)構(gòu)大概如下圖:
主要的組件有:mutex互斥鎖,memory pool內(nèi)存池,mailbox郵箱,time(timer)定時器, event事件, semaphore旗語或信號燈,task management進程管理等等和最核心的Scheduler排程器(進程調(diào)度器)。
5.移植到RTX上很簡單!
移植一個現(xiàn)有的ARM-MDK工程到RTX上非常簡單:
1.在工程配置中選擇RTX Kernel作為你的操作系統(tǒng),如下圖:
?
2.在你的main.c里添加頭文件RTL.H:
#include
3.復(fù)制RTX_Conf_CM.文件到你的工程里。