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