VxWorks下基于看門(mén)狗的通用定時(shí)器設計
2.3 定時(shí)器實(shí)現
2.3.1 定時(shí)器軟件結構
共享定時(shí)器軟件結構如圖2所示:本文引用地址:http://dyxdggzs.com/article/148020.htm
CWatchDogTimer類(lèi)完成了對看門(mén)狗定時(shí)器的封裝,它由一些通用的函數來(lái)維護一個(gè)看門(mén)狗定時(shí)器。其中Create()函數用來(lái)創(chuàng )建一個(gè)看門(mén)狗定時(shí)器;Delete()用來(lái)刪除該定時(shí)器;Start()用來(lái)啟動(dòng)定時(shí)任務(wù);Cancel()用來(lái)暫停定時(shí)器工作,此時(shí)再使用Start()函數可以恢復定時(shí)器的運行。
TimerInfo數據結構由tExe與tInterval兩個(gè)屬性構成,tExe記錄定時(shí)器的執行時(shí)間,tInterval表示定時(shí)器的時(shí)間間隔。
TimerList用來(lái)維護多個(gè)TimerInfo結構的變量,每個(gè) TiraerInfo變量記錄一個(gè)定時(shí)器參數信息。
CEffieientTimer類(lèi)完成對多個(gè)定時(shí)任務(wù)的管理,包括RegistTimer()函數實(shí)現注冊一個(gè)定時(shí)器;UnRegistTimer()用來(lái)注銷(xiāo)一個(gè)定時(shí)器;ClearTimerList()用來(lái)清空定時(shí)器列表中所有定時(shí)器任務(wù);IsEmpty()用來(lái)判斷定時(shí)器列表是否為空。
2.3.2 看門(mén)狗定時(shí)模塊實(shí)現
看門(mén)狗定時(shí)模塊處理流程如圖3所示。
看門(mén)狗定時(shí)器模塊是共享定時(shí)器的基礎,它實(shí)現了單一定時(shí)器的建立、啟動(dòng)、刪除、取消等功能。首先通過(guò)Create()函數建立一個(gè)看門(mén)狗定時(shí)器,同時(shí)設定定時(shí)器時(shí)延、定時(shí)次數等參數;然后通過(guò)Start()函數啟動(dòng)定時(shí)器;看門(mén)狗程序判斷是否到達時(shí)間間隔,如果到達則開(kāi)始執行ISR程序,如果沒(méi)有到達則繼續等待;當執行完ISR程序后,定時(shí)器將判斷當前執行次數是否到達執行總次數,如果是則結束該次定時(shí)任務(wù),若不是程序將跳轉到重新啟動(dòng)定時(shí)器后依次執行。
評論