嵌入式实时操作系统中定时器的计时方法

文档序号:7683017阅读:702来源:国知局
专利名称:嵌入式实时操作系统中定时器的计时方法
技术领域
本发明涉及计算机领域,具体地说,涉及计算机领域中的嵌入式实时多任务操作系统中的定时器。
对于不太复杂的实时系统,一般可设计成前后台式或者超循环式。对于大多数实时系统来说,因为有多任务处理和共享资源的要求,则必须有操作系统支持,该操作系统就称为实时操作系统。对于隐藏在系统内部的计算机系统称为嵌入式系统,而多数实时操作系统又是嵌入式的,则称为嵌入式实时操作系统。
嵌入式实时操作系统一般由任务调度管理、时间管理、任务同步和通信、内存管理等几部分组成。因为实时操作系统对时序的偏差依赖性很强,因此定时器作为操作系统时间管理的核心就显得很重要。
在通讯领域的产品中,如大型程控交换机,其一次业务呼叫需要几个不同的定时,当同时处理的业务呼叫多达上万个,则需要大规模(比如20000个)的定时器;如果定时器的计时方法效率较差,则会因定时器个数太多而造成定时处理耗用系统CPU资源过大,影响定时精度,影响呼叫业务处理的及时性,从而成为影响整体系统性能的瓶颈,因此定时器是影响实时系统性能很重要的一个环节。
定时器的时钟源来源于硬件时钟中断,时钟中断每隔一定时间产生,该时间间隔为最小计时时长,也就是定时器的计时精度,每个对硬件时钟中断处理称为计时周期。
目前定时器的计时方法有两种。一种方法是当每个计时周期到达时,先将所有定时器的计时数减1,然后判断结果是否为0,如果为0,则表示计时时间已到并进行到时处理,否则继续进行计时操作,这种方法称为简单计时法。
另一种是多队列计时法。首先根据系统定时应用特点,将定时器划分成不同时长的队列,目的在于减少每次参与计数的定时器个数。在设定定时器时,将计时时长分解为毫秒位、个位、十位、百位、千位等几个部分,再把定时器插入到最大不为0的位所在的队列,计时就从该队列开始,完成后逐一计以下位,直至计时到毫秒位队列,最后在该队列计时完成后,该定时器总计时完毕。
由于各队列除头定时器外计算的均是相对于上个定时器的时间相对值,则计时的时候只需对队列头部定时器时间做减运算,便可确定是否有定时器在本次计时到期。
综上所述,简单计时法固然方法简单,实现容易,但当定时器数目满载(如20000个)时,则每次计数需所有定时器做减法,即每秒需做20万次减法(假定每个计时周期100毫秒),而嵌入式系统的CPU资源相当有限,定时器本身的任务不能占太多的资源,所以如果采用这种方法,就会占用较多的CPU资源。
而多队列计时法相对简单计时法更高效,在每次计时周期到来时,只需做与队列次数相同的判断和减法,以及可能的报时操作,就能基本满足嵌入式系统的定时需求。但同时该方法也存在很多冗余操作,如空负载时检查所有队列,满负载时要对所有队列做2倍于检查的加减法操作,真正有效操作只有占其中少部分的报时和插入操作;而且在队列处理中存在耗费计算资源的排序操作。
本发明所述的定时器计时方法是单循环的队列计时法,包括以下步骤第一步 设置所需最大定时器数的定时器描述数组;第二步 采用一定长度的数组和循环指针变量组成一个循环计时队列,循环指针变量以循环的方式指向各数组元素;
第三步 当上层应用程序需要定时器任务时,将所需新的定时器插入循环队列中;第四步 在每个计时周期到来时,循环指针变量向后移动,查询所指数组元素的链表队列是否为空,如果为空,则等待下一个计时周期的到来;如果不为空,则逐一判断该链表队列中定时器的描述结构中的倍数值是否为0,如为0则表示该定时器的定时时间到,进行相应的报时操作和再次插入定时器操作,同时从该链表队列中删除该定时器描述数组;如倍数值不为0则将倍数值减1,然后判断下一个定时器。
采用本发明所述的单循环队列计时法,经过模拟测试,与现有技术相比,定时器在各种负载下的平均性能提高5倍以上,达到了高性能、高效率、高均衡性、实现简单性、可伸缩性的效果,节省了嵌入式系统的定时管理所需的计算资源。


图1是本发明定时器描述数组和循环队列的示意图。
图2是新定时器插入的示意图。
图3是本发明所述定时器计时方法的流程图。
循环队列是由长度为L的数组和循环指针变量组成的,那么循环队列的长度就为L,L的取值遵循以下规律L与M的大小基本相同,以便当使用的定时器接近M个时,定时器可以随机均匀地分布到循环队列的各数组元素中。如果L太小容易造成倍数值的减操作过多,效率得不到提高;L太大则浪费存储空间;同时L最好取为2的指数,以便利用移位和与操作来计算倍数值和余数,提高效率,比如,当M为20000,L可取为214=16384。
长度为L的数组的元素用头ID和尾ID来描述位于此元素处的活动定时器链表,通过头ID和尾ID在前面构造的定时器描述数组中查找到组成该处链表的头定时器和尾定时器的结构,进而方便地通过索引标识找到该处的所用双向链表中的元素。
循环队列由0-(L-1)的数组和循环指针构成。循环指针的移动方法是在每一个计时周期,循环指针的新值是循环指针加1并与L相除取余数,这样可构成循环移动。在图1中,循环队列位置0的链表元素只有一个ID为0的定时器;位置1的链表元素没有;位置2的链表元素有定时器1、4、5;位置5处的链表元素有定时器2、3。空闲定时器链表元素有定时器6、7、……、M-1。
用数组ID来指示定时器并在循环队列中构造虚拟双向链表,其目的在于联系定时器描述队列和循环队列,可节省存储空间,避免结构拷贝操作,提高计算效率。
图2给出了新的定时器的插入方法示意图。当要插入新的定时器时,首先根据当前循环指针位置、计时时长的余数,计算出该定时器计时到时循环指针所在位置,即新定时器的插入位置。新定时器在循环队列中的插入位置计算方法是,先计算出定时器时长(用计时周期数表示)与L相除所得的余数,再将此余数与循环指针变量值求和,然后与L相除,所得的余数即是新定时器的插入位置,可用公式表示如下新定时器的插入位置=(循环指针变量值+新定时器的时长除以L所得的余数)除以L取余数。
然后将新定时器根据位置插入到该处的链表中。
新定时器插入时,其倍数值计算公式为新定时器的倍数值=新定时器时长除以L后所得的商。
超过L长度的定时器通过倍数值来配合计时。假定L>6,新插入定时器6的计时时长为3,在循环指针为2时插入。这时根据新定时器插入位置的公式计算插入的位置为5,则新定时器插入到循环队列位置5处的链表末尾。如新定时器6的计时时长为203,L为100,则定时器6的倍数值为2,计算得插入位置为5。新定时器6插入后,位置5处的定时器链表元素有2、3、6;同时从空闲链表中删除定时器6,剩下的空闲链表元素有定时器7、8…M-1。图2显示了插入的结果。
图3是定时器的计时流程。在每个计时周期到来时,循环指针变量依据循环指针公式向后移动。
循环指针移动公式如下新循环指针变量值=(原循环指针变量值+1)除以L后取余数。
根据上述公式,若原循环指针变量为1,根据循环指针移动公式向后走一位则为2;若原循环指针变量为L一1,则根据循环指针移动公式向后走一位则为0。
然后查询循环指针所指的元素的链表队列是否为空。当循环指针指向1时,其链表队列为空;当循环指针为2时,链表队列不为空,有元素为定时器1、4、5。如果链表对列为空,则不做任何处理操作,等待下一个计时周期。如果队列不为空,则逐一判断该处链表队列中所有定时器描述结构中的倍数值是否为0。对于图2,当循环指针为2时应判断定时器1、4、5,当循环指针为5时应判断定时器2、3、6。如果倍数值为0,则表示该定时器计时时间已到,进行相应的报时和再次插入定时器操作,同时从链表队列中删除该定时器描述结构;如倍数值不为0,则将倍数值减1,再判断下一个定时器。如图2,当循环指针指向5,判断定时器6的倍数值时,假定L为100,若定时器6的计时时长为3,则倍数值为0,定时器6到时,做报时和再次插入操作;若定时器6的计时时长为203,则倍数值为2,将倍数值2减1为1,继续以后的操作,当循环指针经过2次循环后定时器6的倍数值才为0,这时才进行报时和重新插入操作。
当计时结束,上层应用程序不再需要定时器时,可从循环队列和定时器描述数组中删除该定时器。
综上所述,本发明采用单循环队列计时,实现简单,效率高,节省了系统的资源。
权利要求
1.嵌入式实时操作系统中定时器的计时方法,其特征在于,包括以下步骤第一步 设置所需最大定时器数的定时器描述数组;第二步 采用一定长度的数组和循环指针变量组成一个循环计时队列,循环指针变量以循环的方式指向各数组元素;第三步 当上层应用程序需要定时器任务时,将所需新的定时器插入循环队列中;第四步 在每个计时周期到来时,循环指针变量向后移动,查询所指数组元素的链表队列是否为空,如果为空,则等待下一个计时周期的到来;如果不为空,则逐一判断该链表队列中定时器的描述结构中的倍数值是否为0,如为0则表示该定时器的定时时间到,进行相应的报时操作和再次插入定时器操作,同时从该链表队列中删除该定时器描述数组;如倍数值不为0则将倍数值减1,然后判断下一个定时器。
2.如权利要求1所述的定时器的计时方法,其特征在于还包括,当上层应用程序不再需要定时器时,从循环队列和定时器描述数组中删除该定时器。
3.如权利要求1所述的定时器的计时方法,其特征在于所述第一步中的定时器描述数组采用结构表示,包含前一个和后一个定时器的索引标识(用队列ID表示)。
4.如权利要求1所述的定时器的计时方法,其特征在于所述第二步中数组的长度大小与最大定时器数目基本相同,且采用2的指数的形式。
5.如权利要求1所述的定时器的计时方法,其特征在于所述第三步中新定时器插入队列中的位置的计算方法是,先计算定时器时长(用计时周期数表示)除以L所得的余数,再将此余数与当前循环指针变量值求和,然后再除以L,所得的余数即是新定时器的插入位置,可用公式表示如下新定时器的插入位置=(循环指针变量值+新定时器的时长除以L的余数)除以L取余数。
6.如权利要求1所述的定时器的计时方法,其特征在于所述第四步中循环指针变量移动的公式是,新循环指针变量值=(原循环指针变量值+1)除以L后取余数。
7.如权利要求1所述的定时器的计时方法,其特征在于所述第四步中倍数值的计算公式是,定时器的倍数值=定时器时长除以L后所得的商。
全文摘要
本发明提供一种嵌入式实时操作系统中定时器的计时方法,包括设置最大定时器数的定时器描述数组;采用一定长度的数组和循环指针变量组成循环计时队列;在每个计时周期到来时,循环指针变量向后移动,查询所指数组元素的链表队列是否为空,如果为空,则等待下一个计时周期的到来;如果不为空,则逐一判断该链表队列中定时器的描述结构中的倍数值是否为0,如为0则表示该定时器的定时时间到,进行相应的报时操作和再次插入定时器操作;如倍数值不为0则将倍数值减1,判断下一个定时器。本发明解决了现有计时法中存在冗余操作和排序操作的缺点,经模拟测试,定时器在各种负载下的平均性能提高5倍以上,节省了嵌入式系统定时管理所需的计算资源。
文档编号H04M15/00GK1441570SQ0211093
公开日2003年9月10日 申请日期2002年2月28日 优先权日2002年2月28日
发明者唐斌, 缪敬, 颜春燕 申请人:深圳市中兴通讯股份有限公司上海第二研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1