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