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