關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > VxWorks下的異步通用定時器設計

        VxWorks下的異步通用定時器設計

        作者: 時間:2009-12-15 來源:網絡 收藏

        使用C++標準模板庫中的map實現對的存儲。第1個參數為的索引號,第2個參數為控制結構。使用map可以方便地實現基于定時器索引號的存儲管理和索引號的查找。使用map的定時器存儲示意圖如圖1所示。

        本文引用地址:http://www.104case.com/article/163412.htm


        用戶在調用SetTimer函數時,創建一個初始狀態為空的計數信號量timerArrv,同時生成一個任務timerTask等待該信號量,此時任務狀態為PEND;實例化一個CClk-Generator對象,創建看門狗啟動定時器。當定時器超時時,釋放timerArrv信號量,解除阻塞在timerArrv上的任務,回調用戶函數完成一個完整的定時過程。定時器的典型運行過程如圖2所示。

        圖2中最底下的虛線指向啟動看門狗后的中斷處理流程。中間部分表示定時器任務運行過程,可見用戶回調函數是運行在任務空間中。“回調函數釋放信號量”到定時器任務semTake”的虛線表示釋放信號量使任務解鎖。


        4 定時器的應用
        定時器管理控制模塊是用戶的唯一接口,使用Single-ton模式。只要調用CTimerCtrl::GetTimerCtrl()就可以完成對定時器的初始化,除對定時器進行相關操作之外,還包括通過sysClkRateSet函數設置系統時鐘每秒的tick數為1000。下面的例子包含2個定時器:一個是1 sN期性定時器;另一個是周期為5 s的一次性定時器。

        結 語
        從應用實例中可以看出,定時器的使用方法和Windows下的定時器沒有太大區別,接口簡單清晰。定時器可以應用于定時精度為ms的絕大部分應用程序中,對于精度要求高于ms的定時使用硬件輔助時鐘中斷更為合適,但是要注意操作系統對中斷處理函數的限制。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 临颍县| 瑞金市| 漳浦县| 鸡泽县| 揭西县| 合川市| 甘孜| 赣州市| 黄冈市| 镇原县| 昆山市| 讷河市| 屏南县| 荆州市| 建水县| 县级市| 冷水江市| 八宿县| 凤凰县| 长岛县| 青冈县| 皋兰县| 礼泉县| 玉环县| 乌恰县| 长岛县| 甘德县| 雷州市| 太原市| 上饶县| 临泽县| 康保县| 巴东县| 于田县| 肥东县| 永定县| 漯河市| 荥经县| 永胜县| 九龙坡区| 岗巴县|