本发明专利技术涉及计算机领域,旨在提供一种计算机领域中的嵌入式实时操作系统中的定时器方法。该方法包括将至少一个计数器与对应的硬件中断源进行关联绑定操作,然后将至少一个定时器与计数器进行关联操作;在每个计时周期到来时,查询计数器的链表是否为空,据此进行相应操作步骤。本发明专利技术中的方法每当计时周期到来,计数器计数的时候,不用每次都去检查遍历定时器的链表,提高了效率;在至少有一个定时器会报时检查遍历定时器的链表的时候,只会去检查遍历和更新那些会在此刻报时的定时器,而不会去遍历其余的在此刻还未报时的定时器,即不会去一一检查遍历所有的定时器,这样减少了耗时的不必要的操作,提高了效率。
【技术实现步骤摘要】
本专利技术涉及计算机领域,特别涉及计算机领域中的嵌入式实时操作系统中的定时器方法。
技术介绍
嵌入式实时操作系统一般由任务调度管理、时间管理、任务同步和通信、内存管理等几部分组成。由于实时操作系统对时序的偏差依赖型很强,因此定时器作为操作系统时间管理的核心就显得很重要。总之,定时器是整个实时系统的一个关键所在,设计一个符合系统需求、且高效的定时器算法是非常有必要的。定时器是基于硬件的时钟中断的,硬件时钟每隔一定时间会产生一个硬件时钟中断,该时间间隔为系统的最小计时单位。在嵌入式实时操作系统中,任务会要求系统在一定时间间隔后对任务报警并通过这种方式来处理周期性事务,而系统则根据时钟中断发生的次数来计算时间间隔,这就是嵌入式实时操作系统中的定时器功能。显然定时器是和硬件时钟中断关联起来。然而,硬件时钟的个数是有限的(往往只有一个),如何利用有限的硬件中断源有效满足大量的任务定时需求,成为嵌入式实时操作系统的核心内容之一。目前定时器的计时方法主要有三种一种方法是当每个计时周期到达时,先将所有定时器的计时数减1,然后判断结果是否为0,如果为0,则表示计时时间已到并进行报时处理,否则继续进行计时操作,这种方法称为简单计时法。另一种方法是多队列计时法。首先根据系统定时器应用特点,将定时器划分成不同时长的队列,目的在于减少每次参与计数的定时器个数。在设定定时器时,将计时时长分解为毫秒位、个位、十位、百位、千位等几个部分,再把定时器插入到最大的不为0的位所在的队列,计时就从该队列开始,完成后逐一计以下位,直至计时到毫秒位队列,最后在该队列计时完成后,该定时器总计时完毕。最后一种方法则是传统的两级定时方法。其采用两级定时器机制(计数器和定时器),它首先将硬件的时钟中断与计数器(Counter)相关联,每一个计数器可以关联一个或多个定时器,当计数器的计数达到一定的值的时候(比如在此时至少有一个与之关联的定时器会报时),计数器将会遍历检查与之关联的所有的定时器(Alarm),将定时器的报时时间与当前的计数值进行比较判断,并将应在此刻报时的定时器进行报时操作。纵上所述,可以看出简单计时法固然方法简单,实现容易,但当定时器数目满载(如20000个)时,则每次计数需要更新所有定时器,即做20万次更新遍历(假设每一个定时器的计时周期100毫秒),而嵌入式系统的CPU资源相当有限,定时器本身的任务不能占太多的资源,所以如果采用这种方法,就会占用较多的CPU资源。而多任务队列计时法相对简单计时法更高效,在每次计时周期到来时,只需做与队列数相同的判断和更新,以及可能的报时操作,就能基本满足嵌入式系统的定时需求。但同时该方法也存在很多冗余操作,如空负载时检查所有队列,满负载时要对所有队列做2倍于检查的加减法操作,真正有效的操作只有占其中很少部分的报时和插入操作;而且在队列处理中存在耗费计算资源的排序操作。而在传统的两级定时方法中,虽然每次硬件时钟中断仅触发计数器,而不触发所有定时器,在一定程度上提高了定时器效率,充分利用了硬件资源,但是由于计数器在每达到一定的值的时候,都要遍历与之关联的所有的定时器,并进行比较判断操作,其效率是很低的,特别是当与该计数器关联的定时器数量较多的时候,遍历所有定时器的做法会存在很多耗时的不必要的操作。
技术实现思路
针对现有技术中用单一硬件中断源控制多个定时器并解决简单定时器的低效率问题、多队列计时法中存在的冗余操作和排序操作的缺点以及传统的两级定时方法中耗时低效的遍历问题,本专利技术提出一种用于嵌入式实时操作系统定时器的高效遍历的两级定时方法。为了解决上述技术问题,本专利技术是通过以下技术方案实现的本专利技术提出的两级定时方法是指两级定时器机制(计数器和定时器),它首先将硬件的时钟中断与计数器(Counter)相关联,每一个计数器可以关联一个或多个定时器(如图1所示)。这样每次硬件时钟中断仅触发计数器进行计数,而不用触发所有的定时器,充分利用了硬件资源;而由计数器负责根据当前它的计数值和与其关联的定时器的报时时间,来判断是否使定时器进行报时操作。本专利技术所述包括以下步骤(1)先将至少一个计数器与对应的硬件中断源进行关联绑定操作,然后将至少一个定时器与相应的计数器进行关联操作。每个计数器的上面,有一个指向与其所关联的定时器链表的指针,在该链表中,定时器是按照其下一次的报时时刻的顺序进行排列的;在每个计数器的上面,有一整型变量(名为RemainTicks),表示此刻该计数器相关联的下一个定时器报时所需经过的计数单位。由于在链表中,定时器是按下一次报时的时刻顺序排列的,所以下一个报时的定时器肯定位于该链表的头部,所以RemainTicks的值也就等于此刻该链表的头指针所指的定时器报时所需经过的计数单位。当链表非空,且RemainTicks的值为0时,则表示此刻将至少有一个与该计数器相关联的定时器会报时。如果链表为空,则RemainTicks的值无意义。(2)如图2所示,在每个计时周期到来时,查询计数器的链表是否为空,如果为空,则继续等待下一个计时周期的到来;如果不为空,则将计数器的RemainTicks的值减1,并判断RemainTicks的值是否为0,如果不为0,则不需遍历定时器链表,继续等待下一个计时周期的到来;如果为0,则表示此刻至少有一个定时器会报时,进行如下操作(a)遍历定时器链表中会报时的定时器(它们处于链表的前部),直到遍历到不在此刻报时的定时器或已遍历到链表末尾的时候,退出这次遍历操作(无需继续遍历其余的定时器,因为它们肯定不会在此刻报时);(b)更新计数器的RemainTicks的值,其值为此时链表的头指针所指向的定时器的下一次报时所需经过的计数单位。作为本专利技术的一种改进,如果刚刚报时的定时器为一次性定时器的话,则将其直接从链表中删除。作为本专利技术的一种改进,如果刚刚报时的定时器为循环定时器的话,则更新其下一次的报时时刻,并按下一次报时时刻顺序将其在定时器链表中插入。作为本专利技术的一种改进,当上层应用程序需要启动新的定时器时,按照下一次报时的时刻顺序,将该定时器插入与其关联的计数器的定时器链表中。如果该定时器插入的位置为链表的头指针的话,则更新一下该计数器的RemainTicks的值,否则不需要更新计数器的RemainTicks的值。本专利技术的有益效果在于每当计时周期到来,计数器计数的时候,不用每次都去检查遍历定时器的链表,而只是在至少有一个定时器会报时的时候,才会去检查遍历定时器链表,这样提高了效率;在至少有一个定时器会报时检查遍历定时器的链表的时候,只会去检查遍历和更新那些会在此刻报时的定时器,而不会去遍历其余的在此刻还未报时的定时器,即不会去一一检查遍历所有的定时器,这样减少了耗时的不必要的操作,提高了效率。附图说明图1是本专利技术实施例中两级定时机制的结构示意图;图2是本专利技术所述的高效遍历的定时方法的核心算法流程图;图3是本专利技术所述的高效遍历的定时方法的运作举例示意图。具体实施例方式下面结合附图和实例对本专利技术所述的高效遍历的定时方法作进一步介绍。图3显示了在AXIOM CME-0555板子里,硬件中断源的计时周期到来时,相应的计数器进行计数,并在一定时刻高效遍历与其相关联的定时器进行报时的步骤原理。假本文档来自技高网...
【技术保护点】
一种嵌入式实时操作系统高效遍历的定时方法,包括以下步骤:(1)将至少一个计数器与对应的硬件中断源进行关联绑定操作,然后将至少一个定时器与计数器进行关联操作;所述计数器上有一指向与其所关联的定时器链表的指针,在该链表中定时器按 照其下一次的报时时刻的顺序进行排列;所述计数器上面有一表示此刻该计数器相关联的下一个定时器报时所需经过的计数单位的整型变量RemainTicks;(2)在每个计时周期到来时,查询计数器的链表是否为空,如果为空,则继续等待下一 个计时周期的到来;如果不为空,则将计数器的RemainTicks的值减1,并判断RemainTicks的值是否为0,如果不为0,则不需遍历定时器链表,继续等待下一个计时周期的到来;如果为0,则表示此刻至少有一个定时器会报时,进行如下操作: (a)遍历定时器链表中会报时的定时器,直到遍历到不在此刻报时的定时器或已遍历到链表末尾的时候,退出这次遍历操作;(b)更新计数器的RemainTicks的值,其值为此时链表的头指针所指向的定时器的下一次报时所需经过的计数单位。
【技术特征摘要】
1.一种嵌入式实时操作系统高效遍历的定时方法,包括以下步骤(1)将至少一个计数器与对应的硬件中断源进行关联绑定操作,然后将至少一个定时器与计数器进行关联操作;所述计数器上有一指向与其所关联的定时器链表的指针,在该链表中定时器按照其下一次的报时时刻的顺序进行排列;所述计数器上面有一表示此刻该计数器相关联的下一个定时器报时所需经过的计数单位的整型变量RemainTicks;(2)在每个计时周期到来时,查询计数器的链表是否为空,如果为空,则继续等待下一个计时周期的到来;如果不为空,则将计数器的RemainTicks的值减1,并判断RemainTicks的值是否为0,如果不为0,则不需遍历定时器链表,继续等待下一个计时周期的到来;如果为0,则表示此刻至少有一个定时器会报时,进行如下操作(a)遍历定时器链表中会报时的定时器,直到遍历到不在此刻报时的定时器或已遍历到链表末尾的时候,退出这次遍历操作...
【专利技术属性】
技术研发人员:吴朝晖,徐卢传,杨国青,李红,孙洁,赵民德,
申请(专利权)人:浙江大学,
类型:发明
国别省市:86[中国|杭州]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。