一种定时器链表的调度方法技术

技术编号:2844017 阅读:260 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种定时器链表的调度方法,包括:(a)建立一个双向定时器链表,该定时器链表包括一个以上的定时器节点,所述定时器节点存储有预设定的时间间隔,及表示该定时器节点的时间间隔与上一个定时器节点时间间隔的差值的时间差值;(b)设置定时器的步骤,向定时器链表中插入一个待插入定时器节点;(c)中止定时器的步骤,从定时器链表中删除一个待删除定时器节点。本发明专利技术操作简单,仅仅通过插入和删除链表节点就可以实现对定时器的管理和调度,而无需长时间的扫描链表,可节省CPU的开销,提高工作效率,对嵌入式系统性能有较大的提高。

【技术实现步骤摘要】

本专利技术涉及嵌入式操作系统定时器领域,具体来说,涉及。
技术介绍
嵌入式操作系统早已经融入我们的生活,除了日常生活中可以看到的家电产品、工业于军事应用的独立产品之外,许多大电脑系统,事实上也是有许许多多小的嵌入式系统组成。嵌入式操作系统利用定时器处理多种事务,例如进程的调度、网络协议的超时和系统统计数据的定时器更新等。因为操作系统对在处理多种事务时对计时偏差的依赖性很强,因此定时器作为操作系统时间管理的核心就显得很重要。定时器又称为计时器,计时器记录了时间经过的轨迹,最简单的定时器度量经过的时间且在需要时给出经过时间的信息,也叫间隔计时器,它将在一个特定的时间间隔之后产生中断。目前嵌入式操作系统应用非常广泛,定时器的数量需求越来越多,多定时器的计时方法有使用数组和队列的方法,根据定时器的数目建立数组和队列,把定时器分成激活和挂起状态,当定时器激活时,把定时器放入到队列中,当超时或者中止该定时器时可以通过删除动作进入挂起状态,挂起状态的定时器是不会超时的,当启动时可以通过插入动作使其进入激活状态。每个计时周期到时,对进入激活状态的定时器队列不断扫描,每次扫描都对队列中的所有定时器的计时数减1,然后判断结果是否为0,如果为0,则表示计时时间已到并进行到时处理,否则继续进行计时操作。按照以上的方法,当定时器的数量到达一定的数量级别时,显然存在明显的缺点,扫描队列的时间很长,占用系统资源较多,而嵌入式系统的CPU资源相当有限,定时器本身的任务不能占太多的资源,所以如果采用这种方法,就会占用较多的CPU资源。
技术实现思路
本专利技术所要解决的技术问题在于,克服现有技术中需对数组和队列不断扫描和排序操作而引起系统开销大的不足,而提供一种定时器链表调度方法,可提高定时器的效率,减少系统的开销。本专利技术所采用的技术方案在于提供,其包括(a)建立一个双向定时器链表,该定时器链表包括一个以上的定时器节点,所述定时器节点存储有预设定的时间间隔,及表示该定时器节点的时间间隔与上一个定时器节点时间间隔的差值的时间差值;(b)设置定时器的步骤,向定时器链表中插入一个待插入定时器节点;(c)中止定时器的步骤,从定时器链表中删除一个待删除定时器节点。其中,步骤(b)进一步包括(b1)停止当前定时器节点;(b2)将待插入定时器节点插入到定时器链表中;(b3)启动定时器链表头节点为当前定时器。其中,步骤(b2)进一步包括(b20)取出待插入定时器节点的时间间隔T;(b21)判断定时器链表的头节点是否为空节点,如果头节点不为空节点,则取出当前节点的时间差值Nt;(b22)比较所述待插入定时器节点的时间间隔T是否大于或等于当前节点的时间差值Nt;(b23)如果步骤(b22)中所述待插入定时器节点的时间间隔T大于或等于当前节点的时间差值Nt,则T减去Nt然后赋值给T,转入步骤(b25);(b24)如果步骤(b22)中所述待插入定时器节点的时间间隔T小于当前节点的时间差值Nt,则将Nt减去T然后赋值给Nt,并把该待插入定时器节点加入到当前定时器节点之前,并将其时间间隔设为T,然后转至步骤(b3);(b25)判断当前定时器节点的下一个定时器节点是否为空节点,如果该下一个定时器节点不为空节点,则将该下一定时器节点的时间差值赋值给当前节点的时间差值Nt,并转至步骤(b22)。其中,当步骤(b11)中定时器链表的头节点为空节点,或者步骤(b15)中当前定时器节点的下一个定时器节点为空节点时,进行下述步骤(b16)将待插入定时器节点添加到该定时器链表尾部,并转入步骤(b3)。其中,步骤(c)进一步包括(c1)停止当前定时器节点;(c2)从定时器链表中删除该待删除定时器节点;(c3)启动定时器链表头节点为当前定时器。其中,步骤(c2)进一步包括(c20)计算当前定时器的剩余时间,其可通过下述公式计算得出Ns=当前时间-runTime和Nh=Nh-Ns,其中Ns为当前定时器剩余的时间值;Runtime为记录当前定时器设置时的时间值;Nh为头节点的时间差值;(c21)取出待删除定时器节点的时间差值Nf;(c22)将待删除定时器节点的下一节点的时间差值赋值给Nn,并删除该待删除定时器节点;(c23)判断待删除定时器节点的时间差值Nf是否等于零,如果该Nf等于零,则转至步骤(c34),否则,将该Nn加上该Nf并将结果赋值Nn;(c24)将当前时间值赋值给runtime,并转至步骤(c3)。实施本专利技术所提供的定时器链表的调度方法具有如下有益效果其操作简单,仅仅只是通过插入和删除链表节点就可以实现对定时器的管理和调度,而无需长时间的扫描链表,大大节省了CPU的开销,提高了效率,对嵌入式系统性能有较大的提高。附图说明下面将结合附图及实施例对本专利技术作进一步说明,附图中图1是本专利技术中定时器链表的示意图;图2是本专利技术中定时器节点的示意图;图3是本专利技术中设置定时器的流程图;图4图3中将定时器节点插入定时器链表的流程图;图5是本专利技术中中止定时器的流程图;图6是图5中从定时器链表删除定时器节点的流程图。具体实施例方式请参见图1,示出了本专利技术中的定时器链表的示意图。本专利技术是采用一种双向链表的形式对定时器进行管理,其包括有至少一个节点,在图1中示出了头节点、节点1、节点2、节点3及尾节点,本专利技术不限于此。其中,每个节点可以包含有一个定时器的信息,相当于一个定时器,可称为定时器节点。其中虚线部分表示对该定时器链表进行的操作,如将链表头节点设置为当前定时器、插入一个定时器节点、删除一个定时器节点等。请参见图2,示出了本专利技术中定时器节点的示意图;在该图2中,仅画出三个定时器节点的结构及连接关系。其中节点的设置可参见下面的程序段typedef struct tagTIMER_NODE{API_TIMER_DATA timerData; 定时器的私有数据DWORD eventNum;定时器到时发生次数;DWORD activeInterval; 定时器时间差值struct tagTIMER_NODE*pPrev; 指向上一节点struct tagTIMER_NODE*pNext; 指向下一节点}TIMER_NODE;而其中定时器的私有数据(timerData)结构如下所设置typedef struct tagAPI_TIMER_DATA{void*hWnd; /*设置定时器窗口的句柄*/DWORD nIDEvent;/*定时器ID号*/DWORD uElapse; /*定时器的时间间隔*/void(*lpTimerFunc)(); /*定时器到达时需要处理的事务*/DWORD nThreadID; /*线程ID号*/}API_TIMER_DATA;从上面可以看出,每个定时器节点中均包括有timerData、eventNum、activeInterval、pPrev及pNex。其中timerData记录有定时器的私有数据;eventNum记录有定时器到时发生次数;activeInterval记录有定时器时间差值;pPrev记录有指向上一节点的指针;pNex记录有下一节点的指针。而在私有数据中又设有定时器的时间间隔、定时器窗口的句柄、定时器ID、定时器到时需要处理的事务和线程I本文档来自技高网...

【技术保护点】
一种定时器链表的调度方法,其特征在于,包括:    (a)建立一个双向定时器链表,该定时器链表包括一个以上的定时器节点,所述定时器节点存储有预设定的时间间隔,及表示该定时器节点的时间间隔与上一个定时器节点时间间隔的差值的时间差值;    (b)设置定时器的步骤,向定时器链表中插入一个待插入定时器节点;    (c)中止定时器的步骤,从定时器链表中删除一个待删除定时器节点。

【技术特征摘要】
1.一种定时器链表的调度方法,其特征在于,包括(a)建立一个双向定时器链表,该定时器链表包括一个以上的定时器节点,所述定时器节点存储有预设定的时间间隔,及表示该定时器节点的时间间隔与上一个定时器节点时间间隔的差值的时间差值;(b)设置定时器的步骤,向定时器链表中插入一个待插入定时器节点;(c)中止定时器的步骤,从定时器链表中删除一个待删除定时器节点。2.根据权利要求1所述的定时器链表的调度方法,其特征在于,步骤(b)进一步包括(b1)停止当前定时器节点;(b2)将待插入定时器节点插入到定时器链表中;(b3)启动定时器链表头节点为当前定时器。3.根据权利要求2所述的定时器链表的调度方法,其特征在于,步骤(b2)进一步包括((b20)取出待插入定时器节点的时间间隔T;(b21)判断定时器链表的头节点是否为空节点,如果头节点不为空节点,则取出当前节点的时间差值Nt;(b22)比较所述待插入定时器节点的时间间隔T是否大于或等于当前节点的时间差值Nt;(b23)如果步骤(b22)中所述待插入定时器节点的时间间隔T大于或等于当前节点的时间差值Nt,则T减去Nt然后赋值给T,转入步骤(b25);(b24)如果步骤(b22)中所述待插入定时器节点的时间间隔T小于当前节点的时间差值Nt,则将Nt减去T然后赋值给Nt,并把该待插入定时器节点插入到当前定时器节点之前,并将其时间间隔设为T,然后转至步骤(b3);(b25)判断当前定时器节...

【专利技术属性】
技术研发人员:胡本平
申请(专利权)人:康佳集团股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利