1. 程式人生 > >uCOS-II中的任務(一)

uCOS-II中的任務(一)

           uCOS-II作業系統核心的主要工作就是對任務進行管理和排程,理解什麼任務、任務的結構和ucos-II對任務的管理辦法,對了解uCOS-II的體系結構無疑是最重要的。

           任務的基本概念:

           當我們在開發一個複雜的專案時,一個簡單有效的方法就是“分解”,將大的應用專案分解成若干小的專案,在計算機中執行這些小的專案,也就完成大的專案開發。

          在uCOS-II中把上述小專案對應的程式實體叫做‘任務’,uCOS-II對這些小專案進行管理和排程,從而可以併發方式執行這些小任務的多工作業系統。通常處理器就一個,系統中的多工以一種被處理器輪詢的方式處理,巨集觀上看就像在併發處理,處理器始終處於工作狀態,從而提高執行效率。

         作業系統想要管理任務,通過任務控制塊,就是形同上一屆說到的控制塊那個結構體中的函式指標指向的C函式,表面上看很類似,其實不同,任務是一個個體,類似於我們跑裸機時候的main()函式,但任務有他自己的私有堆疊----任務堆疊用來保護因呼叫或中斷產生的斷點。

          任務的管理:

          uCOS-II中任務有兩種:使用者任務、系統任務。顧名思義uCOS-II最多可管理64個任務。

          系統為了對多工進行管理,就要將任務進行登記造冊,這就用到了上一屆說的把一個任務控制塊加入到連結串列中。插一條執行緒與程序的概念:簡單來說程序擁有自己獨立的執行空間,在uCOS中的單一任務是在作業系統管理下執行沒有自己獨立的空間故被稱為執行緒,但是多工整體他們的自己的執行空間就被稱為程序。

           任務的狀態:

          uCOS-II是按照一個cpu設計的,當執行其中一個任務,可看作這個任務處於執行狀態,那麼其他任務的狀態呢,uCOS定義了5種狀態:

          睡眠狀態(被拋棄狀態,該任務沒有任務控制塊或者被處理器剝奪了任務控制塊,除非給他一個,否則這個任務永遠不會被執行),就緒狀態(該任務什麼都不缺,在任務就緒表中登記了,就等處理器去使用時的狀態),執行狀態(沒啥還解釋的),等待狀態(這個任務開始被CPU處理,發現他需要等待某個時間或者等待一個事件發生才能繼續執行,CPU不能閒啊,開始去處理其他任務,等條件產生了再去執行這個任務),中斷服務狀態(當某個條件發生了,CPU去處理中斷函式,轉讓CPU使用權,的任務狀態)。

         使用者任務程式碼的一般結構:

         一個uCOS-II任務程式碼就是一個C語言函式void Mytask(void * pdata),其形參可以是資料或者是函式,所以用void*作為其形參,其執行程式碼就是一個無限迴圈結構.

         當你寫好這個任務函式後,就需要為這個任務建立任務控制塊了,否則他就是睡眠狀態,通過呼叫OSTaskCreate()為這個任務建立任務控制塊。uCOS-II也有一個void  mian()函式,在這個函式呼叫使用OSTaskCreate()為自己編寫的任務函式建立任務塊,這個mian()函式只是只是程式的入口,進入之後的什麼事都是由系統操作了。

        任務系統:

        當某個時刻CPU無任務,不能讓他閒著啊,uCOS-II就給CPU安排了個叫空閒任務OSTaskIdle(void* pdata)的傢伙,用來幹嘛,就是用來計數+1。特別需要注意的是,uCOS規定,一個使用者程式必須使用這個空閒任務,且這個任務是不能刪除的。

        uCOS-II還提供了另外一個系統任務:統計任務OSTaskStat();每秒計算一次CPU單位時間使用率,結果放在變數OSCPUsage,如果使用者應用程式要使用統計任務,則要吧系統標頭檔案OS_CFG.H中的系統配置常數OS_TASK_STAT_EN設定為1,這樣就可以在程式中呼叫函式OSStatInit()對統計任務進行初始化。

        任務的優先權及優先級別

       根據嵌入式系統的特點,uCOS-II採用優先順序搶佔式規則,系統中每個任務按照其任務重要性分配一個唯一的優先順序,優先順序高的先執行。

      uCOS-II最多可建立64個任務,優先級別也就有64級,從0到63,這裡要注意兩點:1、uCOS在系統配置檔案OS_CFG.h中配置了一個常數OS_LOWEST_PRIO,表示你想設定的任務的最低優先順序,最大為63。2、uCOS常常把OS_LOWEST_PRIO優先級別分配給系統空閒任務,如果應用程式使用了系統統計任務,系統又把OS_LOWEST_PRIO-1優先級別分配給統計任務。

好了今天就到這,明天不上班,看看能不能把第三章寫完。