當前位置:編程學習大全網 - 編程語言 - 關於ucos任務調度的問題,嵌入式高手進

關於ucos任務調度的問題,嵌入式高手進

從內核角度講:

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

任務有休眠(可以理解成已經被從任務列表中刪除的任務),等待,Ready,運行 4種狀態(書上不是這麽說的,但可以這麽理解,等待狀態可能有多種原因造成)

系統在中斷處理函數中執行任務調度過程,執行優先級最高的,處於ready狀態的任務。調度成功後此任務從ready變成運行狀態。如果沒有任何任務可以調度,那麽idle這個任務就會運行。

從編程角度講:

1. 硬件中斷產生會導致調度,例如I/O中斷,這個不需要細說。

2. 在當前任務中調用OSTaskCreae創建新任務,會導致壹個系統的內核調用,會產生壹個模擬中斷,因為系統在中斷處理時執行任務調度,所以如果新任務的優先級比當前的大,新任務會立刻被運行。

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

4. 調用OSTimeDly可以將當前任務改成等待狀態,設置等待的時間,然後會導致壹個系統的內核調用,會產生壹個模擬中斷。所以另壹個優先級最高的,處於ready狀態的任務會被執行;在系統的時鐘中斷中會在等待時間到了之後把任務改成ready狀態。

5. OSSemPend、OSMboxPend,OSQPend等函數調用也會導致當前任務改成等待狀態,然後會導致壹個系統的內核調用,會產生壹個模擬中斷。所以另壹個優先級最高的,處於ready狀態的任務會被執行;這個等待狀態必須在收到wakeup的信號才能解除。

6. 修改任務優先級也可以引起調度。

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

UCOS的調度原理總體來說非常簡單,因為沒有時間片概念和優先級反轉的問題。

UCOS有很多優化或者定制版本,大多在調度上會有自己的修改,請註意。

  • 上一篇:小盒科技為什麽在經歷雙減政策之後依然可以存活
  • 下一篇:初中畢業男生去學什麽技術比較好,有發展前途的
  • copyright 2024編程學習大全網