<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ò) 收藏

            2.2.4 回調(diào)函數(shù)任務(wù)OSTmr_TaskCallback()

            在源文件tmr.c中加入回調(diào)函數(shù)任務(wù)OSTmr_TaskCallback(),根據(jù)就緒表中的優(yōu)先級(jí)執(zhí)行相應(yīng)回調(diào)函數(shù),回調(diào)函數(shù)任務(wù)的結(jié)構(gòu)如下所示:

            static voidOSTmr_TaskCallback(void *p_arg) {……/*變量定義*/

            for (;;){//請(qǐng)求信號(hào)量OSTmrSemCallback

            OSSemPend(OSTmrSemCallback, 0, err);

            OSTmr_Lock();/*上鎖*/

            while (OSTmrRdyGrp) {

            ……/*從就緒表中得到最高優(yōu)先級(jí)的定時(shí)器回調(diào)函數(shù)*/

            ……/*刪除就緒表中的占有位*/

            OSTmr_Unlock(); /*定時(shí)器上鎖*/

            pfnct = OSTmrCall[prio].OSTmrCallback;

           ?。?pfnct)((void *)(OSTmrCall[prio].OSTmr),OSTmrCall[prio].OSTmrCallbackArg); /*執(zhí)行回調(diào)函數(shù)*/

            OSTmr_Lock(); /*定時(shí)器上鎖*/

            }

            OSTmr_Unlock();/*定時(shí)器解鎖*/

            }

            }

            由以上代碼可知,訪問(wèn)就緒表時(shí)定時(shí)器上鎖,而執(zhí)行回調(diào)函數(shù)時(shí)處于定時(shí)器解鎖狀態(tài)。如果回調(diào)函數(shù)執(zhí)行時(shí)間較長(zhǎng),在下一個(gè)定時(shí)器節(jié)拍到來(lái)時(shí),定時(shí)器掃描任務(wù)可以得到及時(shí)的執(zhí)行,當(dāng)前回調(diào)函數(shù)執(zhí)行完成后,可以及時(shí)得執(zhí)行就緒表中最高優(yōu)先級(jí)定時(shí)器的回調(diào)函數(shù)。由此可以看出,高優(yōu)先級(jí)定時(shí)器的回調(diào)函數(shù)得到及時(shí)執(zhí)行,系統(tǒng)的實(shí)時(shí)性提高。

            實(shí)驗(yàn)測(cè)試發(fā)現(xiàn),在回調(diào)函數(shù)任務(wù)OSTmr_TaskCallback中,使用任務(wù)調(diào)度上鎖與解鎖比使用定時(shí)器上鎖與解鎖(即信號(hào)量的請(qǐng)求)執(zhí)行速度快一些。畢竟回調(diào)函數(shù)任務(wù)的優(yōu)先級(jí)很高(一般僅次于定時(shí)器掃描任務(wù)OSTmr_Task的優(yōu)先級(jí)),所以使用任務(wù)調(diào)度鎖定比定時(shí)器鎖定要好一些。當(dāng)然,還可以使用開(kāi)關(guān)中斷的方式對(duì)就緒表進(jìn)行訪問(wèn),可以根據(jù)實(shí)際情況選擇使用哪種方式。

            3 實(shí)驗(yàn)測(cè)試

            本次實(shí)驗(yàn)使用開(kāi)發(fā)環(huán)境IAR 5.30,以基于CortexM3內(nèi)核的路虎LPC1768開(kāi)發(fā)板作為硬件實(shí)驗(yàn)平臺(tái)[6],對(duì)實(shí)時(shí)操作系統(tǒng)μ 2.86進(jìn)行。

            對(duì)后的操作系統(tǒng)進(jìn)行測(cè)試,在主函數(shù)中創(chuàng)建一個(gè)啟動(dòng)任務(wù),在啟動(dòng)任務(wù)中創(chuàng)建4個(gè)周期定時(shí)器(系統(tǒng)中“時(shí)間輪”數(shù)設(shè)為4),賦予不同優(yōu)先級(jí)與定時(shí)值,每個(gè)定時(shí)器控制一個(gè)LED的閃爍,啟動(dòng)這4個(gè)定時(shí)器。在啟動(dòng)函數(shù)中創(chuàng)建4個(gè)任務(wù),每個(gè)任務(wù)也是控制一個(gè)LED燈的閃爍(利用任務(wù)延時(shí)),之后啟動(dòng)任務(wù)掛起。利用μ CSPY插件觀察各定時(shí)器的運(yùn)行情況,如圖2所示。

          軟件定時(shí)器運(yùn)行界面


          圖2 定時(shí)器運(yùn)行界面

            經(jīng)實(shí)驗(yàn)測(cè)試,系統(tǒng)運(yùn)行正常,定時(shí)器回調(diào)函數(shù)得到及時(shí)的執(zhí)行,系統(tǒng)實(shí)時(shí)性得到很大的提高。

            4 結(jié)語(yǔ)

            軟件定時(shí)器后,定時(shí)器任務(wù)的執(zhí)行時(shí)間確定,僅與同時(shí)完成定時(shí)的定時(shí)器數(shù)目有關(guān),對(duì)處于就緒表中的定時(shí)器回調(diào)函數(shù)按優(yōu)先級(jí)執(zhí)行,使高優(yōu)先級(jí)定時(shí)器的回調(diào)函數(shù)得到及時(shí)的執(zhí)行,提高了系統(tǒng)的實(shí)時(shí)性。


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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();