Ucos操作系統任務優先級分配原則

ucos是一個可剝奪性內核的操作系統。所以每一個任務都必須有一個優先級。ucos操作系統中任務的優先級使用一個8位整型數據來表示的。比如我們的0,1,2,3這些數,UCOS任務優先級的取值範圍爲 0 - OS_LOWEST_PRIO之間,數字越小,優先級越大。
靜態優先級
  這個優先級被分配以後,它在任務的運行過程中,或者說在這個系統的運行過程中,它的優先級就不能變了,比如說,我們把這個優先級分配爲2,那這個任務在運行過程中就一直爲2,沒辦法變成其他的優先級。
動態優先級
  在任務的運行過程中,它本身是2這個優先級,但是在運行過程中,它還可以變成3,變成4,變成n這個數,那這個過程就被稱爲動態優先級,也就是說這個優先級在系統的運行過程中,會出現一個可以變化的過程,ucos是一個支持動態優先級的一個系統,也就是說,我們的ucos可以在系統運行的過程中,來更改一個任務的優先級,這點我們需要注意。
  對任務優先級分配首先需要做的有哪些事情呢?
  假設系統中有1,2,3,4,5,這5個任務,第一個任務對我們開關的輸入信號進行掃描,第二個任務處理我們的按鍵,第三個任務處理我們的串口通信,第四個任務進行我們的系統邏輯處理,比如我們的開關量輸出,第五個任務運行我們的LCD屏顯示,假設我們對這5個任務分配優先級怎麼分配呢?
  第一個我們必須把前3個任務的分配優先級要比後兩個要高,爲什麼呢?
  因爲從邏輯上來說,我們是首先進行開關量掃描,進行按鍵處理,進行串口通信,接下來,才進行邏輯處理,因爲在邏輯處理當中,我們有可能用到開關量掃描,按鍵處理,和串口等等這些信息,所以說我們分配優先級的時候前3個任務的分配優先級要比後兩個要高,對於這個輸出和LCD屏顯示,我們來看看這兩個怎麼處理,首先一般來說LCD屏顯示是一個比較緩慢的過程,因爲LCD屏顯示是一個慢速的設備,那第四個邏輯處理和開關量輸出運行速度比較快,那我們就把第四個的優先級要比第五個的高一點,那也就是說,對於一個任務,它運行的時間越短,分配的優先級越高,這是爲什麼呢?
  非常簡單,因爲我們剛剛說了ucos是一個可剝奪性內核,也就是說,如果有高任務在運行,那麼這個低任務它是沒辦法運行的,那如果這個任務佔用的時間比較少,我們就把它放到一個較高的任務上,那它就能很快的執行完畢,這樣我們的CPU就可以較快的執行一些其他的任務了,這個是我們在使用優先級分配的一個問題,優先級的分配不是那麼容易的,我們對一個比較好的操作系統要好好來考慮這個優先級的分配,如果優先級的分配的不好,就可能出現——優先級反轉。
任務優先級分配的原則
  1、對於實時性要求高的任務應該分配較高的優先級。
  比如我們剛剛舉例的串口運行任務,我們都知道當串口接收到一個數據以後,它需要在一定的時間內把這個數據處理完,並且返回到上位機,上位機是不可能一直等待這個數據的,所以說我們對這個串口的執行它就有一個時間的要求,也就是實時性要求較高,那對於這個任務,我們就要分配一個較高的優先級。
  2、對於運行速度較快的任務應該分配較高的優先級。
  3、任務在邏輯之前的要分配較高的優先級。
就是我們剛剛說的,我們首先是掃描開路,掃描按鍵,接下來我們才能進行邏輯的處理。所以說我們的掃描開路,掃描按鍵要比邏輯處理的優先級要高,否則的話,我們還沒有進行開關量掃描,已經開始處理邏輯了,這個時候,就發生了一個錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章