專利名稱:一種定時(shí)器的實(shí)現(xiàn)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及定時(shí)器技術(shù)領(lǐng)域,具體涉及一種定時(shí)器的實(shí)現(xiàn)方法和裝置。
背景技術(shù):
目前嵌入式系統(tǒng)應(yīng)用已經(jīng)深入到我們生活中的各個(gè)領(lǐng)域,手機(jī)、機(jī)頂盒、MP4播放 器、交換機(jī)、路由器等都可以歸結(jié)為嵌入式設(shè)備。在這些嵌入式設(shè)備中,有一部分設(shè)備需 要功能強(qiáng)大、實(shí)時(shí)性強(qiáng)的操作系統(tǒng)。美國(guó)Wind RiverSystem公司(即WRS公司)推出的 Vxfforks正是這類操作系統(tǒng)中的佼佼者。Vxfforks是一個(gè)實(shí)時(shí)操作系統(tǒng),其應(yīng)用實(shí)例包括著 名的火星探測(cè)車、愛國(guó)者導(dǎo)彈等。自從VxWorks 5. 4進(jìn)入中國(guó)十多年以來,呈現(xiàn)了面向構(gòu)架 多、應(yīng)用范圍廣、民用化的特性,越來越多的嵌入式設(shè)備轉(zhuǎn)而采用VxWorks實(shí)現(xiàn)。在VxWorks應(yīng)用軟件開發(fā)過程中經(jīng)常會(huì)用到定時(shí)器。VxWorks提供的“看門狗”定 時(shí)器(Watchdog Timer)能夠?qū)⒁粋€(gè)特定的時(shí)間間隔與一個(gè)C調(diào)用過程聯(lián)系起來。看門狗 定時(shí)器基于系統(tǒng)時(shí)鐘中斷,連接到看門狗定時(shí)器的函數(shù)同樣運(yùn)行在系統(tǒng)時(shí)鐘中斷服務(wù)程序 中。如果操作系統(tǒng)由于種種原因(如在系統(tǒng)時(shí)鐘中斷前的中斷或者內(nèi)核狀態(tài)),將不能立即 執(zhí)行的函數(shù)存放在tExcTask任務(wù)的隊(duì)列中,則隊(duì)列中的函數(shù)將以tExc-Task任務(wù)的優(yōu)先級(jí) 運(yùn)行(通常為0)。操作系統(tǒng)對(duì)中斷服務(wù)程序的各種限制同樣適用于連接到看門狗定時(shí)器的 用戶函數(shù),如不能使用printf、semTake等。雖然看門狗定時(shí)器提供的定時(shí)機(jī)制簡(jiǎn)單易用,但是在一些場(chǎng)合下直接使用看門狗 定時(shí)器可能會(huì)出問題。例如交換機(jī)中需要維護(hù)的介質(zhì)訪問控制(MediaAccess Control, mac)地址表最多時(shí)候可能達(dá)到幾千個(gè),路由器中需要維護(hù)的會(huì)話表最多時(shí)候可能達(dá)到幾萬 個(gè),這些表項(xiàng)根據(jù)不同的狀態(tài)有不同的存活時(shí)間,如果某個(gè)表項(xiàng)在一段時(shí)間內(nèi)不再被使用 就需要將該表項(xiàng)進(jìn)行回收或者釋放。如果為每個(gè)表項(xiàng)創(chuàng)建一個(gè)看門狗定時(shí)器,當(dāng)某個(gè)時(shí)刻到期的定時(shí)器很多時(shí),假設(shè) 有300個(gè),那么系統(tǒng)就要進(jìn)行300次中斷處理,在此期間其它任務(wù)和中斷都不能執(zhí)行,影響 了系統(tǒng)穩(wěn)定性。如果使用看門狗定時(shí)器周期喚醒某個(gè)任務(wù)去檢查這些表項(xiàng),當(dāng)表項(xiàng)數(shù)量比 較大假設(shè)有1000個(gè),定時(shí)器每次到期時(shí)該任務(wù)都要把這1000個(gè)表項(xiàng)全部檢查一遍,可能到 期的表項(xiàng)只有幾個(gè),效率是非常低的。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種定時(shí)器的實(shí)現(xiàn)方法和裝置,可以及時(shí)的按順序依次處理到 期的定時(shí)器任務(wù),可以減少對(duì)定時(shí)器任務(wù)是否到期進(jìn)行檢查所需的時(shí)間,從而可以提高操 作系統(tǒng)的穩(wěn)定性和可靠性?!N定時(shí)器的實(shí)現(xiàn)方法,包括定時(shí)器處理任務(wù)將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表;定時(shí)器中斷判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn)入中斷處理,發(fā)送一 個(gè)激活信號(hào)給所述定時(shí)器處理任務(wù);
所述定時(shí)器處理任務(wù)在收到所述激活信號(hào)后,按照所述定時(shí)器鏈表中各個(gè)定時(shí)器 的排序進(jìn)行定時(shí)器任務(wù)處理。 一種定時(shí)器的實(shí)現(xiàn)裝置,包括定時(shí)器處理任務(wù)單元和定時(shí)器中斷單元,所述定時(shí) 器處理任務(wù)單元包括排序單元和處理單元;所述定時(shí)器中斷單元,用于判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn)入中 斷處理,發(fā)送一個(gè)激活信號(hào)給所述定時(shí)器處理任務(wù)單元。所述排序單元,用于將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表;所述處理單元,用于接收所述定時(shí)器中斷單元發(fā)送的激活信號(hào),按照所述定時(shí)器 鏈表中各個(gè)定時(shí)器的排序進(jìn)行定時(shí)器任務(wù)處理。本發(fā)明實(shí)施例提供的定時(shí)器的實(shí)現(xiàn)方法,采用由定時(shí)器處理任務(wù)將各個(gè)定時(shí)器排 序以生成一個(gè)定時(shí)器鏈表,在收到定時(shí)器中斷發(fā)送的激活信號(hào)后,按照定時(shí)器鏈表中各個(gè) 定時(shí)器的排序進(jìn)行定時(shí)器任務(wù)處理的技術(shù)方案,可以及時(shí)的按排序依次處理到期的定時(shí)器 任務(wù),不會(huì)產(chǎn)生大量的中斷,從而不影響其他任務(wù)的執(zhí)行;按排序?qū)Χ〞r(shí)器任務(wù)是否到期進(jìn) 行檢查,不必檢查全部的定時(shí)器任務(wù),可以減少進(jìn)行檢查所需的時(shí)間,從而可以提高操作系 統(tǒng)的穩(wěn)定性和可靠性。
圖1是本發(fā)明實(shí)施例提供的定時(shí)器的實(shí)現(xiàn)方法的流程圖;圖2是本發(fā)明實(shí)施例提供的定時(shí)器的實(shí)現(xiàn)裝置的示意圖;圖3是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)一的示意圖;圖4是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)二的示意圖;圖5是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)三的示意圖;圖6是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)四的示意圖;圖7是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)五的示意圖;圖8是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)六的示意圖;圖9是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)七的示意圖;圖10是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)八的示意圖;圖11是本發(fā)明實(shí)施例方法的定時(shí)器鏈表狀態(tài)九的示意圖。
具體實(shí)施例方式本發(fā)明實(shí)施例提供一種提供的定時(shí)器的實(shí)現(xiàn)方法和裝置,以下分別進(jìn)行詳細(xì)說 明。實(shí)施例一、請(qǐng)參考圖1,本實(shí)施例提供一種定時(shí)器的實(shí)現(xiàn)方法,包括步驟101、定時(shí)器處理任務(wù)將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表。本步驟中,首先創(chuàng)建一個(gè)定時(shí)器處理任務(wù),準(zhǔn)備進(jìn)行定時(shí)器處理,該任務(wù)對(duì)應(yīng)一個(gè) 信號(hào)量X,該任務(wù)平時(shí)被信號(hào)量X堵塞,所謂信號(hào)量就相當(dāng)于一個(gè)標(biāo)識(shí);堵塞就是指定時(shí)器 沒到時(shí)間時(shí)就沒有信號(hào)量,任務(wù)不會(huì)被執(zhí)行,定時(shí)器到時(shí)間時(shí)信號(hào)量被激活后,任務(wù)才能執(zhí) 行,以此提高系統(tǒng)效率。
該創(chuàng)建的定時(shí)器處理任務(wù)將各個(gè)定時(shí)器按照預(yù)定的規(guī)則排序,并彼此連接生成一 個(gè)定時(shí)器鏈表,以準(zhǔn)備在信號(hào)量X被激活后,按照該定時(shí)器鏈表中定時(shí)器的排序依次處理 到期的定時(shí)器任務(wù)。本文中所述的定時(shí)器可以是軟件定時(shí)器。102、定時(shí)器中斷判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn)入中斷處理,發(fā) 送一個(gè)激活信號(hào)給所述定時(shí)器處理任務(wù)。設(shè)置一個(gè)定時(shí)器中斷(即看門狗定時(shí)器),當(dāng)定時(shí)計(jì)數(shù)到預(yù)設(shè)的中斷值時(shí),引起定 時(shí)器中斷,系統(tǒng)進(jìn)入中斷處理,否則定時(shí)器繼續(xù)計(jì)數(shù)。該中斷值根據(jù)實(shí)際來定,通常設(shè)定為 1秒即可,如果某些特殊場(chǎng)合需要毫秒級(jí)定時(shí)器的話,通過sysClkRatekt將系統(tǒng)時(shí)鐘tick 數(shù)設(shè)為1000即可。在中斷處理中,定時(shí)器中斷激活信號(hào)量X,S卩,定時(shí)器中斷發(fā)送一個(gè)激活信號(hào)給定 時(shí)器處理任務(wù),以由定時(shí)器處理任務(wù)進(jìn)行定時(shí)器任務(wù)處理;隨后定時(shí)器中斷重新啟動(dòng),退出 中斷處理。103、定時(shí)器處理任務(wù)在收到激活信號(hào)后,按照定時(shí)器鏈表中各個(gè)定時(shí)器的排序進(jìn) 行定時(shí)器任務(wù)處理。定時(shí)器處理任務(wù)實(shí)時(shí)檢測(cè)對(duì)應(yīng)各種任務(wù)的所有信號(hào)量,當(dāng)發(fā)現(xiàn)信號(hào)量X被激活, 即,定時(shí)器處理任務(wù)在收到激活信號(hào)后,定時(shí)器處理任務(wù)調(diào)用信號(hào)量X對(duì)應(yīng)的任務(wù),對(duì)到期 的定時(shí)器任務(wù)進(jìn)行處理,處理完成后該任務(wù)被信號(hào)量X堵塞,換句話說,就是停止進(jìn)行定時(shí) 器任務(wù)處理。在一種實(shí)施方式中,步驟101可以具體包括101a、生成一個(gè)定時(shí)器鏈表頭。該定時(shí)器鏈表頭可以包括指向所述定時(shí)器鏈表中 第一個(gè)定時(shí)器的第一指針、指向所述定時(shí)器鏈表中最后一個(gè)定時(shí)器的第二指針和一個(gè)鏈表 到期時(shí)間,所述鏈表到期時(shí)間等于所述最后一個(gè)定時(shí)器的到期時(shí)間。101b、以定時(shí)器的到期時(shí)間作為排序依據(jù),將各個(gè)各個(gè)定時(shí)器連接到所述定時(shí)器 鏈表頭之后生成定時(shí)器鏈表,其中,將到期時(shí)間相同的定時(shí)器以調(diào)用的先后次序作為排序 依據(jù),連接到定時(shí)器鏈表中。定時(shí)器鏈表中的每個(gè)定時(shí)器可以包括指向上一個(gè)定時(shí)器的上指針、指向下一個(gè) 定時(shí)器的下指針、指向定時(shí)器任務(wù)對(duì)應(yīng)的函數(shù)的函數(shù)指針以及該定時(shí)器的到期時(shí)間和刪除 時(shí)間,所述刪除時(shí)間等于該定時(shí)器的到期時(shí)間減去上一個(gè)定時(shí)器的到期時(shí)間。在一種實(shí)施方式中,步驟103具體可以包括定時(shí)器處理任務(wù)在收到激活信號(hào)后,判斷是否達(dá)到所述定時(shí)器鏈表中的第一個(gè)定 時(shí)器的到期時(shí)間,若是,則處理該定時(shí)器任務(wù),并將該定時(shí)器從所述定時(shí)器鏈表中取出,否 則,停止進(jìn)行定時(shí)器任務(wù)處理。從而,在鏈表中的第一個(gè)定時(shí)器到期時(shí),處理該定時(shí)器任務(wù),并將該定時(shí)器從定時(shí) 器鏈表中取出;于是原來的第二個(gè)定時(shí)器成為新的第一個(gè)定時(shí)器,則定時(shí)器處理任務(wù)在再 次判斷新的第一個(gè)定時(shí)器是否到期,從而處理或停止;直到未到期的定時(shí)器最終成為第一 個(gè)定時(shí)器為止,定時(shí)器處理任務(wù)停止進(jìn)行定時(shí)器任務(wù)處理,等到接收新的激活信號(hào)。在一個(gè)實(shí)施方式中,步驟101之后還包括為定時(shí)器處理任務(wù)設(shè)定一個(gè)優(yōu)先級(jí)。定 時(shí)器處理任務(wù)根據(jù)設(shè)定的優(yōu)先級(jí)進(jìn)行定時(shí)器任務(wù)處理。一般情況下,優(yōu)先級(jí)的設(shè)定范圍為1-100,該任務(wù)的優(yōu)先級(jí)可以設(shè)置得高一些,這樣就能及時(shí)處理到期的定時(shí)器,如果過低,有 些到期的定時(shí)器就可能會(huì)被延遲處理。采用本實(shí)施例方法,可以及時(shí)的按排序依次處理到期的定時(shí)器任務(wù),不會(huì)產(chǎn)生大 量的中斷,從而不影響其他任務(wù)的執(zhí)行;按排序?qū)Χ〞r(shí)器任務(wù)是否到期進(jìn)行檢查,不必檢查 全部的定時(shí)器任務(wù),可以減少進(jìn)行檢查所需的時(shí)間,從而可以提高操作系統(tǒng)的穩(wěn)定性和可靠性。下面,對(duì)優(yōu)選實(shí)施方式中定時(shí)器處理任務(wù)如何生成定時(shí)器鏈表和如何按照該定時(shí) 器鏈表中的排序進(jìn)行定時(shí)器任務(wù)處理,做進(jìn)一步詳細(xì)的說明。每個(gè)定時(shí)器對(duì)應(yīng)一個(gè)結(jié)構(gòu),該結(jié)構(gòu)有兩個(gè)指針成員,一個(gè)成員next指向下一個(gè)定 時(shí)器,另一個(gè)成員prev指向上一個(gè)定時(shí)器,該結(jié)構(gòu)還有一個(gè)函數(shù)指針成員func,定時(shí)器到 期時(shí)執(zhí)行該指針指向的函數(shù)(即該定時(shí)器任務(wù)),該結(jié)構(gòu)還有一個(gè)成員time表示該定時(shí)器 什么時(shí)候到期,該結(jié)構(gòu)還有一個(gè)成員delta,當(dāng)delta為0時(shí)表示定時(shí)器到期,可以執(zhí)行該定 時(shí)器任務(wù)和將該定時(shí)器從定時(shí)器鏈表中刪除。另外有一個(gè)結(jié)構(gòu)是定時(shí)器的頭結(jié)構(gòu)(即鏈表頭),該結(jié)構(gòu)有兩個(gè)指針成員,一個(gè)成 員fVd指向第一個(gè)定時(shí)器,另一個(gè)成員Imd指向最后一個(gè)定時(shí)器,該結(jié)構(gòu)還有一個(gè)成員time 表示最后一個(gè)定時(shí)器到時(shí)時(shí)間。定時(shí)器儲(chǔ)存在定時(shí)器鏈表中,當(dāng)應(yīng)用程序創(chuàng)建一個(gè)定時(shí)器時(shí),它就會(huì)在定時(shí)器鏈 表中添加一個(gè)節(jié)點(diǎn)。假設(shè)現(xiàn)在創(chuàng)建一個(gè)定時(shí)器T,tl秒之后到期,節(jié)點(diǎn)添加的過程是這樣 的(1)如果第一個(gè)定時(shí)器為空,則將定時(shí)器鏈表的第一個(gè)定時(shí)器和最后一個(gè)定時(shí)器都指 向該節(jié)點(diǎn)T,定時(shí)器鏈表頭的time和T的delta都設(shè)為tl。(2)如果第一個(gè)定時(shí)器不為空 而且tl大于或等于定時(shí)器鏈表頭的time,就將T放到定時(shí)器鏈表的最后,T的delta設(shè)為 tl減去定時(shí)器鏈表頭的time,定時(shí)器鏈表頭的time設(shè)為tl。( 不符合前面兩種情況就 按這種情況處理,從第一個(gè)定時(shí)器開始逐個(gè)累加delta,假設(shè)累加到某個(gè)節(jié)點(diǎn)P的時(shí)候累加 值超過了 tl,這時(shí)將T插入到P之前,將P的delta設(shè)為累加值減去tl,T的delta設(shè)為P 原先的delta減去P當(dāng)前的delta。下面以實(shí)際的例子來看添加定時(shí)器時(shí)鏈表的變化過程。最初始時(shí),定時(shí)器鏈表頭指向定時(shí)器指針都是空的,如圖3所示。首先添加一個(gè)定時(shí)器A,1秒后到期,按上面的步驟(1)操作,定時(shí)器鏈表變成如圖 4所示。接著添加一個(gè)定時(shí)器B,2秒后到期,按上面的步驟( 操作,定時(shí)器鏈表變成如圖 5所示。接著添加一個(gè)定時(shí)器C,4秒后到期,按上面的步驟( 操作,定時(shí)器鏈表變成如圖 6所示。接著添加一個(gè)定時(shí)器D,2秒后到期,按上面的步驟C3)操作,定時(shí)器鏈表變成如圖 7所示。定時(shí)器任務(wù)處理過程如下(1)檢查第一個(gè)定時(shí)器,如果第一個(gè)定時(shí)器為空就結(jié) 束檢查堵塞在信號(hào)量X那里,如果第一個(gè)定時(shí)器不為空就將定時(shí)器鏈表頭的time減1,將 第一個(gè)定時(shí)器的delta減1。(2)從第一個(gè)定時(shí)器開始檢查,如果第一個(gè)定時(shí)器的delta不 為0就結(jié)束檢查堵塞在信號(hào)量X那里,如果第一個(gè)定時(shí)器的delta為0表示該定時(shí)器到期 了,于是將第一個(gè)定時(shí)器從定時(shí)器鏈表中摘除出來,執(zhí)行第一個(gè)定時(shí)器對(duì)應(yīng)的函數(shù),執(zhí)行完后跳到步驟( 繼續(xù)執(zhí)行。下面以實(shí)際的例子來看定時(shí)器任務(wù)執(zhí)行的情況。假設(shè)當(dāng)前的時(shí)刻為0秒到1秒之間任意一個(gè)時(shí)間,假設(shè)當(dāng)前的定時(shí)器有A,B, C,D 四個(gè),定時(shí)器鏈表如圖7所示。當(dāng)時(shí)間到了 1秒時(shí),定時(shí)器中斷觸發(fā)定時(shí)器處理任務(wù),該任務(wù)首先找第一個(gè)定時(shí) 器,這時(shí)第一個(gè)定時(shí)器為A,于是定時(shí)器鏈表頭的time減1變成3,A的delta減1變成了 0。A的delta為0表示到期了,就將A從定時(shí)器鏈表中摘除出來,執(zhí)行A對(duì)應(yīng)的函數(shù)。摘除 A以后,定時(shí)器鏈表的第一個(gè)定時(shí)器變成了 B,如圖8所示。任務(wù)繼續(xù)檢查第一個(gè)定時(shí)器,B 的delta為1表示還未到期,于是任務(wù)結(jié)束檢查堵塞在信號(hào)量X那里。當(dāng)時(shí)間到了 2秒時(shí),定時(shí)器中斷觸發(fā)定時(shí)器處理任務(wù),該任務(wù)首先找第一個(gè)定時(shí) 器,這時(shí)第一個(gè)定時(shí)器為B,于是定時(shí)器鏈表頭的time減1變成2,B的delta減1變成了 0。B的delta為0表示到期了,就將B定時(shí)器鏈表中摘除出來,執(zhí)行B對(duì)應(yīng)的函數(shù)。摘除B 以后,定時(shí)器鏈表的第一個(gè)定時(shí)器變成了 D,如圖9所示。任務(wù)繼續(xù)檢查第一個(gè)定時(shí)器,D的 delta為0表示到期了,于是將D從定時(shí)器鏈表中摘除出來,執(zhí)行D對(duì)應(yīng)的函數(shù)。摘除D以 后,定時(shí)器鏈表的第一個(gè)定時(shí)器變成了 C,如圖10所示。任務(wù)繼續(xù)檢查第一個(gè)定時(shí)器,C的 delta為2表示還未到期,于是任務(wù)結(jié)束檢查堵塞在信號(hào)量X那里。當(dāng)時(shí)間到了 3秒時(shí),定時(shí)器中斷觸發(fā)定時(shí)器處理任務(wù),該任務(wù)首先找第一個(gè)定時(shí) 器,這時(shí)第一個(gè)定時(shí)器為C,于是定時(shí)器鏈表頭的time減1變成1,C的delta減1變成了 1,定時(shí)器定時(shí)器鏈表如圖11所示。C的delta為1表示還未到期,于是任務(wù)結(jié)束檢查堵塞 在信號(hào)量X那里。當(dāng)時(shí)間到了 4秒時(shí),定時(shí)器中斷觸發(fā)定時(shí)器處理任務(wù),該任務(wù)首先找第一個(gè)定時(shí) 器,這時(shí)第一個(gè)定時(shí)器為C,于是定時(shí)器鏈表頭的time減1變成0,C的delta減1變成了 0。C的delta為0表示到期了,就將C從定時(shí)器鏈表中摘除出來,執(zhí)行C對(duì)應(yīng)的函數(shù)。摘除 C以后,定時(shí)器鏈表變成了如圖3所示。任務(wù)繼續(xù)檢查第一個(gè)定時(shí)器,由于第一個(gè)定時(shí)器為 空,于是任務(wù)結(jié)束檢查堵塞在信號(hào)量X那里。當(dāng)時(shí)間到了 5秒時(shí),定時(shí)器中斷觸發(fā)定時(shí)器處理任務(wù),該任務(wù)首先找第一個(gè)定時(shí) 器,這時(shí)第一個(gè)定時(shí)器為空,于是任務(wù)結(jié)束檢查堵塞在信號(hào)量X那里。實(shí)施例二、請(qǐng)參考圖2,本發(fā)明實(shí)施例提供一種定時(shí)器的實(shí)現(xiàn)裝置,包括定時(shí)器處理任務(wù)單 元201和定時(shí)器中斷單元202,所述定時(shí)器處理任務(wù)單元包括排序單元201a和處理單元 201b。所述定時(shí)器中斷單元202,用于判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn) 入中斷處理,發(fā)送一個(gè)激活信號(hào)給所述定時(shí)器處理任務(wù)單元。所述排序單元201a,用于將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表;所述處理單元201b,用于接收所述定時(shí)器中斷單元發(fā)送的激活信號(hào),按照所述定 時(shí)器鏈表中各個(gè)定時(shí)器的排序進(jìn)行定時(shí)器任務(wù)處理。在一個(gè)實(shí)施方式中,所述排序單元201a,具體用于生成一個(gè)定時(shí)器鏈表頭,以定時(shí) 器的到期時(shí)間作為排序依據(jù),將各個(gè)各個(gè)定時(shí)器連接到所述定時(shí)器鏈表頭之后生成定時(shí)器 鏈表,其中,將到期時(shí)間相同的定時(shí)器以調(diào)用的先后次序作為排序依據(jù),連接到定時(shí)器鏈表 中。
在一個(gè)實(shí)施方式中,所述處理單元201b,具體用于判斷是否達(dá)到所述定時(shí)器鏈表 中的第一個(gè)定時(shí)器的到期時(shí)間,若是,則處理該定時(shí)器任務(wù),并將該定時(shí)器從所述定時(shí)器鏈 表中取出,否則,停止進(jìn)行定時(shí)器任務(wù)處理。在一個(gè)實(shí)施方式中,定時(shí)器處理任務(wù)單元201還包括優(yōu)先級(jí)設(shè)置單元201c,該優(yōu) 先級(jí)設(shè)置單元201c,用于為定時(shí)器處理任務(wù)設(shè)定一個(gè)優(yōu)先級(jí)。采用本實(shí)施例裝置,可以及時(shí)的按排序依次處理到期的定時(shí)器任務(wù),不會(huì)產(chǎn)生大 量的中斷,從而不影響其他任務(wù)的執(zhí)行;按排序?qū)Χ〞r(shí)器任務(wù)是否到期進(jìn)行檢查,不必檢查 全部的定時(shí)器任務(wù),可以減少進(jìn)行檢查所需的時(shí)間,從而可以提高操作系統(tǒng)的穩(wěn)定性和可靠性。本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可 以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介 質(zhì)可以包括只讀存儲(chǔ)器、隨機(jī)讀取存儲(chǔ)器、磁盤或光盤等。以上對(duì)本發(fā)明實(shí)施例所提供的定時(shí)器的實(shí)現(xiàn)方法和裝置進(jìn)行了詳細(xì)介紹,本文中 應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助 理解本發(fā)明的方法及其核心思想,不應(yīng)理解為對(duì)本發(fā)明的限制,凡在本發(fā)明的精神和原則 之內(nèi),所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種定時(shí)器的實(shí)現(xiàn)方法,其特征在于,包括定時(shí)器處理任務(wù)將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表;定時(shí)器中斷判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn)入中斷處理,發(fā)送一個(gè)激 活信號(hào)給所述定時(shí)器處理任務(wù);所述定時(shí)器處理任務(wù)在收到所述激活信號(hào)后,按照所述定時(shí)器鏈表中各個(gè)定時(shí)器的排 序進(jìn)行定時(shí)器任務(wù)處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述定時(shí)器處理任務(wù)將各個(gè)定時(shí)器排序 以生成一個(gè)定時(shí)器鏈表包括生成一個(gè)定時(shí)器鏈表頭;以定時(shí)器的到期時(shí)間作為排序依據(jù),將各個(gè)各個(gè)定時(shí)器連接到所述定時(shí)器鏈表頭之后 生成定時(shí)器鏈表,其中,將到期時(shí)間相同的定時(shí)器以調(diào)用的先后次序作為排序依據(jù),連接到 定時(shí)器鏈表中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于所述定時(shí)器鏈表頭包括指向所述定時(shí)器鏈表中第一個(gè)定時(shí)器的第一指針、指向所述 定時(shí)器鏈表中最后一個(gè)定時(shí)器的第二指針和一個(gè)鏈表到期時(shí)間,所述鏈表到期時(shí)間等于所 述最后一個(gè)定時(shí)器的到期時(shí)間;所述定時(shí)器包括指向上一個(gè)定時(shí)器的上指針、指向下一個(gè)定時(shí)器的下指針、指向定時(shí) 器任務(wù)對(duì)應(yīng)的函數(shù)的函數(shù)指針以及該定時(shí)器的到期時(shí)間和刪除時(shí)間,所述刪除時(shí)間等于該 定時(shí)器的到期時(shí)間減去上一個(gè)定時(shí)器的到期時(shí)間。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述按照所述定時(shí)器鏈表中各個(gè)定時(shí)器 的排序進(jìn)行定時(shí)器任務(wù)處理包括判斷是否達(dá)到所述定時(shí)器鏈表中的第一個(gè)定時(shí)器的到期時(shí)間,若是,則處理該定時(shí)器 任務(wù),并將該定時(shí)器從所述定時(shí)器鏈表中取出,否則,停止進(jìn)行定時(shí)器任務(wù)處理。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,所述創(chuàng)建一個(gè)定時(shí)器處理任 務(wù)之后還包括為所述定時(shí)器處理任務(wù)設(shè)定一個(gè)優(yōu)先級(jí)。
6.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,所述按照所述定時(shí)器鏈表中 各個(gè)定時(shí)器的排序進(jìn)行定時(shí)器任務(wù)處理之后還包括所述定時(shí)器中斷重新啟動(dòng),退出中斷處理。
7.一種定時(shí)器的實(shí)現(xiàn)裝置,其特征在于,包括定時(shí)器處理任務(wù)單元和定時(shí)器中斷單 元,所述定時(shí)器處理任務(wù)單元包括排序單元和處理單元;所述定時(shí)器中斷單元,用于判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn)入中斷處 理,發(fā)送一個(gè)激活信號(hào)給所述定時(shí)器處理任務(wù)單元。所述排序單元,用于將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表;所述處理單元,用于接收所述定時(shí)器中斷單元發(fā)送的激活信號(hào),按照所述定時(shí)器鏈表 中各個(gè)定時(shí)器的排序進(jìn)行定時(shí)器任務(wù)處理。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于所述排序單元,具體用于生成一個(gè)定時(shí)器鏈表頭,以定時(shí)器的到期時(shí)間作為排序依據(jù), 將各個(gè)各個(gè)定時(shí)器連接到所述定時(shí)器鏈表頭之后生成定時(shí)器鏈表,其中,將到期時(shí)間相同 的定時(shí)器以調(diào)用的先后次序作為排序依據(jù),連接到定時(shí)器鏈表中。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于所述處理單元,具體用于判斷是否達(dá)到所述定時(shí)器鏈表中的第一個(gè)定時(shí)器的到期時(shí) 間,若是,則處理該定時(shí)器任務(wù),并將該定時(shí)器從所述定時(shí)器鏈表中取出,否則,停止進(jìn)行定 時(shí)器任務(wù)處理。
10.根據(jù)權(quán)利要求7、8或9所述的裝置,其特征在于所述定時(shí)器處理任務(wù)單元還包括 優(yōu)先級(jí)設(shè)置單元;所述優(yōu)先級(jí)設(shè)置單元,用于為所述定時(shí)器處理任務(wù)設(shè)定一個(gè)優(yōu)先級(jí)。
全文摘要
本發(fā)明公開了一種定時(shí)器的實(shí)現(xiàn)方法,包括定時(shí)器處理任務(wù)將各個(gè)定時(shí)器排序以生成一個(gè)定時(shí)器鏈表;定時(shí)器中斷判斷定時(shí)計(jì)數(shù)是否達(dá)到預(yù)設(shè)的中斷值,若是,則進(jìn)入中斷處理,發(fā)送一個(gè)激活信號(hào)給所述定時(shí)器處理任務(wù);所述定時(shí)器處理任務(wù)在收到所述激活信號(hào)后,按照所述定時(shí)器鏈表中各個(gè)定時(shí)器的排序進(jìn)行定時(shí)器任務(wù)處理。本發(fā)明實(shí)施例還提供相應(yīng)的裝置。采用本發(fā)明技術(shù)方案可以及時(shí)的按排序依次處理到期的定時(shí)器任務(wù),不會(huì)產(chǎn)生大量的中斷,從而不影響其他任務(wù)的執(zhí)行;按排序?qū)Χ〞r(shí)器任務(wù)是否到期進(jìn)行檢查,不必檢查全部的定時(shí)器任務(wù),可以減少進(jìn)行檢查所需的時(shí)間,從而可以提高操作系統(tǒng)的穩(wěn)定性和可靠性。
文檔編號(hào)G06F9/46GK102103520SQ201010587570
公開日2011年6月22日 申請(qǐng)日期2010年12月14日 優(yōu)先權(quán)日2010年12月14日
發(fā)明者梁志寶 申請(qǐng)人:深圳市金宏威實(shí)業(yè)發(fā)展有限公司