在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            關 閉

            新聞中心

            EEPW首頁 > 工控自動化 > 設計應用 > μC/OSII中軟件定時器的優(yōu)缺點與改進

            μC/OSII中軟件定時器的優(yōu)缺點與改進

            作者: 時間:2011-04-18 來源:網絡 收藏

              2.2 與相關的函數(shù)函數(shù)與任務的

              2.2.1 創(chuàng)建函數(shù)OSTmrCreate

              在創(chuàng)建函數(shù)OSTmrCreate的參數(shù)中加入優(yōu)先級參數(shù)prio。調用創(chuàng)建函數(shù)時,對控制塊中的成員變量賦值,并給回調函數(shù)數(shù)組的相應單元賦值,形式如下:

              OSTmrCallbackTbl [prio].OSTmrCallback = callback;

              OSTmrCallbackTbl [prio].OSTmrCallbackArg = callback_arg;

              OSTmrCallbackTbl [prio].OSTmr = ptmr;

              2.2.2 對定時器任務OSTmr_Task的

              當有定時器定時完成,把定時器優(yōu)先級寫入定時器就緒表中,并根據(jù)就緒表前后的值判斷時候發(fā)送信號量OSTmrSemSignal,以激活回調函數(shù)任務。任務OSTmr_Task的流程如圖1所示。

            OSTmr_Task的流程


            圖1 OSTmr_Task的流程

              把定時器優(yōu)先級寫入定時器就緒表的代碼如下所示:

              if (OSTmrTime == ptmr>OSTmrMatch) {

              prio = ptmr>OSTmrPrio;

              pfnct =OSTmrCall[prio].OSTmrCallback;

              if (pfnct != (OS_TMR_CALLBACK)0) { /*加入定時器回調函數(shù)就緒表*/

              OSTmrRdyGrp|= (INT8U)(1 《 (INT8U)(prio 》 0x03));

              OSTmrRdyTbl[prio >> 0x03]|= (INT8U)(1 《 (INT8U)(prio 0x07));

              }

              }

              2.2.3 對定時器停止函數(shù)OSTmrStop()的修改

              函數(shù)OSTmrStop只需修改與回調函數(shù)執(zhí)行相關的部分即可,例如,case OS_TMR_OPT_CALLBACK_ARG: 部分的代碼如下:

              case OS_TMR_OPT_CALLBACK_ARG:

              prio = ptmr>OSTmrPrio;

              pfnct = OSTmrCall[prio].OSTmrCallback;

              if (pfnct != (OS_TMR_CALLBACK)0) {

              ……/*prio加入定時器就緒表*/

              OSTmrCall[prio].OSTmrCallbackArg =(void *)callback_arg;

              OSSemPost(OSTmrSemCallback); /*發(fā)送回調函數(shù)執(zhí)行信號量*/

              }else {

              *perr = OS_ERR_TMR_NO_CALLBACK;

              }

              而case OS_TMR_OPT_CALLBACK:部分的代碼同上,只是回調函數(shù)的參數(shù)不需要重新賦值。



            評論


            相關推薦

            技術專區(qū)

            關閉