<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dò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 與相關(guān)的函數函數與任務(wù)的

  2.2.1 創(chuàng )建函數OSTmrCreate

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

  OSTmrCallbackTbl [prio].OSTmrCallback = callback;

  OSTmrCallbackTbl [prio].OSTmrCallbackArg = callback_arg;

  OSTmrCallbackTbl [prio].OSTmr = ptmr;

  2.2.2 對定時(shí)器任務(wù)OSTmr_Task的

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

OSTmr_Task的流程


圖1 OSTmr_Task的流程

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

  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()的修改

  函數OSTmrStop只需修改與回調函數執行相關(guān)的部分即可,例如,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加入定時(shí)器就緒表*/

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

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

  }else {

  *perr = OS_ERR_TMR_NO_CALLBACK;

  }

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



評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>