關 閉

        新聞中心

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

        μC/OSII中軟件定時器的優缺點與改進

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

          2.2.4 回調函數任務OSTmr_TaskCallback()

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

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

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

          OSSemPend(OSTmrSemCallback, 0, err);

          OSTmr_Lock();/*上鎖*/

          while (OSTmrRdyGrp) {

          ……/*從就緒表中得到最高優先級的定時器回調函數*/

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

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

          pfnct = OSTmrCall[prio].OSTmrCallback;

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

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

          }

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

          }

          }

          由以上代碼可知,訪問就緒表時定時器上鎖,而執行回調函數時處于定時器解鎖狀態。如果回調函數執行時間較長,在下一個定時器節拍到來時,定時器掃描任務可以得到及時的執行,當前回調函數執行完成后,可以及時得執行就緒表中最高優先級定時器的回調函數。由此可以看出,高優先級定時器的回調函數得到及時執行,系統的實時性提高。

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

          3 實驗測試

          本次實驗使用開發環境IAR 5.30,以基于CortexM3內核的路虎LPC1768開發板作為硬件實驗平臺[6],對實時操作系統μ 2.86進行

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

        軟件定時器運行界面


        圖2 定時器運行界面

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

          4 結語

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


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 申扎县| 黔南| 峡江县| 自治县| 阳山县| 句容市| 西安市| 遵化市| 江北区| 黄骅市| 池州市| 娄底市| 蓬安县| 南宁市| 龙山县| 广宁县| 德州市| 涡阳县| 诸城市| 永泰县| 阿荣旗| 金昌市| 水富县| 江陵县| 新闻| 曲靖市| 京山县| 山东| 瑞昌市| 兴海县| 淮阳县| 镇坪县| 宝应县| 水城县| 阿鲁科尔沁旗| 敦化市| 天门市| 隆安县| 西吉县| 丰宁| 和龙市|