當前位置:編程學習大全網 - 源碼下載 - Ucosii任務調度源代碼

Ucosii任務調度源代碼

從內核的角度來看:

簡化(忽略壹些細節),UCOS啟動的時候會創建壹個空閑任務,這個任務優先級最低,不會被刪除。您可以通過調用OSTaskCreate創建壹個新任務,系統維護壹個任務列表(TCB)。

壹個任務有四種狀態:休眠(可以理解為已經從任務列表中刪除的任務)、等待、就緒、運行(書中沒有說,但可以理解為等待狀態可能是各種原因造成的)。

系統執行中斷處理函數中的任務調度過程,執行優先級最高且處於就緒狀態的任務。計劃成功後,該任務從就緒狀態變為運行狀態。如果沒有要調度的任務,那麽將運行任務idle。

從編程的角度來看:

1.硬件中斷會導致調度,比如I/O中斷,這個就不用細說了。

2.調用OSTaskCreae在當前任務中創建新任務會導致系統內核調用和模擬中斷。由於系統在中斷處理過程中執行任務調度,如果新任務的優先級高於當前任務,新任務將立即運行。

3.調用OSStart將導致系統的內核調用,這將產生壹個模擬中斷。因為系統在中斷處理期間執行任務調度,所以優先級最高且處於就緒狀態的任務將被執行。

4.調用OSTimeDly可以將當前任務變為等待狀態,設置等待時間,然後導致系統內核調用,會產生模擬中斷。因此另壹個具有最高優先級並處於就緒狀態的任務將被執行;在系統時鐘中斷中,等待時間結束後,任務將變為就緒狀態。

5.ossimpend、OSMboxPend、OSQPend等函數調用也會導致當前任務變為等待狀態,進而導致系統內核調用,產生模擬中斷。因此另壹個具有最高優先級並處於就緒狀態的任務將被執行;這種等待狀態只有在收到喚醒信號後才能解除。

6.修改任務優先級也會導致調度。

實際硬件中斷對應的系統調度函數是OSIntExt,其他軟件模擬調度的函數是OSSched。

總的來說,UCOS的調度原理很簡單,因為不存在時間片概念和優先級反轉的問題。

有許多優化或定制版本的UCOS,其中大多數將有自己的修改調度。請註意。

  • 上一篇:美網決賽“菜雞互啄”:沒有費納德,90後冠軍沒有含金量?
  • 下一篇:什麽是多炮?()
  • copyright 2024編程學習大全網