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