VWorks通用定時器設計與實現_第1頁
VWorks通用定時器設計與實現_第2頁
VWorks通用定時器設計與實現_第3頁
VWorks通用定時器設計與實現_第4頁
VWorks通用定時器設計與實現_第5頁
已閱讀5頁,還剩3頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、VxWorks通用定時器設計與實現摘要:在進行網絡通信設備開發時,需要使用通用定時器。本文在研究VxWorks系統看 門狗函數的基礎上,提出了基于看門狗函數的定制定時器的設計方法,可以使定制定時器的 最小周期滿足網絡通信設備開發的需要本文給出了定制定時器實現的思想。1概述VxWorks是Win dRiver公司開發的具有工業領導地位的高性能實時操作系統內核,具有 先進的網絡功能,易于設計高效的嵌入式系統目前已成為嵌入式操作系統的首選,并將其 作為通信產品的軟件平臺。在進行網絡通信設備開發時,需要用到定時器,如以周期為m秒對某個端口進行查詢、 以周期為n分對某個設備的性能數據進行統計等。而VxW

2、orks只提供了像watchDog(看門 狗),而沒有提供一個通用的定時器。本文提出的通用定時器設計方法,占用系統資源少, 運行效率高,并可根據需要定制滿足要求的定時器。2通用定時器的基本原理雖然在Vxworks沒有提供像windows中的定時器一樣好用的定時器,但可以利用 VxWorks的看門狗來實現定時器。對看門狗的操作函數主要有三個:創建看門狗函數 WDOG_ID wdCreate(void);啟動看門狗函數 STATUS wdStart(WDOG_ID wdId,int delay, FUNCPTR pRoutine, int parameter);刪除看門狗函數 STATUS wdD

3、elete(WDOG_ID wdId)。 通過對看門狗啟動函數進行研究發現,如果能夠在看門狗的響應函數中重新啟動看門狗.那 么就可以實現以一個固定的周期循環執行的定時器。以下是定時器的基本框架:void settimer(i nt in terval) int in_in terval;mn terval=sysClkRateGet()*i nterval;/* 將延時秒數轉化為 ticks 數*/gm wdID =wdCreate();/* 創建看門狗 */if(gm_perfHist_wdID = NULL)pri ntf(Could not create watchdog timern)

4、;return ;if(wdStart(gm_wdID,mnterval,(FUNCPTR) action_func, interval) = ERROR)/*啟動看門狗*/printf (Error in starti ng rout ine associated with timern);wdDelete(gm_wdlD);/*如果啟動看門狗不成功,貝刪除看門狗*/retur n;retur n;void actio n_fun c(i nt in terval) int m_i nterval;mn terval=sysClkRateGet()*i nterval;/*將 延時秒數轉化為

5、 ticks 數*/ if(wdStart(gm_wdID, mnterval, (FUNCPTR)action_fnnc, interval)= ERROR) /*啟動看門狗*/pr intf (Error in starti ng routi ne associated with timer、n);wdDelete(gm_wdID);retur n;/*執行用戶函數*/ 用戶只需調用settimer并給出以秒為單位的定時器周期,就可以建立一個定時器。3通用定時器設計通過調用settimer可實現一個基本的定時器,但在程序中對定時器的要求比較復雜。如 有可能在運行過程中,要求加人某個需用輪詢

6、的函數,這樣就要建立一個較為通用的定時器。 3.1通用定時器的設計思想通用定時器應能滿足用戶的要求.要能動態地將用戶需輪詢函數加入到定時器的輪詢隊列 中。要實現動態加載用戶需輪詢函數,可將用戶需輪詢函數串接成一個鏈表(鏈表的每個結 點稱為一個定時器用戶)。在每個定時器周期到期時,遍歷定時器用戶鏈表,執行用戶函數, 這樣就可以實現動態加載用戶需輪詢函數。如果輪詢周期與定時器周期相同,那么加入的用戶輪詢函數,在第一次執行時,其周期將 會小于所要求的輪詢周期,在最壞情況下,可能相差近一個周期。要解決這個問題可將定時 器的周期設置為較小,且在定時器用戶結點中記錄用戶的輪詢周期和距離輪詢周期到期所剩 余

7、時間,在定時器到期時,用剩余時間減去定時器周期,如果結果小于零,就執行用戶函數。 用這種方法可以解決第一次執行時的時差較大問題;另一方面,動態加載的用戶函數可以以 不同的周期進行輪詢。另一個問題是在定時器到期時遍歷定時器用戶鏈表并執行相關用戶函數時的效率:如果用 戶函數執行時間較長(如板間通信),由于函數的執行會影響鏈表下一個結點函數的執行。為 解決這個問題可以為每個用戶函數啟動一個任務。但反復地為用戶創建、刪除任務,會加重系統的開銷。解決這個問題可以在創建定時器用戶時,就為定時器用戶的響應函數創建一個 任務,并將此任務掛起。當要求的輪詢周期到期時,喚醒此任務;為了能夠正確地對此任務 進行操作

8、,就要在定時器用戶結點的數據結構中增加一個關聯任務標識。在創建定時器用戶 時,由用戶指明是否為其響應函數創建關聯任務。這樣,在定時器遍歷定時器用戶鏈表時, 如果檢測到關聯任務為無效值時,就直接執行用戶函數,而不創建新的任務。根據通用定時器的設計思想,可以設計出通用定時器結構如附圖所示:時宙通用老和射就鍛血仇沏系統初始化時,將設置并啟動一個默認的周期為1秒的定時器0,此定時可以滿足大部 分用戶的要求;如果此定時器不能滿足用戶的要求,也可以定制自己的定時器,在不需要使 用定制的定時器時,要將其刪除,否則由于定時器要占用一定的系統資源,而造成系統資源 的浪費。但系統默認定時器0是無法刪除的。用戶可以

9、將需要以一定周期運行的函數加入到符合要求的定時器的用戶隊列中,這樣用戶 的函數就可以以一定周期運行當用戶認為已經加入定時器用戶隊列的函數,不需要再周期 性運行時,可以將其從隊列中刪除。3.3通用定時器的數據結構通用定時器的數據結構分為兩部分,即定時器數據結構和定時器用戶數據結構。定時器數據結構:描述定時器的信息。包括用于標識此定時器的ID、用于分配定時 器用戶ID的有效索引值、定時器的周期、定時器所用的看門狗ID以及定時器用戶 隊列定時器用戶數據結構:描述每個加入定時器的用戶的信息。主要有定時器用戶ID、 用戶指定的輪詢周期、距離用戶指定周期到期剩余時間、用戶響應函數及響應函數 所帶的參數以及

10、參數長度。為了方便不同用戶使用,應將響應函數所帶參數設置為 無符號指針,這樣用戶就可以設置任何一種數據類型。如果用戶參數較多,可以采 用結構指針。3.4通用定時器的具體實現通用定時器的實現主要包括下面幾類函數:定時器核心實現函數:將定時器的實現框架進行擴充,使其能夠以較小的周期運行。當一周期到期時,依次遍歷定時器的用戶鏈表,將每個定時器用戶結點的剩余時間域減去定時器 周期,如果小于零,說明用戶指定的周期已經到期,則執行用戶的響應函數。如果此結點的關聯任務ID域為一個有效值,則喚醒相應的任務,否則直接執行用 戶響應函數。定時器初始化函數:主要完成的操作是首先設置一個全局的定時器鏈表針,建立一個系

11、 統默認定時器0并啟動這個默認定時器,在用戶開始使用定時器時,一定要對定時器系統 進行初始化。創建定制定時器函數:在系統初始化后默認創建了一個的定時器,但這個定時器可能不能 完全滿足用戶的要求,有的可能要求首次運行其響應函數的時差精度小于1秒,因此定制定 時器的周期允許小于1秒。考慮到VxWorks中的實際情況,這里規定定時的最小周期為0.1 秒。wxWorks中的看門狗是以click為時間單位,1秒等于60個click。因此.如果要求的 周期太小,導致定時器占用的CPU時間過長而降低系統性能。要注意的是在vxWorks中不提供強制類型轉換,所以,在使用此函數時,如果輸入參數為 整數則應以小數

12、形式給出,例如:參數為15,則要輸入15.0。刪除定制定時器函數:當用戶不再使用定制的定時器時,要刪除自己創建的定制定時器。 輸入的參數為已經存在的定時器的ID創建定時器用戶函數:要將一個需輪詢的用戶函數動態地加入到一個符臺要求的定時器 中,必須在這個定時器的定時器用戶鏈表中為這個用戶函數創建一個相應的結點,這樣就可 以按用戶要求的周期去周期性地調用用戶響應函數。根據通用定時器設計,如果用戶響應函 數執行時間較長則要為其創建一個任務。創建定時器用戶時,需要指定以下參數: timerlD:定時器ID,如果使用默認定時器,則設置為0;如果使用用戶定制定時器,則要填入由定制定時器函數返回的定時器ID。interval:用戶要求的運行周期;actio nFu nc:用戶要求周期性運行的函數;param :用戶函數的參數指針;pgram_fe n:用戶函數參數的長度;createTask:是否為用戶響應函數創建一個任務,1:創建,0:不創建。刪除定時器用戶函數:當用戶不再需要對定期輪詢某個函數時,要將其從定時器用戶鏈 表中刪除。4定時器的應用在使用通用定時器之前,要先初始化定時器系統,這樣就會在系統中,生成一個周期為1 秒的定時器,如果用戶要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論