VxWorks下基于看門狗的通用定時(shí)器設(shè)計(jì)
2.3.3 定時(shí)器管理模塊實(shí)現(xiàn)
定時(shí)器管理模塊是共享定時(shí)機(jī)制的核心,用來維護(hù)定時(shí)器的注冊、注銷以及定時(shí)器鏈表的排序、刪除、清空等操作。本文引用地址:http://www.ex-cimer.com/article/148020.htm
定時(shí)器的注冊流程如圖4所示,首先使用RegistTimer()函數(shù)注冊一個(gè)新的定時(shí)器任務(wù),并將該定時(shí)器的TimerInfo結(jié)構(gòu)插入鏈表中維護(hù),然后針對該結(jié)構(gòu)中的tExe變量對鏈表按照升序排列,執(zhí)行時(shí)間最小的將置于表頭;若在插入該定時(shí)器任務(wù)之前鏈表中為空,則定時(shí)器處于休眠狀態(tài),此時(shí)置定時(shí)器狀態(tài)為運(yùn)行;若插入前鏈表中己存在其他定時(shí)器任務(wù),則無須重啟定時(shí)器。
定時(shí)器的注銷流程如圖5所示,首先使用UnRegistTimer()函數(shù)注銷一個(gè)己注冊的定時(shí)器任務(wù),并將該定時(shí)器的Timerlnfo結(jié)構(gòu)從鏈表中刪除,然后針對該結(jié)構(gòu)中的tExe變量對鏈表按照升序排列,執(zhí)行時(shí)間最小的將置于表頭;若在刪除該定時(shí)器任務(wù)之前鏈表中除了該定時(shí)任務(wù)沒有其他定時(shí)任務(wù)時(shí),則置定時(shí)器為休眠狀態(tài);反之,則無須重置定時(shí)器狀態(tài)。
3 結(jié)束語
共享定時(shí)器提供了簡單、高效、通用的定時(shí)方法,使用者可以拋開管理諸多看門狗定時(shí)器的煩惱,從而專心于系統(tǒng)其他方面的設(shè)計(jì)。作為一個(gè)通用的系統(tǒng)組件,開發(fā)人員不僅可以直接使用,縮短開發(fā)時(shí)間,也可以繼承此定時(shí)器類,實(shí)現(xiàn)更多豐富的功能,提供了良好的擴(kuò)展性與靈活性。
該機(jī)制在VxWorks的網(wǎng)絡(luò)報(bào)文應(yīng)答、設(shè)備狀態(tài)監(jiān)控等方面得到了廣泛應(yīng)用,在有效節(jié)省系統(tǒng)資源的同時(shí)提高了系統(tǒng)定時(shí)機(jī)制的靈活性。
評論