學(xué)的太多反而是一種煩惱,大多的RTOS其任務(wù)調(diào)度及管理其實都差不了太多,都是換湯不換藥,但是細節(jié)上確實有不少的差異性。
例如Free和RTT的任務(wù)調(diào)度都支持時間片調(diào)度模式,先來科普下神馬叫時間片調(diào)度模式,很簡單,每個任務(wù)都有一個執(zhí)行時間的最大限度,也就是當(dāng)一個正在運行的任務(wù),在占用CPU資源運行時,如果其并沒有遇到高優(yōu)先級的任務(wù)搶占,也沒有自身進行阻塞或者掛起操作,那么他也不會一直運行下去,而是有個時間的限制,當(dāng)時間到了以后,他會自動切換到其他同優(yōu)先級的就緒的任務(wù)開始執(zhí)行,
假如不切那么這個調(diào)度器的模式就是合作式調(diào)度,他會一直執(zhí)行這個運行態(tài)的任務(wù),同優(yōu)先級其他就緒的任務(wù)無法得到執(zhí)行。
時間片調(diào)度和合作式調(diào)度只能二選一
合作式基本已被遺忘在布滿灰塵的角落,官方針對其也不在做任何升級。
FreeRTOS系統(tǒng)的默認狀態(tài)下就是開啟了時間片調(diào)度模式,也可以通過FreeRTOSConfig.h手動的開啟時間片調(diào)度模式。
那么問題來了,開啟了時間片調(diào)度模式,那么運行任務(wù)運行的最大的時間片是多少呢?看某教程上是這么講的。
但是翻遍了整個config文件,都沒有找到相關(guān)的參數(shù),于是度娘請教,得到的答復(fù)是這樣的,其實FreeRTOS并不支持設(shè)定時間片的設(shè)定,他的系統(tǒng)調(diào)度的tick就是他的最大時間片,也就是我們設(shè)定的1000HZ的系統(tǒng)滴答。
在這里,好像記得RTT是可以創(chuàng)建任務(wù)的時間片長度的,那么每個任務(wù)的運行時間片長度是可以做到不同,
對比一下FreeRTOS的任務(wù)創(chuàng)建函數(shù),在這里和config中都沒有tick的指定,那么他應(yīng)該是沒有這個參數(shù)的設(shè)置。
那么FreeRTOS的時間片應(yīng)該是固定的,被封印在了tick上。
接下來聊聊,固定的時間片和可設(shè)定的時間片到底有什么差異呢?
時間片長度是讓一個任務(wù)獨霸CPU執(zhí)行的時間,在沒有高優(yōu)先任務(wù)搶占的情況,同優(yōu)先級的任務(wù)要等到這個時間片執(zhí)行完,然后切換其它同優(yōu)先級就緒任務(wù)。
時間片長度可調(diào)影響的只是任務(wù)切換的次數(shù),站在應(yīng)用的角度上來講,切換的速度對于應(yīng)用并沒有任何的影響。
同優(yōu)先級皆為就緒的任務(wù)原本的目的就是要讓他們執(zhí)行的時候看起來像是并行的,在不考慮任務(wù)切換頻率帶來的損耗時間的情況下,快與慢其實并不會對應(yīng)用產(chǎn)生任何影響。
多一個參數(shù),你還要思考這個任務(wù)的tick設(shè)置到多少合適,當(dāng)然聊勝于無。