欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6602|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

uC/OS-II學(xué)習(xí)筆記—特殊任務(wù)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51773 發(fā)表于 2013-7-26 13:43 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
uC/OS-II的特殊任務(wù)包括空閑任務(wù)和統(tǒng)計(jì)任務(wù),又稱操作系統(tǒng)的系統(tǒng)任務(wù)。雖然統(tǒng)計(jì)任務(wù)不是必需的,但是卻二十默認(rèn)的系統(tǒng)任務(wù)。這兩個(gè)任務(wù)在操作系統(tǒng)初始化時(shí)被創(chuàng)建,在多任務(wù)啟動(dòng)后被執(zhí)行。那么,這兩個(gè)任務(wù)都具有什么功能,又使用了哪些重要的數(shù)據(jù)結(jié)構(gòu)呢?
空閑任務(wù)OS_TaskIdle是uC/OS-II的系統(tǒng)任務(wù)因?yàn)樗紦?jù)了最低優(yōu)先級(jí)63,所以只有在其他的任務(wù)都因?yàn)榈却录陌l(fā)生而被阻塞的時(shí)候才能得到運(yùn)行。
空閑任務(wù)的代碼在os_core.c內(nèi)核中,代碼如下所示:

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

分析一下統(tǒng)計(jì)任務(wù)的代碼。首先是統(tǒng)計(jì)任務(wù)的初始化,該初始化任務(wù)的主要目的是獲得系統(tǒng)空閑計(jì)數(shù)的最大值,代碼如下所示:

該統(tǒng)計(jì)任務(wù)初始化函數(shù)在用戶任務(wù)中被調(diào)用,這個(gè)函數(shù)在移植過(guò)程中被App_TaskStart調(diào)用,App_TaskStart的優(yōu)先級(jí)設(shè)置為1。代碼如下所示:

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

統(tǒng)計(jì)任務(wù)優(yōu)先級(jí)僅僅比空閑任務(wù)高,空閑任務(wù)的優(yōu)先級(jí)是63,統(tǒng)計(jì)任務(wù)的優(yōu)先級(jí)是62,這個(gè)數(shù)值越小優(yōu)先級(jí)越高。因此,統(tǒng)計(jì)任務(wù)優(yōu)先于空閑任務(wù)運(yùn)行。在操作系統(tǒng)初始化過(guò)程中,初始化OSStatRdy為假,并創(chuàng)建了統(tǒng)計(jì)任務(wù)和空閑任務(wù)。初始化后又創(chuàng)建了一個(gè)名為App_TaskStart的優(yōu)先級(jí)為1的任務(wù)。在多任務(wù)啟動(dòng)后,如果沒(méi)有其他的任務(wù)就緒,那么首先要運(yùn)行App_TaskStart,App_TaskStart中運(yùn)行OSStatInit。在OSStatInit沒(méi)有結(jié)束前,由于OSStatRdy的值一直是假,所以

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表