久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6592|回復: 0
打印 上一主題 下一主題
收起左側

uC/OS-II學習筆記—特殊任務

[復制鏈接]
跳轉到指定樓層
樓主
uC/OS-II的特殊任務包括空閑任務和統計任務,又稱操作系統的系統任務。雖然統計任務不是必需的,但是卻二十默認的系統任務。這兩個任務在操作系統初始化時被創建,在多任務啟動后被執行。那么,這兩個任務都具有什么功能,又使用了哪些重要的數據結構呢?
空閑任務OS_TaskIdle是uC/OS-II的系統任務因為它占據了最低優先級63,所以只有在其他的任務都因為等待事件的發生而被阻塞的時候才能得到運行。
空閑任務的代碼在os_core.c內核中,代碼如下所示:

由空閑任務的代碼可知,空閑任務除了不停地將空閑計數器OSIdleCtr的值加1之外,幾乎什么都不做。當沒有任何其他任務能夠運行的時候,操作系統就會執行這段代碼。而OSTaskIdleHook默認情況下也只是一個空函數,如沒有特殊需要我們不需要去填寫它,該函數的另一個作用就是占據一點時間,給系統足夠的時間響應中斷。
統計任務OS_TaskStat是uC/OS-II的另一個重要的系統任務,我們可以通過宏設置取消統計任務,但一般情況下不這么做,因為統計任務執行的統計工作時比較重要的。統計任務的主要功能是計算CPU的利用率。如果沒有統計任務,就不知道多任務環境下系統的運行情況是否良好。
CPU的利用率使用全局變量OSCPUUsage表示,這里涉及的幾個全局變量如下所示:

分析一下統計任務的代碼。首先是統計任務的初始化,該初始化任務的主要目的是獲得系統空閑計數的最大值,代碼如下所示:

該統計任務初始化函數在用戶任務中被調用,這個函數在移植過程中被App_TaskStart調用,App_TaskStart的優先級設置為1。代碼如下所示:

這時系統沒有運行其他的任務。系統任務初始化函數首先將自己阻塞兩個時鐘周期,在系統時鐘中斷2次后,由調度器進行任務調度而恢復運行,目的是與時鐘同步。接著,統計任務初始化函數清空空閑計數器OSIdleCtr,訪問全局變量OSIdleCtr必須關中斷,訪問完后再開中斷。接下來調用OSTimeDly(OS_TICKS_PER_SEC/10u)又把自己阻塞100ms,100ms后才恢復運行。在這100ms之內,運行的任務只有空閑任務。空閑任務會拼命將空閑計數器OSIdleCtr的值往上加,加到多大就要看CPU的速度。延時結束后,用OSIdleCtrMax接納OSIdleCtr的值,因此OSIdleCtrMax表示空閑狀態100ms內OSIdleCtr的計數值,稱為空閑計數最大值。那么,在系統運行了其他用戶任務的情況下,每100ms內OSIdleCtr的計數值肯定小于這個數值的。獲得了這個數值,統計任務就有了統計的基礎了,因此統計任務就準備好了,可以設置OSStatRdy的值為真。

統計任務優先級僅僅比空閑任務高,空閑任務的優先級是63,統計任務的優先級是62,這個數值越小優先級越高。因此,統計任務優先于空閑任務運行。在操作系統初始化過程中,初始化OSStatRdy為假,并創建了統計任務和空閑任務。初始化后又創建了一個名為App_TaskStart的優先級為1的任務。在多任務啟動后,如果沒有其他的任務就緒,那么首先要運行App_TaskStart,App_TaskStart中運行OSStatInit。在OSStatInit沒有結束前,由于OSStatRdy的值一直是假,所以

此處的循環不能結束,統計任務OS_TaskStat就把自己延時,等待,把CPU留給空閑任務用于做空閑計數。
OSStatInit結束時,100ms過后,OSStatRdy為真,統計任務OS_TaskStat經過200ms的延時時間后被喚醒,發現OSStatRdy為真就離開循環,為方便以后的計算,將空閑計數的最大值OSIdleCrMax除以100,商仍放在OSIdleCtrMax中。如果這時OSIdleCtrMax的值是0,說明空閑計數的值太少了(不到100),系統狀況很差,統計任務干脆講自己掛起來不再進行統計。
如果一切正常,那么統計任務進入死循環進行統計工作。首先將100ms內空閑計數值OSIdleCtr存到OSIdleCtrRun中,然后將OSIdleCtr清0以初始化下一個100ms的計數,然后進行CPU利用率的計算,公式為:OSCPUUsage = 100uL - OSIdleCtrRun/OSIdleCtrMax 。
因為OSIdleCtrMax的值是在前面除過100的,因此還原為:
OSCPUUsage = 100*(1-OSIdleCtrRun/OSIdleCtrMax)
OSIdleCtrRun是100ms內空閑任務對OSIdleCtr的計數值,OSIdleCtrMax是系統空閑的時候最大的計數值。OSIdleCtrRun/OSIdleCtrMax就是系統的空閑度了,但系統完全空閑的時候這個值就是1,而當系統繁忙的時候空閑任務可能得不到運行,這個值就是0。OSCPUUsage反映了系統的繁忙程度,也就是CPU的利用率。
接下來再延遲100ms來讓空閑任務統計下一個100ms的計數值,循環繼續進行下一次的統計。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利精品在线观看 | 日本成人中文字幕 | 91久久精品日日躁夜夜躁欧美 | 99在线精品视频 | 国产精品久久久久久妇女6080 | 国产精品69av | 欧美久久久| 日韩在线| 2023亚洲天堂| 欧美精品久久久久久久久久 | 国产亚洲精品美女久久久久久久久久 | 久久久久久综合 | 超碰成人在线观看 | 国产视频久久久久 | 日韩三极 | 午夜看电影在线观看 | 欧美专区日韩专区 | 国产亚洲精品综合一区 | 超碰97人人人人人蜜桃 | 在线观看亚洲精品视频 | 伊人免费网| 国产精品一区二区av | 一区二区福利视频 | 亚洲午夜av久久乱码 | 国产在线小视频 | 久久99精品久久久久久国产越南 | 久久久精品网站 | 国产精品久久久亚洲 | 久久午夜精品福利一区二区 | 国产黄色电影 | 日本视频在线播放 | 天天躁日日躁狠狠的躁天龙影院 | 亚洲视频手机在线 | 久久激情av| 国产精品2 | 永久免费在线观看 | 国产不卡在线播放 | 国产福利在线 | 五月天综合网 | 日本 欧美 三级 高清 视频 | 欧美另类视频在线 |