CN100533386C - 嵌入式实时操作系统高效遍历的定时方法 - Google Patents
嵌入式实时操作系统高效遍历的定时方法 Download PDFInfo
- Publication number
- CN100533386C CN100533386C CNB2006100523739A CN200610052373A CN100533386C CN 100533386 C CN100533386 C CN 100533386C CN B2006100523739 A CNB2006100523739 A CN B2006100523739A CN 200610052373 A CN200610052373 A CN 200610052373A CN 100533386 C CN100533386 C CN 100533386C
- Authority
- CN
- China
- Prior art keywords
- timer
- time
- counter
- correct time
- remainticks
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 230000027455 binding Effects 0.000 claims description 2
- 238000009739 binding Methods 0.000 claims description 2
- 230000015572 biosynthetic process Effects 0.000 description 10
- 238000005755 formation reaction Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 2
- 239000012467 final product Substances 0.000 description 2
- 238000005096 rolling process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
Images
Landscapes
- Measurement Of Predetermined Time Intervals (AREA)
Abstract
本发明涉及计算机领域,旨在提供一种计算机领域中的嵌入式实时操作系统中的定时器方法。该方法包括将至少一个计数器与对应的硬件中断源进行关联绑定操作,然后将至少一个定时器与计数器进行关联操作;在每个计时周期到来时,查询计数器的链表是否为空,据此进行相应操作步骤。本发明中的方法每当计时周期到来,计数器计数的时候,不用每次都去检查遍历定时器的链表,提高了效率;在至少有一个定时器会报时检查遍历定时器的链表的时候,只会去检查遍历和更新那些会在此刻报时的定时器,而不会去遍历其余的在此刻还未报时的定时器,即不会去一一检查遍历所有的定时器,这样减少了耗时的不必要的操作,提高了效率。
Description
技术领域
本发明涉及计算机领域,特别涉及计算机领域中的嵌入式实时操作系统中的定时器方法。
背景技术
嵌入式实时操作系统一般由任务调度管理、时间管理、任务同步和通信、内存管理等几部分组成。由于实时操作系统对时序的偏差依赖型很强,因此定时器作为操作系统时间管理的核心就显得很重要。总之,定时器是整个实时系统的一个关键所在,设计一个符合系统需求、且高效的定时器算法是非常有必要的。
定时器是基于硬件的时钟中断的,硬件时钟每隔一定时间会产生一个硬件时钟中断,该时间间隔为系统的最小计时单位。在嵌入式实时操作系统中,任务会要求系统在一定时间间隔后对任务报警并通过这种方式来处理周期性事务,而系统则根据时钟中断发生的次数来计算时间间隔,这就是嵌入式实时操作系统中的定时器功能。显然定时器是和硬件时钟中断关联起来。然而,硬件时钟的个数是有限的(往往只有一个),如何利用有限的硬件中断源有效满足大量的任务定时需求,成为嵌入式实时操作系统的核心内容之一。
目前定时器的计时方法主要有三种:
一种方法是当每个计时周期到达时,先将所有定时器的计时数减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板子里,硬件中断源的计时周期到来时,相应的计数器进行计数,并在一定时刻高效遍历与其相关联的定时器进行报时的步骤原理。假设计数器X有N个定时器与之相关联,计数器有一链表指针指向这些定时器,在该链表中,这些定时器按照下一次报时的时刻顺序排列的。假设在链表中,排在前面的5个定时器分别为定时器A、B、C、D、E,其下一次报时时间和周期值分别如下表所示。计数器X上的RemainTicks值等于与该计数器相关联的下一个定时器报时所需经过的计时单位,刚开始时由于定时器A的下一次报时时刻为30计时单位,当前系统时间为0计时单位,所以此时的RemainTicks值应等于30计时单位。
定时器名称 | 下一次报时时刻(计时单位) | 周期(计时单位) |
定时器A | 30 | 45 |
定时器B | 30 | 50 |
定时器C | 70 | 100 |
定时器D | 90 | 非周期 |
定时器E | 99 | 100 |
当下一计数周期到来时,计数器的RemainTicks值减1变为29,因为不等于0,所以继续等待下一计数周期的到来。
每当计数周期到来时,如果链表非空,则计数器的RemainTicks值都会减1,直到当RemainTicks等于0的时候,开始遍历与该计数器关联的定时器链表(因为此时至少会有一个定时器报时,设有K个定时器此时会报时,K>=1),按照定时器在链表中的顺序,定时器A和定时器B分别会被遍历到并进行报时操作,当遍历到定时器C的时候,发现定时器C不会在此刻报时(因为当前系统时刻为30计数单位,而它的报时时刻为70计数单位),所以结束遍历操作(无需继续遍历链表中剩余的定时器,即无需遍历其余的N-K个定时器,因为它们肯定不会在此刻报时)。然后计算出刚报时过的定时器的下一次报时时刻,定时器A和定时器B的下一次报时时刻分别为75计数单位和80计数单位,并按下一次报时时刻的顺序将它们俩插入到链表中,此时链表中前面5个定时器的顺序为:定时器C、A、B、D、E。最后,更新计数器的RemainTicks的值,其值应等于定时器C下一次报时还需经过的计数单位,即70—30=40计数单位。接着继续等待下一计数周期的到来。
根据上述的步骤原理,计数器计数的时候,当且仅当在至少有一个定时器会报时的时候,才会去检查遍历定时器链表,而且在检查遍历定时器链表的时候,只会遍历会在此刻进行报时的定时器,而不会去遍历其余的在此刻还未报时的定时器,这样减少了耗时的没必要的操作,从而提高了效率,特别是当与该计数器关联的定时器数量较多的时候,效果会更明显。
当上层应用程序需要添加新的定时器的时候,可以直接在相应的计数器的链表上面按照下一次报时的时刻的顺序插入该定时器即可。如果该定时器插在链表的头部,则需要更新计数器的RemainTicks的值,否则无需更新RemainTicks值。
当上层应用程序不再需要某定时器的时候,可以直接在相应的计数器的链表上面删除该定时器即可。如果该定时器原来是在链表的头部,则需要更新计数器的RemainTicks的值,否则无需更新RemainTicks值。
综上所述,本发明采用的高效遍历的定时方法,大大提高了计数器遍历触发定时器的效率,节省了系统的资源,而且维护、操作方法简单,实现容易。
最后,还需要注意的是,以上列举的仅是本发明的具体实施例子。显然,本发明不限于以上实施例子,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
Claims (4)
1、一种嵌入式实时操作系统高效遍历的定时方法,包括以下步骤:
(1)将计数器与对应的硬件中断源进行关联绑定操作,然后将定时器与计数器进行关联操作;
所述计数器上有一指向与其所关联的定时器链表的指针,在该链表中定时器按照其下一次的报时时刻的顺序进行排列;
所述计数器上面有一表示此刻该计数器相关联的下一个定时器报时所需经过的计数单位的整型变量RemainTicks;
(2)在每个计时周期到来时,查询计数器的链表是否为空,如果为空,则继续等待下一个计时周期的到来;如果不为空,则将计数器的RemainTicks的值减1,并判断RemainTicks的值是否为0,如果不为0,则不需遍历定时器链表,继续等待下一个计时周期的到来;如果为0,则表示此刻至少有一个定时器会报时,进行如下操作:
(a)遍历定时器链表中会报时的定时器,直到遍历到不在此刻报时的定时器或已遍历到链表末尾的时候,退出这次遍历操作;
(b)更新计数器的RemainTicks的值,其值为此时链表的头指针所指向的定时器的下一次报时所需经过的计数单位。
2、根据权利要求1所述的嵌入式实时操作系统高效遍历的定时方法,其特征在于,在所述第(2)步操作中,如果刚刚报时的定时器为一次性定时器,则将其直接从链表中删除。
3、根据权利要求1所述的嵌入式实时操作系统高效遍历的定时方法,其特征在于,在所述第(2)步操作中,如果刚刚报时的定时器为循环定时器,则更新其下一次的报时时刻,并按下一次报时时刻顺序将其在定时器链表中插入。
4、根据权利要求1所述的嵌入式实时操作系统高效遍历的定时方法,其特征在于,当上层应用程序需要启动新的定时器时,按照下一次报时的时刻顺序,将该定时器插入与其关联的计数器的定时器链表中。如果该定时器插入的位置为链表的头指针的话,则更新该计数器的RemainTicks的值,否则不需要更新计数器的RemainTicks的值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100523739A CN100533386C (zh) | 2006-07-07 | 2006-07-07 | 嵌入式实时操作系统高效遍历的定时方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100523739A CN100533386C (zh) | 2006-07-07 | 2006-07-07 | 嵌入式实时操作系统高效遍历的定时方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1877535A CN1877535A (zh) | 2006-12-13 |
CN100533386C true CN100533386C (zh) | 2009-08-26 |
Family
ID=37509978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100523739A Expired - Fee Related CN100533386C (zh) | 2006-07-07 | 2006-07-07 | 嵌入式实时操作系统高效遍历的定时方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100533386C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840353B (zh) * | 2010-05-14 | 2012-10-24 | 陈冬岩 | 一种实时嵌入式操作系统的动态计时方法 |
CN101859260B (zh) * | 2010-05-14 | 2012-12-12 | 中国科学院计算技术研究所 | 用于操作系统中的定时器管理装置和管理方法 |
CN102637126B (zh) * | 2011-02-15 | 2015-05-13 | 无锡物联网产业研究院 | 嵌入式系统的定时方法、装置和系统 |
CN103034480B (zh) * | 2011-09-30 | 2016-01-20 | 重庆重邮信科通信技术有限公司 | 一种嵌入式系统定时器实现方法 |
CN103455402B (zh) * | 2013-08-16 | 2018-02-02 | 厦门雅迅网络股份有限公司 | 一种无累计误差的定时器控制方法 |
CN103677976B (zh) * | 2013-12-09 | 2017-12-05 | 大唐移动通信设备有限公司 | 一种基于时间轮定时器的事件处理方法及装置 |
WO2019140551A1 (zh) * | 2018-01-16 | 2019-07-25 | 深圳市汇顶科技股份有限公司 | 定时器实现方法和装置 |
-
2006
- 2006-07-07 CN CNB2006100523739A patent/CN100533386C/zh not_active Expired - Fee Related
Non-Patent Citations (4)
Title |
---|
一种面向实时系统的单循环队列算法的应用. 刘鹏,夏士雄.计算机工程与设计,第25卷第12期. 2004 |
一种面向实时系统的单循环队列算法的应用. 刘鹏,夏士雄.计算机工程与设计,第25卷第12期. 2004 * |
实时嵌入式系统中高效定时器算法的实现. 芦东昕,鲁旭,缪敬.中兴通讯技术,第5期. 2003 |
实时嵌入式系统中高效定时器算法的实现. 芦东昕,鲁旭,缪敬.中兴通讯技术,第5期. 2003 * |
Also Published As
Publication number | Publication date |
---|---|
CN1877535A (zh) | 2006-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100533386C (zh) | 嵌入式实时操作系统高效遍历的定时方法 | |
CN101859260B (zh) | 用于操作系统中的定时器管理装置和管理方法 | |
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
CN101359294B (zh) | 一种嵌入式系统定时器的管理方法 | |
CN102270156A (zh) | 一种实时嵌入式系统定时器管理方法 | |
CN107038162A (zh) | 基于数据库日志的实时数据查询方法和系统 | |
CN1989490A (zh) | 用于调度由于事件相关性被部分排序的事务的方法和系统 | |
US8832505B2 (en) | Methods and apparatus to provide failure detection | |
CN106325984A (zh) | 一种大数据任务调度装置 | |
CN101419616A (zh) | 一种数据同步方法及装置 | |
CN107291920A (zh) | 一种机票查询缓存方法 | |
CN102043667A (zh) | 一种嵌入式操作系统的任务调度方法 | |
CN103491174A (zh) | 基于延迟服务器的周期/非周期混合实时任务调度方法 | |
CN102521347B (zh) | 基于优先级的模式匹配中间结果管理方法 | |
CN109344189A (zh) | 一种基于NiFi的大数据计算方法及装置 | |
CN107589993A (zh) | 一种基于linux实时操作系统的动态优先级调度算法 | |
CN100363897C (zh) | 一种用于嵌入式实时操作系统定时器的两级定时方法 | |
CN104111876A (zh) | 一种基于Oracle资源计划的动态资源管理装置及方法 | |
CN101561795A (zh) | 一种分布式系统中的数据同步方法及装置 | |
CN104317971B (zh) | 实时系统参数数据的非阻塞更新和访问方法 | |
CN102183952A (zh) | 一种在plc中嵌入非致命故障诊断的方法 | |
Safaei et al. | Dispatching stream operators in parallel execution of continuous queries | |
CN104301134A (zh) | 软件设计中基于海量定时器的管理方法及系统 | |
CN108965032A (zh) | 一种基于循环队列的消息推送量统计方法和装置 | |
CN103294774B (zh) | 基于多时区的对数据仓库进行批量加载的装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090826 Termination date: 20170707 |