<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > μC/OSII中軟件定時(shí)器的優(yōu)缺點(diǎn)與改進(jìn)

          μC/OSII中軟件定時(shí)器的優(yōu)缺點(diǎn)與改進(jìn)

          作者: 時(shí)間:2011-04-18 來(lái)源:網(wǎng)絡(luò) 收藏

          μ具有小巧、性能穩(wěn)定、開(kāi)源等眾多優(yōu)點(diǎn),并且μ大部分用ANSI C語(yǔ)言編寫(xiě),系統(tǒng)的移植非常容易。在μ I2.81及以后的版本中[2],加入了對(duì)的支持,使得μC/OSII操作系統(tǒng)更加完善。

          本文引用地址:http://www.ex-cimer.com/article/162162.htm

            μC/OSII是一種基于優(yōu)先級(jí)的搶占式操作系統(tǒng),實(shí)時(shí)性很強(qiáng)。而系統(tǒng)中沒(méi)有優(yōu)先級(jí),回調(diào)函數(shù)順序執(zhí)行,這樣就降低了系統(tǒng)的實(shí)時(shí)性。因此,本文對(duì)進(jìn)行,定時(shí)器中加入優(yōu)先級(jí),回調(diào)函數(shù)按優(yōu)先級(jí)執(zhí)行,從而提高系統(tǒng)的實(shí)時(shí)性。

            1 對(duì)軟件定時(shí)器的介紹

            μC/OSII系統(tǒng)中的時(shí)間管理功能包括任務(wù)延時(shí)與軟件定時(shí)器,而軟件定時(shí)器的主要作用是,對(duì)函數(shù)周期性或者一次性執(zhí)行的定時(shí),利用軟件定時(shí)器控制塊與“定時(shí)器輪”管理軟件定時(shí)器。定時(shí)器控制塊的結(jié)構(gòu)如同任務(wù)控制塊,創(chuàng)建一個(gè)定時(shí)器時(shí),從空閑定時(shí)器控制塊鏈表中得到一個(gè)空閑控制塊,并對(duì)其賦值。

            軟件定時(shí)器也需要一個(gè)時(shí)鐘節(jié)拍驅(qū)動(dòng),而這個(gè)驅(qū)動(dòng)一般是硬件實(shí)現(xiàn)的,一般使用μC/OSII操作系統(tǒng)中任務(wù)延時(shí)的時(shí)鐘節(jié)拍來(lái)驅(qū)動(dòng)軟件定時(shí)器。每個(gè)時(shí)鐘節(jié)拍OSTmrCtr(全局變量,初始值為0)增1, 當(dāng)OSTmrCtr的值等于為OS_TICKS_PER_SEC /OS_TMR_CFG_TICKS_PER_SEC(此兩者的商決定軟件定時(shí)器的頻率)時(shí),調(diào)用函數(shù)OSTmrSignal(),此函數(shù)發(fā)送信號(hào)量OSTmrSemSignal(初始值為0,決定軟件定時(shí)器掃描任務(wù)OSTmr_Task的運(yùn)行)。也就是說(shuō),對(duì)定時(shí)器的處理不在時(shí)鐘節(jié)拍中斷函數(shù)中進(jìn)行,而是以發(fā)生信號(hào)量的方式激活任務(wù)OSTmr_Task(具有很高的優(yōu)先級(jí))。任務(wù)OSTmr_Task對(duì)定時(shí)器進(jìn)行檢測(cè)處理,包括定時(shí)器定時(shí)完成的判斷、回調(diào)函數(shù)的執(zhí)行。

            μC/OSII 2.86中與軟件定時(shí)器相關(guān)的函數(shù)包括:

            ① 軟件定時(shí)器內(nèi)部靜態(tài)函數(shù)。獲取與釋放定時(shí)器控制塊函數(shù)OSTmr_Alloc()、OSTmr_Free();定時(shí)器插入相應(yīng)“時(shí)間輪”組函數(shù)OSTmr_Link();從相應(yīng)“時(shí)間輪”組中刪除定時(shí)器函數(shù)OSTmr_Unlink();軟件定時(shí)器任務(wù)初始化函數(shù)OSTmr_InitTask();定時(shí)器掃描任務(wù)OSTmr_Task;定時(shí)器上鎖與解鎖函數(shù)OSTmr_Lock()與OSTmr_Unlock()(在μC/OSII 2.91中,此兩函數(shù)被任務(wù)調(diào)度鎖定與解鎖函數(shù)代替)。

           ?、?定時(shí)器外部接口函數(shù)。定時(shí)器創(chuàng)建與刪除函數(shù)OSTmrCreate()、OSTmrDel();定時(shí)器啟動(dòng)與停止函數(shù)OSTmrStart()、OSTmrStop();定時(shí)器剩余時(shí)間與當(dāng)前狀態(tài)查詢(xún)函數(shù)OSTmrRemainGet()、OSTmrStateGet();軟件定時(shí)器的初始化OSTmr_Init();發(fā)送信號(hào)量OSTmrSemSignal函數(shù)OSTmrSignal();定時(shí)器名稱(chēng)查詢(xún)函數(shù)OSTmrNameGet()。

            由于軟件定時(shí)器的回調(diào)函數(shù)的執(zhí)行都是在任務(wù)OSTmr_Task中執(zhí)行,如果多個(gè)定時(shí)器同時(shí)定時(shí)完成,則在定時(shí)器任務(wù)中執(zhí)行多個(gè)定時(shí)器的回調(diào)函數(shù),因此定時(shí)器任務(wù)的執(zhí)行時(shí)間不確定。而且定時(shí)器回調(diào)函數(shù)是順序執(zhí)行的,如果某個(gè)定時(shí)器回調(diào)函數(shù)需要盡快執(zhí)行以實(shí)現(xiàn)精確定時(shí),就難以實(shí)現(xiàn)了。由于各個(gè)定時(shí)器沒(méi)有優(yōu)先級(jí),因此了影響系統(tǒng)的實(shí)時(shí)性。

            2 對(duì)軟件定時(shí)器的

            為提高軟件定時(shí)器回調(diào)函數(shù)執(zhí)行的實(shí)時(shí)性,給每個(gè)定時(shí)器賦予一個(gè)優(yōu)先級(jí)。當(dāng)定時(shí)完成時(shí),并且定時(shí)器的回調(diào)函數(shù)不為空,則把定時(shí)器的優(yōu)先級(jí)寫(xiě)于軟件定時(shí)器就緒表中。任務(wù)OSTmr_Task對(duì)相應(yīng)“時(shí)間輪”檢查結(jié)束后,如果在掃描各個(gè)定時(shí)器前軟件定時(shí)器就緒表為零而掃描之后不為零,則發(fā)送信號(hào)量激活回調(diào)函數(shù)任務(wù)OSTmr_TaskCallback。在此任務(wù)中,回調(diào)函數(shù)根據(jù)軟件定時(shí)器就緒表中的優(yōu)先級(jí)執(zhí)行相應(yīng)的回調(diào)函數(shù),這樣就提高了系統(tǒng)的實(shí)時(shí)性。

            2.1 對(duì)軟件定時(shí)器相關(guān)數(shù)據(jù)結(jié)構(gòu)

            ① 定義結(jié)構(gòu)體OS_TMR_CALL,存儲(chǔ)定時(shí)器的回調(diào)函數(shù)、函數(shù)的參數(shù)、定時(shí)器指針,形式如下:

            typedefstructos_tmr_call {

            OS_TMR_CALLBACKOSTmrCallback; /*回調(diào)函數(shù)*/

            void *OSTmrCallbackArg;/*回調(diào)函數(shù)指針*/

            OS_TMR *OSTmr; /*定時(shí)器指針*/

            } OS_TMR_CALL;

            在頭文件ucos_ii.h中,定義OSTmrCallbackTbl[OS_TMR_CFG_MAX],OS_TMR_CFG_MAX表示系統(tǒng)中配置的軟件定時(shí)器數(shù)量。

           ?、?在軟件定時(shí)器控制塊中加入成員變量OSTmrPrio(定時(shí)器優(yōu)先級(jí)),刪去變量OSTmrCallback(回調(diào)函數(shù))、OSTmrCallbackArg(回調(diào)函數(shù)參數(shù)),為了測(cè)試的方便,可暫不刪除這兩個(gè)變量。

           ?、?定義定時(shí)器就緒表:

            INT8UOSTmrRdyGrp;

            INT8UOSTmrRdyTbl[OS_TMR_CFG_MAX/8 + 1];

            當(dāng)定時(shí)器定時(shí)完成時(shí),把定時(shí)器優(yōu)先級(jí)寫(xiě)入就緒表,回調(diào)函數(shù)任務(wù)根據(jù)優(yōu)先級(jí)執(zhí)行回調(diào)函數(shù)。

           ?、?定義信號(hào)量OSTmrSemCallback(初始值0 ),當(dāng)定時(shí)完成后,發(fā)送此信號(hào)量,激活回調(diào)函數(shù)任務(wù),以執(zhí)行回調(diào)函數(shù)。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();