<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.4 回調函數任務(wù)OSTmr_TaskCallback()

  在源文件tmr.c中加入回調函數任務(wù)OSTmr_TaskCallback(),根據就緒表中的優(yōu)先級執行相應回調函數,回調函數任務(wù)的結構如下所示:

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

  for (;;){//請求信號量OSTmrSemCallback

  OSSemPend(OSTmrSemCallback, 0, err);

  OSTmr_Lock();/*上鎖*/

  while (OSTmrRdyGrp) {

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

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

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

  pfnct = OSTmrCall[prio].OSTmrCallback;

 ?。?pfnct)((void *)(OSTmrCall[prio].OSTmr),OSTmrCall[prio].OSTmrCallbackArg); /*執行回調函數*/

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

  }

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

  }

  }

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

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

  3 實(shí)驗測試

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

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

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


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

  經(jīng)實(shí)驗測試,系統運行正常,定時(shí)器回調函數得到及時(shí)的執行,系統實(shí)時(shí)性得到很大的提高。

  4 結語(yǔ)

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


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

評論


相關(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>