【FreeRTOS學習筆記】時間片
阿新 • • 發佈:2022-05-12
本節用於整理freertos中時間片的實現方式,以及測試程式的思路:
1.freertos中,由於遍歷就緒連結串列時,使用的是索引節點,並且在結束後會將索引指向下一個;
這樣每次遍歷就緒連結串列選取節點的時候,會輪流選取節點。這樣同優先順序平分就實現了。
有一個細節,每次時鐘中斷到來,都會啟動任務切換,那麼平分時間的精度其實就是時間片的大小。
2.測試程式該如何展示高優先順序獨佔、低優先順序平分CPU呢?
(1)建立幾個任務?優先順序如何?
想要展示高優先順序獨佔,那麼前提是有兩種優先順序的任務,簡單設為1和2吧。
想要展示低優先順序平分,前提是至少有兩個低優先順序任務。
那麼就建立Task1和Task2為1優先順序任務,Task3為2優先順序任務;
(2)任務實體怎麼做,才能直觀地通過邏輯分析儀看出獨佔和平分?
由於Task3的優先順序最高,只要它不阻塞,CPU就一定分給它,其他任務一定得不到CPU;
所以獨佔在插入就緒連結串列和遍歷就緒連結串列的方式定下來時,已經實現了;
為了能看到任務1和任務2在平分時間片,我們在Task3中,使用非阻塞延時:
為了能看到在Task3進入延時時,Task1和Task2平分時間片,最簡單的方法是使用阻塞延時;
這樣任務自身不讓出CPU,只等待SysTick到來時進行任務讓步;如下圖:
3.最後,執行結果如下圖: