作者 | strongerHuang微信公眾號?|?strongerHuang
RTOS:Real Time Operating System,實時操作系統(tǒng)。那么,到底啥是實時操作系統(tǒng)呢?它真的實時嗎?
關于RTOS
RTOS:Real?Time?Operating?System,即實時操作系統(tǒng)。
來自百度百科的解釋:實時操作系統(tǒng)是指當外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)做出快速響應,調(diào)度一切可利用的資源完成實時任務,并控制所有實時任務協(xié)調(diào)一致運行的操作系統(tǒng)。
實時操作系統(tǒng),體現(xiàn)的重點是實時(及時響應)。簡單說就是程序能及時的解決、處理一些比較急的事情,而不會出現(xiàn)“卡機”等情況。
比如:一個運動的小車,傳感器檢測到前方有障礙物,要立馬減速、停車,而不是半天才反應過來(反應慢了就會撞上去)。
與裸機相比從裸機轉(zhuǎn)RTOS的同學,就會拿裸機與RTOS相比較:
-
- RTOS相比裸機有什么優(yōu)點?
-
- RTOS相比裸機更方便嗎?......
我可以肯定的說:RTOS相比裸機更方便,優(yōu)點也更多。當然,前提是MCU資源(Flash、RAM)能滿足需求。
因為早期的MCU資源相對匱乏,比如Flash低于10K,RAM低于1K,這個時候用RTOS,優(yōu)點就不明顯,反而更容易暴露缺點。
但現(xiàn)在MCU資源相對比較多,動輒超過1M的Flash、 100K的RAM,這種情況下,如果跑裸機,我感覺太浪費MCU資源了。
與分時操作系統(tǒng)相比很多人會聯(lián)想到分時操作系統(tǒng)(TSOS),RTOS和TSOS有什么區(qū)別?各自有什么特點?
現(xiàn)在的處理器速度相對更快了,分時操作系統(tǒng)的實時能力也很高了。它們的區(qū)別其實可以從字面意思上理解,分時就是分為時間片,這個時間片很小,一般us級別甚至更低。
你了解一下TSOS分時操作系統(tǒng)的調(diào)度機制,你就會更加明白二者之間的區(qū)別了。
這一節(jié)可以參看我的之前分享的文章:RTOS和TSOS有什么區(qū)別?
RTOS真的實時嗎?
回到今天的話題:RTOS真的實時嗎?
嚴格來說,RTOS也不是實時響應并處理緊急的事情,只是在很短時間(一般ms級別)就做出了響應,給人感覺就是實時在響應。
單個CPU,在同一個時間只能處理一件事(只能執(zhí)行一處程序),你創(chuàng)建了任務1、 任務2、 任務3......等多個任務,CPU在執(zhí)行的時候都是輪流(按照優(yōu)先級)執(zhí)行。
1.系統(tǒng)滴答
RTOS實時響應有一個重要的配置,那就是系統(tǒng)滴答(SysTick)。
比如FreeRTOSConfig.h
#define configTICK_RATE_HZ ((TickType_t)1000)
再比如μCOS系統(tǒng)的os_cfg.h
#define OS_TICKS_PER_SEC 1000u
系統(tǒng)滴答決定了你RTOS底層調(diào)度的時間大小,如果設置1000,那么1ms就會調(diào)度一次,也就說1ms會做出一次響應。
拿上面小車遇到障礙物為例:傳感器檢測到障礙物,通知更高優(yōu)先級任務進行剎車,這個過程只需要1ms就會得到響應。
你肯定說:那我設置10000,是不是0.1ms就會做出響應?是不是系統(tǒng)滴答越大越好?
按理說系統(tǒng)滴答值越大響應越快,但系統(tǒng)調(diào)度也是需要占用時間:
調(diào)度的時間長度不變,如果N到N+1之間時間越短(滴答),留給執(zhí)行任務的時間就越短。
所以,滴答值也不是越大越好,需要一個合理的值,可以參看:RTOS滴答Tick設置多少才合適?
2.硬件中斷
從裸機開發(fā)轉(zhuǎn)RTOS的同學就有這樣一個思維:我用中斷就能做到實時響應。
的確,中斷能做到實時響應,但不能滿足大部分需求。
拿上面小車剎車來說:比如檢測到前方障礙物立刻做出中斷響應,此刻執(zhí)行減速的動作,這個動作假如是S曲線(減減速)剎車,執(zhí)行時間為1s。
如果你在中斷函數(shù)里面執(zhí)行這個1s剎車動作,CPU就不會做其他事情了,這樣你覺得可以嗎?
硬件中斷只能做出一個“緊急通知”,不能做出(耗時的)執(zhí)行動作。
RTOS結合硬件中斷就能完美解決這個問題,中斷通知高優(yōu)先級任務執(zhí)行剎車減速的動作,但這個過程可能需要1ms。
所以,你會發(fā)現(xiàn)RTOS并非真正的實時,只是這個時間很短,你感覺不出來。