国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種定時器鏈表的調度方法

      文檔序號:6643836閱讀:347來源:國知局
      專利名稱:一種定時器鏈表的調度方法
      技術領域
      本發(fā)明涉及嵌入式操作系統(tǒng)定時器領域,具體來說,涉及一種定時器鏈表的調度方法。
      背景技術
      嵌入式操作系統(tǒng)早已經融入我們的生活,除了日常生活中可以看到的家電產品、工業(yè)于軍事應用的獨立產品之外,許多大電腦系統(tǒng),事實上也是有許許多多小的嵌入式系統(tǒng)組成。
      嵌入式操作系統(tǒng)利用定時器處理多種事務,例如進程的調度、網絡協(xié)議的超時和系統(tǒng)統(tǒng)計數(shù)據(jù)的定時器更新等。因為操作系統(tǒng)對在處理多種事務時對計時偏差的依賴性很強,因此定時器作為操作系統(tǒng)時間管理的核心就顯得很重要。
      定時器又稱為計時器,計時器記錄了時間經過的軌跡,最簡單的定時器度量經過的時間且在需要時給出經過時間的信息,也叫間隔計時器,它將在一個特定的時間間隔之后產生中斷。
      目前嵌入式操作系統(tǒng)應用非常廣泛,定時器的數(shù)量需求越來越多,多定時器的計時方法有使用數(shù)組和隊列的方法,根據(jù)定時器的數(shù)目建立數(shù)組和隊列,把定時器分成激活和掛起狀態(tài),當定時器激活時,把定時器放入到隊列中,當超時或者中止該定時器時可以通過刪除動作進入掛起狀態(tài),掛起狀態(tài)的定時器是不會超時的,當啟動時可以通過插入動作使其進入激活狀態(tài)。每個計時周期到時,對進入激活狀態(tài)的定時器隊列不斷掃描,每次掃描都對隊列中的所有定時器的計時數(shù)減1,然后判斷結果是否為0,如果為0,則表示計時時間已到并進行到時處理,否則繼續(xù)進行計時操作。
      按照以上的方法,當定時器的數(shù)量到達一定的數(shù)量級別時,顯然存在明顯的缺點,掃描隊列的時間很長,占用系統(tǒng)資源較多,而嵌入式系統(tǒng)的CPU資源相當有限,定時器本身的任務不能占太多的資源,所以如果采用這種方法,就會占用較多的CPU資源。

      發(fā)明內容
      本發(fā)明所要解決的技術問題在于,克服現(xiàn)有技術中需對數(shù)組和隊列不斷掃描和排序操作而引起系統(tǒng)開銷大的不足,而提供一種定時器鏈表調度方法,可提高定時器的效率,減少系統(tǒng)的開銷。
      本發(fā)明所采用的技術方案在于提供一種定時器鏈表的調度方法,其包括(a)建立一個雙向定時器鏈表,該定時器鏈表包括一個以上的定時器節(jié)點,所述定時器節(jié)點存儲有預設定的時間間隔,及表示該定時器節(jié)點的時間間隔與上一個定時器節(jié)點時間間隔的差值的時間差值;(b)設置定時器的步驟,向定時器鏈表中插入一個待插入定時器節(jié)點;(c)中止定時器的步驟,從定時器鏈表中刪除一個待刪除定時器節(jié)點。
      其中,步驟(b)進一步包括(b1)停止當前定時器節(jié)點;(b2)將待插入定時器節(jié)點插入到定時器鏈表中;(b3)啟動定時器鏈表頭節(jié)點為當前定時器。
      其中,步驟(b2)進一步包括(b20)取出待插入定時器節(jié)點的時間間隔T;(b21)判斷定時器鏈表的頭節(jié)點是否為空節(jié)點,如果頭節(jié)點不為空節(jié)點,則取出當前節(jié)點的時間差值Nt;(b22)比較所述待插入定時器節(jié)點的時間間隔T是否大于或等于當前節(jié)點的時間差值Nt;(b23)如果步驟(b22)中所述待插入定時器節(jié)點的時間間隔T大于或等于當前節(jié)點的時間差值Nt,則T減去Nt然后賦值給T,轉入步驟(b25);(b24)如果步驟(b22)中所述待插入定時器節(jié)點的時間間隔T小于當前節(jié)點的時間差值Nt,則將Nt減去T然后賦值給Nt,并把該待插入定時器節(jié)點加入到當前定時器節(jié)點之前,并將其時間間隔設為T,然后轉至步驟(b3);(b25)判斷當前定時器節(jié)點的下一個定時器節(jié)點是否為空節(jié)點,如果該下一個定時器節(jié)點不為空節(jié)點,則將該下一定時器節(jié)點的時間差值賦值給當前節(jié)點的時間差值Nt,并轉至步驟(b22)。
      其中,當步驟(b11)中定時器鏈表的頭節(jié)點為空節(jié)點,或者步驟(b15)中當前定時器節(jié)點的下一個定時器節(jié)點為空節(jié)點時,進行下述步驟(b16)將待插入定時器節(jié)點添加到該定時器鏈表尾部,并轉入步驟(b3)。
      其中,步驟(c)進一步包括(c1)停止當前定時器節(jié)點;(c2)從定時器鏈表中刪除該待刪除定時器節(jié)點;(c3)啟動定時器鏈表頭節(jié)點為當前定時器。
      其中,步驟(c2)進一步包括(c20)計算當前定時器的剩余時間,其可通過下述公式計算得出Ns=當前時間-runTime和Nh=Nh-Ns,其中Ns為當前定時器剩余的時間值;Runtime為記錄當前定時器設置時的時間值;Nh為頭節(jié)點的時間差值;(c21)取出待刪除定時器節(jié)點的時間差值Nf;(c22)將待刪除定時器節(jié)點的下一節(jié)點的時間差值賦值給Nn,并刪除該待刪除定時器節(jié)點;(c23)判斷待刪除定時器節(jié)點的時間差值Nf是否等于零,如果該Nf等于零,則轉至步驟(c34),否則,將該Nn加上該Nf并將結果賦值Nn;(c24)將當前時間值賦值給runtime,并轉至步驟(c3)。
      實施本發(fā)明所提供的定時器鏈表的調度方法具有如下有益效果其操作簡單,僅僅只是通過插入和刪除鏈表節(jié)點就可以實現(xiàn)對定時器的管理和調度,而無需長時間的掃描鏈表,大大節(jié)省了CPU的開銷,提高了效率,對嵌入式系統(tǒng)性能有較大的提高。


      下面將結合附圖及實施例對本發(fā)明作進一步說明,附圖中圖1是本發(fā)明一種定時器鏈表的調度方法中定時器鏈表的示意圖;圖2是本發(fā)明一種定時器鏈表的調度方法中定時器節(jié)點的示意圖;圖3是本發(fā)明一種定時器鏈表的調度方法中設置定時器的流程圖;圖4圖3中將定時器節(jié)點插入定時器鏈表的流程圖;圖5是本發(fā)明一種定時器鏈表的調度方法中中止定時器的流程圖;圖6是圖5中從定時器鏈表刪除定時器節(jié)點的流程圖。
      具體實施例方式
      請參見圖1,示出了本發(fā)明一種定時器鏈表的調度方法中的定時器鏈表的示意圖。本發(fā)明是采用一種雙向鏈表的形式對定時器進行管理,其包括有至少一個節(jié)點,在圖1中示出了頭節(jié)點、節(jié)點1、節(jié)點2、節(jié)點3及尾節(jié)點,本發(fā)明不限于此。其中,每個節(jié)點可以包含有一個定時器的信息,相當于一個定時器,可稱為定時器節(jié)點。其中虛線部分表示對該定時器鏈表進行的操作,如將鏈表頭節(jié)點設置為當前定時器、插入一個定時器節(jié)點、刪除一個定時器節(jié)點等。
      請參見圖2,示出了本發(fā)明一種定時器鏈表的調度方法中定時器節(jié)點的示意圖;在該圖2中,僅畫出三個定時器節(jié)點的結構及連接關系。其中節(jié)點的設置可參見下面的程序段typedef struct tagTIMER_NODE{API_TIMER_DATA timerData; 定時器的私有數(shù)據(jù)DWORD eventNum;定時器到時發(fā)生次數(shù);DWORD activeInterval; 定時器時間差值struct tagTIMER_NODE*pPrev; 指向上一節(jié)點struct tagTIMER_NODE*pNext; 指向下一節(jié)點}TIMER_NODE;而其中定時器的私有數(shù)據(jù)(timerData)結構如下所設置typedef struct tagAPI_TIMER_DATA{void*hWnd; /*設置定時器窗口的句柄*/DWORD nIDEvent;/*定時器ID號*/DWORD uElapse; /*定時器的時間間隔*/void(*lpTimerFunc)(); /*定時器到達時需要處理的事務*/DWORD nThreadID; /*線程ID號*/}API_TIMER_DATA;從上面可以看出,每個定時器節(jié)點中均包括有timerData、eventNum、activeInterval、pPrev及pNex。其中timerData記錄有定時器的私有數(shù)據(jù);eventNum記錄有定時器到時發(fā)生次數(shù);activeInterval記錄有定時器時間差值;pPrev記錄有指向上一節(jié)點的指針;pNex記錄有下一節(jié)點的指針。而在私有數(shù)據(jù)中又設有定時器的時間間隔、定時器窗口的句柄、定時器ID、定時器到時需要處理的事務和線程ID號等。
      其中,每個定時器節(jié)點中保存的時間間隔是指用戶為定時器實際設置的時間值;而時間差值為當前節(jié)點與上一個節(jié)點的時間間隔之間的差值;舉例來說用戶設置了時間間隔為30毫秒的定時器節(jié)點1和時間間隔為50毫秒的定時器節(jié)點2;假設節(jié)點1之前沒有其他節(jié)點。則節(jié)點1和節(jié)點2的時間間隔分別為30毫秒和50毫秒;節(jié)點1和節(jié)點2的時間差值分別為30毫秒(30-0)和20毫秒(50-30)。本發(fā)明主要是通過定時器中的時間差值對定時器節(jié)點進行管理的。定時器的響應是依據(jù)定時器時間差值來設置的,那么當一個定時器到時只需要移動定時器在鏈表中的位置,設置定時器只要插入節(jié)點即可,刪除定時器只要刪除節(jié)點即可。
      本發(fā)明對定時器鏈表進行調度的方法中至少包括有設置定時器的步驟和中止定時器步驟。下面結合圖3到圖4進行具體說明。
      一并參照圖3與圖4,本發(fā)明中,設置定時器的流程包括停止當前定時器(步驟31);把定時器插入定時器鏈表中(步驟32),把鏈表頭節(jié)點設置為當前觸發(fā)的定時器(步驟33)。其中步驟32的具體流程為取出待插入定時器節(jié)點的時間間隔T(步驟40);然后判斷定時器鏈表的頭節(jié)點是否為空節(jié)點(步驟41)?如果步驟41中定時器鏈表的頭節(jié)點為空節(jié)點,則流程轉至步驟48,將待插入定時器節(jié)點添加到定時器鏈表尾部;否則,取出當前節(jié)點的時間差值Nt(步驟42);比較T是否大于或等于Nt(步驟43);如果步驟43中T大于或等于Nt,則T減去Nt然后賦值給T(步驟45),流程進入步驟46;如果步驟43中T小于Nt,則將Nt減去T然后賦值給Nt,并把該待插入定時器節(jié)點加入到當前定時器節(jié)點之前,并將其時間間隔設為T,然后轉入步驟33;在步驟46中,需判斷當前節(jié)點的下一個節(jié)點是否為空節(jié)點;如果在步驟46中的判斷結果為下一節(jié)點不是空節(jié)點,則在步驟47中,將下一節(jié)點的時間差值Nt->next賦值給當前節(jié)點的Nt,并轉至步驟43;如果在步驟46中的判斷結果為下一節(jié)點是空節(jié)點,則在步驟48中,將待插入定時器節(jié)點添加到該定時器鏈表的尾部。當將該待插入定時器節(jié)點添加到該定時器鏈表中(在鏈表尾部或當前定時器節(jié)點之前)之后,接下來在步驟33,啟動定時器鏈表的頭節(jié)點為當前定時器。
      其中,上述所提到的T為待插入定時器節(jié)點時間間隔;Nt為定時器鏈表當前節(jié)點的時間差值;Nt->next為定時器鏈表當前節(jié)點的下一個節(jié)點的時間差值。
      一并參照圖5與圖6,本發(fā)明中,中止定時器的流程包括停止當前定時器(步驟51);從定時器鏈表中刪除某定時器節(jié)點(下面將該將被刪除的定時器節(jié)點稱為待刪除定時器節(jié)點)(步驟52);把定時器鏈表的頭節(jié)點設置為當前觸發(fā)的定時器(步驟53)。其中步驟52的具體流程為計算當前定時器的剩余時間,將當前時間減去runTime并將結果賦值給Ns,將Nh減去該Ns并賦值給Nh,即執(zhí)行公式Ns=當前時間-runTime和Nh=Nh-(當前時間-runTime)(步驟60);從定時器鏈表中找到對應的待刪除定時器節(jié)點并取出其時間差值Nf(步驟61);將待刪除定時器節(jié)點的下一節(jié)點的時間差值賦值給Nn,并刪除該待刪除定時器節(jié)點(步驟62);并判斷該時間差值Nf是否等于零(步驟63);如果在步驟63中,該Nf等于零,則轉至步驟65,將當前時間值賦值給runtime;如果在步驟63中,該Nf不等于零,則在步驟64中,將Nn加上Nf再將結果賦值給Nn;并轉步驟65,當前時間值賦值給runtime;當上述步驟完成后,則流程轉至步驟53,把定時器鏈表的頭節(jié)點設置為當前觸發(fā)的定時器并啟動。
      其中,上述所提到的Ns為當前定時器剩余的時間值;Runtime為記錄當前定時器設置時的時間值;Nf為待刪除定時器節(jié)點的時間差值;Nh為頭節(jié)點的時間差值;Nn為待刪除定時器節(jié)點的下一定時器節(jié)點的時間差值。
      由于雙向鏈表結構具有比較優(yōu)良的特性,這種數(shù)據(jù)結構在每次插入和刪除節(jié)點操作時能迅速地進行調整,保證操作之后數(shù)據(jù)仍然保持完整的有序鏈表,而每個節(jié)點的保存時間值是相對前面節(jié)點的時間差值。
      由以上方法可以看出,本發(fā)明操作簡單,沒有由于長時間的掃描鏈表所產生的開銷,僅僅只是通過插入和刪除鏈表節(jié)點就可以實現(xiàn)對定時器的管理和調度,大大節(jié)省了CPU的開銷,提高效率,對嵌入式系統(tǒng)性能有較大的提高。
      權利要求
      1.一種定時器鏈表的調度方法,其特征在于,包括(a)建立一個雙向定時器鏈表,該定時器鏈表包括一個以上的定時器節(jié)點,所述定時器節(jié)點存儲有預設定的時間間隔,及表示該定時器節(jié)點的時間間隔與上一個定時器節(jié)點時間間隔的差值的時間差值;(b)設置定時器的步驟,向定時器鏈表中插入一個待插入定時器節(jié)點;(c)中止定時器的步驟,從定時器鏈表中刪除一個待刪除定時器節(jié)點。
      2.根據(jù)權利要求1所述的定時器鏈表的調度方法,其特征在于,步驟(b)進一步包括(b1)停止當前定時器節(jié)點;(b2)將待插入定時器節(jié)點插入到定時器鏈表中;(b3)啟動定時器鏈表頭節(jié)點為當前定時器。
      3.根據(jù)權利要求2所述的定時器鏈表的調度方法,其特征在于,步驟(b2)進一步包括((b20)取出待插入定時器節(jié)點的時間間隔T;(b21)判斷定時器鏈表的頭節(jié)點是否為空節(jié)點,如果頭節(jié)點不為空節(jié)點,則取出當前節(jié)點的時間差值Nt;(b22)比較所述待插入定時器節(jié)點的時間間隔T是否大于或等于當前節(jié)點的時間差值Nt;(b23)如果步驟(b22)中所述待插入定時器節(jié)點的時間間隔T大于或等于當前節(jié)點的時間差值Nt,則T減去Nt然后賦值給T,轉入步驟(b25);(b24)如果步驟(b22)中所述待插入定時器節(jié)點的時間間隔T小于當前節(jié)點的時間差值Nt,則將Nt減去T然后賦值給Nt,并把該待插入定時器節(jié)點插入到當前定時器節(jié)點之前,并將其時間間隔設為T,然后轉至步驟(b3);(b25)判斷當前定時器節(jié)點的下一個定時器節(jié)點是否為空節(jié)點,如果該下一個定時器節(jié)點不為空節(jié)點,則將該下一定時器節(jié)點的時間差值賦值給當前節(jié)點的時間差值Nt,并轉至步驟(b22)。
      4.根據(jù)權利要求3所述的定時器鏈表的調度方法,其特征在于,當步驟(b11)中定時器鏈表的頭節(jié)點為空節(jié)點,或者步驟(b15)中當前定時器節(jié)點的下一個定時器節(jié)點為空節(jié)點時,進行下述步驟(b16)將待插入定時器節(jié)點添加到該定時器鏈表尾部,并轉入步驟(b3)。
      5.根據(jù)權利要求1至4任一項所述的定時器鏈表的調度方法,其特征在于,步驟(c)進一步包括(c1)停止當前定時器節(jié)點;(c2)從定時器鏈表中刪除該待刪除定時器節(jié)點;(c3)啟動定時器鏈表頭節(jié)點為當前定時器。
      6.根據(jù)權利要求5所述的定時器鏈表的調度方法,其特征在于,步驟(c2)進一步包括(c20)計算當前定時器的剩余時間,其可通過下述公式計算得出Ns=當前時間-runTime和Nh=Nh-Ns,其中Ns為當前定時器剩余的時間值;Runtime為記錄當前定時器設置時的時間值;Nh為頭節(jié)點的時間差值;(c21)取出待刪除定時器節(jié)點的時間差值Nf;(c22)將待刪除定時器節(jié)點的下一節(jié)點的時間差值賦值給Nn,并刪除該待刪除定時器節(jié)點;(c23)判斷待刪除定時器節(jié)點的時間差值Nf是否等于零,如果該Nf等于零,則轉至步驟(c34),否則,將該Nn加上該Nf并將結果賦值Nn;(c24)將當前時間值賦值給runtime,并轉至步驟(c3)。
      全文摘要
      本發(fā)明涉及一種定時器鏈表的調度方法,包括(a)建立一個雙向定時器鏈表,該定時器鏈表包括一個以上的定時器節(jié)點,所述定時器節(jié)點存儲有預設定的時間間隔,及表示該定時器節(jié)點的時間間隔與上一個定時器節(jié)點時間間隔的差值的時間差值;(b)設置定時器的步驟,向定時器鏈表中插入一個待插入定時器節(jié)點;(c)中止定時器的步驟,從定時器鏈表中刪除一個待刪除定時器節(jié)點。本發(fā)明操作簡單,僅僅通過插入和刪除鏈表節(jié)點就可以實現(xiàn)對定時器的管理和調度,而無需長時間的掃描鏈表,可節(jié)省CPU的開銷,提高工作效率,對嵌入式系統(tǒng)性能有較大的提高。
      文檔編號G06F1/14GK1936765SQ200510100188
      公開日2007年3月28日 申請日期2005年9月30日 優(yōu)先權日2005年9月30日
      發(fā)明者胡本平 申請人:康佳集團股份有限公司
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1