用于实时操作系统的定时方法和系统的制作方法

文档序号:6570903阅读:187来源:国知局
专利名称:用于实时操作系统的定时方法和系统的制作方法
技术领域
本发明涉及操作系统领域,更具体地涉及一种用于实时操作系 统的定时方法和系统。
背景技术
随着嵌入式实时系统在一^个领i或的广泛应用,嵌入式寿欠件的开 发也受到越来越多的瞩目。而在嵌入式软件开发中,定时器管理功 能是对嵌入式软件的实时操作、快速响应影响非常大的一个方面; 同时由于嵌入式实时操作系统对定时器的精度要求远远高于通用 操作系统,所以如何尽可能地提高实时操作系统的定时管理精度, 是嵌入式软件系统需要关注的一个i果题。嵌入式软件的定时器要求准确,及时;而在嵌入式系统中一般 都没有方便、现成的软件定时器可以直接使用。因此,嵌入式系统 中的定时器一^L都通过捕捉实时I喿作系统(RTOS)的系统嘀嗒 (TICK)信号来实5见。目前,嵌入式4欠件定时器的通用冲支术方案如图1所示。其他的 技术实现同此方案大同小异。采用若干个(L个)一定长度的数组和循环指针变量组成一个循 环计时队列,循环指4十变量以循环的方式逐一指向各H组元素;这才羊,构成一个单循环队列(循环队列长度为L),而这个单循环队列 的每个节点又是一个单向的有序队列。当上层应用程序申请定时器时,首先根据待设定定时器的长度 找到循环队列中相应的节点元素的4立置(TICK游标+祠"没定定时 器的时长与循环队列长度LOOP—QUE—LENGTH相除的余数);然得的商)插入到循环队列该节点上的单向队列中。在每个计时周期到来时,TICK游标向前走一4立,查询该处的 《连表队列是否为空,如果为空,则不处理;如不为空,则判断该处 队列中定时器循环因子值是否为0。如为0,则进行相应的报时操 作,并删除该定时器资源;如循环因子值不为0,则将循环因子值 减l,然后判断下一个定时器;当上层应用程序不再需要定时器时, /人循环队列中删除该定时器资源。该嵌入式软件定时器通用的技术方案由于直接使用实时操作 系统的系统嘀嗒信号来实现,理i仑上精度可以达到TICK级的误差 (TICK的精度由嵌入式系统的硬件确定), 一般来说,都是可以满 足嵌入式软件定时管理功能的要求的。但是,这种通用的软件定时器方案对于多个定时器同时超时的 精度是无法保证的。比如在时刻1设置一个相对定时器T1,定时器 时间为n毫秒;过了 1毫秒后,又i殳置一个相对定时器T2,定时器 时间为(n-1)毫秒,以此类推,过了 (n-1)毫秒后,设置一个 相对定时器T(n-1),定时器时间为l毫秒。这样,在时刻l后n 毫秒,同时就有(n-1 )个定时器超时。这就需要在一个TICK内处理完这n个超时的定时器遍历这n个定时器链表,发送超时消 息,释放超时的定时器资源(包括对超时定时器数据的处理、对链 表节点的删除以及对释放后链表节点的加入),如图2。可见,对每 个定时器超时的处理是需要耗费一定的处理时间的(假设为len), 很显然,当n大于(一个TICK的时间/len)时,部分定时器的精度 就无法保证了。同时,考虑到对定时器资源的释放过程时间较长, 而且在定时器超时处理中占用了大部分的处理时间,可以预见,n值不会太大,即多个定时器同时超时时,该方案通常是无法保证定 时器的精度的。对于这种情况, 一般的处理方法是一、 不进行处理。在一个TICK内处理的定时器数目较大时, 显示警告,标明对该种情况,嵌入式软件不支持。二、 超过一个TICK内能够处理的定时器阈值数后的超时定时 器移到下一个TICK进行处理(如果数目仍然较大,再移到该TICK 后的第二个TICK进4于处理,依次类4偉,直到处理结束)。该处理方 法可以解决超过阈值数目的超时定时器,但是其精度在原来精度基 础上多了一个TICK以上的误差,可能导致定时器精度无法满足嵌 入式软件要求。如何扬长避短,既保持通用软件定时器方案的的高效、可行性 等优点,又避免其可能存在的多个定时器同时超时时精度无法保证 的缺点是更好利用嵌入式软件定时器的关键。发明内容鉴于上述问题,本发明提供了 一种用于实时操作系统的定时方 法和定时系统,以提高定时器的精度。根据本发明的 一 方面,多l供了 一种用于实时才喿作系统的定时方法,包4舌以下步艰《S302,建立用于定时的循环计时队列;S304, 当循环计时队列中的未处理的超时定时器的^:目大于1时,记录超 时定时器在循环计时队列中的4立置,并中止由超时定时器进4亍定时 的事件。根据本发明的另 一方面,提供了 一种用于实时操作系统的定时 系统,其包"l舌定时队列建立装置,用于建立用于定时的循环计时 队列;定时事4牛中止装置,用于当循环计时队列中的未处理的超时 定时器的数目大于1时,记录超时定时器在循环计时队列中的位置, 并中止由超时定时器进行定时的事件。通过本发明,可以有效提高嵌入式软件定时器的精度,特别是 对多个定时器同时超时的情况。而且,本发明对嵌入式软件系统平 稳性的影响可以忽略不计,具有很高的可操作性。


此处所说明的附图用来纟是供对本发明的进一步理解,构成本申 请的一部分,本发明的示意性实施例及其说明用于解释本发明,并 不构成对本发明的不当限定。在附图中图1是通用的定时器管理方案的示意图;图2是捕捉TICK信号后, 一个TICK内需要完成的工作示意图;图3A至图3D是4艮据本发明的用于实时才喿作系统的定时方法 及其步骤的流程图;图4是冲艮据本发明的用于实时4乘作系统的定时方法的实施例的 用于提高嵌入式定时器精度的方法的示意图;图5是捕捉TICK信号后,根据本发明的用于实时操作系统的 定时方法的实施例的定时器的处理流禾呈示意图;图6是根据本发明的用于实时操作系统的定时方法的实施例的 定时器设置流程示意图;图7是根据本发明的用于实时操作系统的定时方法的实施例的 定时器删除流禾呈示意图;以2L图8是根据本发明的用于实时操作系统的定时系统的框图。
具体实施方式
下面参考附图,详细说明本发明的实施方式。参考图3A至图3D,说明根据本发明的用于实时操作系统的定 时方法及其步驶《。如图3A所示,才艮据本发明的用于实时l喿作系统的定时方法包 :括以下步骤S302,建立用于定时的循环计时队列;S304,当循环 计时队列中的未处理的超时定时器的lt目大于1时,i己录超时定时 器在循环计时队列中的位置,并中止由超时定时器进行定时的事 件。上述定时方法还可以包括以下步骤S306,当i殳置新定时器时, 首先检查循环计时队列中是否存在超时定时器,如果存在,则从循 环计时队列中删除超时定时器,再将新定时器插入循环计时队列 中,否则直4妄将新定时器插入循环计时队列中。如图3B所示,步骤S302包括以下步骤S3022,建立由特定 长度的lt组和循环指4十组成的循环计时队列;S3024,建立用于标 记凄t组和循环指4十的位置变量。如图3C所述,步骤S304包括以下步骤S3042,当捕捉到嘀 。达信号时,判断循环计时队列中的未处理的超时定时器的数目是否 大于l; S3044,如果超时定时器的^:目不大于1,则从循环计时队 列删除超时定时器从而中止由超时定时器进行定时的事件,否则, 将超时定时器的位置信息记录在用于标记数组和循环指针的位置 变量中,并中止由超时定时器进行定时的事件。如图3D所示,步骤S306包括以下步骤S3062,当设置新定 时器时,;险查用于标i己^:组和循环指4十的位置变量中是否记录有超 时定时器的位置信息;S3064,如果记录有超时定时器的位置信息, 则首先根据超时定时器的位置信息从循环计时队列的相应位置删 除超时定时器,再进行步骤S3066,否则直接进行S3066; S3066, 才艮才居新定时器的长度计算新定时器在循环计时队列中的位置,将新 定时器插入到循环计时队列中的计算得出的位置中。其中,特定长度的数组的长度与实时操作系统允许的最大定时 器凄t目相同。在循环计时队列中,循环指4十以循环的方式逐一指向 特定长度的^t组。特定长度的lt组是单向有序队列。新定时器在循 环计时队列中的^f立置通过以下方法计算新定时器的位置- (循环 计时队列的起始位置+新定时器的长度与循环计时队列的长度相 除的余数)与循环计时队列的长度相除取余。在实时才乘作系统中止 运4亍时,删除定时方法中建立的循环计时队列和用于标i己凄t组和循 环指针的位置变量。下面i兑明冲艮据本发明的用于实时#:作系统的定时方法的具体 实施例。才艮才居本发明的用于实时才喿作系统的定时方法的实施例中主要包^舌以下步艰《步骤1:建立用于嵌入式软件定时器的由一定长度的数组和循 环指4十变量组成的循环计时队列。其中,循环指针变量以循环的方 式逐一指向各^:组元素;这冲羊,构成一个单循环队列,而这个单循 环队列的每个节点又是一个单向的有序队列。同时建立记录数组位 置(Index)和循环指4十头〗立置(Headerldlndex)的变量,爿寻其初始 化为空(NULL);建立处理结束标识(HandleOverlnd),将其初始 化为FALSE。其中,循环队列的结构描述如下typedef struct tagTIMER QUEWORD32 dwTimerNum;/*该节点i殳置的定时器lt量 */ WORD32 Headerld;/*已设置的定时器队列头 */ WORD32 Lastld;/*已i殳置的定时器队列尾 */ }T—TIMER—QUE;定时器控制块数组需要包括如下信息WORD32dwLo叩Counter; /*定时器循环次数 */WORD32Pno;/*进程号WORD32dwPara;/*定时器参数WORD32dwRemainSec;/*定时器剩余秒数氺WORD32Timerld;/*定时器IDWORD32Pre Timer;/*前一定时器IDWORD32NextTimer;/*后一定时器ID WORD 16wQuePosition;循环定时器的位置WORD16wTimerNo; /*定时器事件号 */BYTE ucType; /*定时器类型 */BYTE ucUseType; /*定时器l吏用类型 */如图1所示,循环队列^1由长度为L的^t组和循环指针变量组 成的。循环队列的长度L可考虑如下L与系统中最大的定时器数目MAX的大小基本相同,以便当 使用的定时器数目接近MAX个时,定时器可以随机均匀地分布到 循环队列的各数组元素中,使定时器负载比较均衡;如果L太小容 易造成倍数值的减操作过多,效率得不到提高;L太大则浪费存储 空间。为了避免在单循环队列中引入繁瑣的队列操作,可以适当增 大L的值。步骤2:在每个硬件中断(TICK信号)到达后,TICK游标移 动到循环队列中相应的节点,并对节点上的队列进4亍扫描。如果定 时器超时,且超时定时器数目只有一个,贝'W巴超时定时器的消息放 入超时消息队列,同时删除定时器资源,乂人单向的有序队列中脱链; 如果超时定时器的数目不止一个,且HandleOverlnd为FALSE (标 明该超时定时器并未进行处理),则仅4巴对应的多个定时器超时消 息放入超时消息队列中,而每个TICK中耗时较大的定时器链表遍 历、定时器资源释方文暂时不进行处理,从而可以有效节省每个TICK 的处理效率,提高同时超时的多个定时器的精度,具体过程如图4 所示。也就是i兌,在超时定时器的数目不止一个,且HandleOverlnd 为FALSE时,把这些超时定时器的超时消息放入超时消息队列, 记录当前超时定时器的数组位置(Index)和循环指针头位置 (Headerldlndex ),处理完后,设置HandleOverlnd为TRUE (标明 该超时定时器已经进4于处理);如果超时定时器的凄t目不止一个,<旦HandleOverlnd为TRUE,则直4妄返回,等4寺进4亍下一个TICK 对定时器的处理,具体过程如图5所示。步骤3'.定时器设置时,首先检查超时定时器的数组位置 (Index )和循环指4十头4立置(Headerldlndex )是否为空。如果为空, 则根据设置定时器的长度计算其在循环计时队列中的位置,并进行 相应的队列插入处理。否则,4艮据凄t组位置和循环指4十头位置标识 的循环计时队列位置,对其所在节点进4于资源删除,以及进4于从单 向的有序队列中脱链的烦瑣操作处理,然后再进行定时器的设置, 具体过禾呈如图6所示。其中,如图7所示,/人循环计时队列删除超 时定时器时,在对指定的定时器资源释方文后,4艮才居凄t组位置和循环 指针头位置标识的循环计时队列位置,对其所在节点的资源进行遍 历、释放,以及从单向的有序队列中脱链的烦瑣操作处理。其中,新定时器在循环队列中的插入位置计算7>式如下新定时器的插入位置=(当前循环计时队列头位置+新定时器 时长与循环队列长度相除的余凄t)与循环计时队列长度相除取余其中,在步骤l中,记录数组位置和循环指针头位置的变量, 用于在其他适当时候(比如系统空闲,设置定时器,删除定时器时)对定时器资源遍历、释放时定位使用;处理结束标识用于在处理 TICK信号时对已经超时,其定时器资源在其他时候释放的节点进 行跳过处理,避免重复处理。其中,在步骤2中,如图4所示,对同时超时的多个定时器处 理<义4义是4巴对应的多个定时器超时消息》文入超时消息队列中,而每 个TICK中耗时较大的定时器链表遍历、定时器资源释放暂时不进 行处理,从而有效的节省了每个TICK的处理效率,提高了同时超 时的多个定时器的精度。设置定时器时是定时器资源释放的最好时机。由于定时器资源 直接影响到定时器申请,所以在设置定时器之前首先申请定时器资源,保证定时器的资源能够被顺利申请;并在设置定时器之前将超 时定时器删除,以保证对嵌入式系统的影响最小。在嵌入式软件模块或系统中止运行时,释放定时器循环计时队 列和i己录^t组^f立置和循环指4十头4立置的变量。可见,上述实例中对巴在TICK信号这一有限时间内需要处理完 的操作分成两部分分别进行处理l)需要立即执行的部分(发送定 时器超时消息),在TICK信号处理中进行立即处理;2)可以放到其 他时间内处理的部分(对超时定时器所占资源以及所在位置的处 理),放到定时器设置和定时器释放时再进行处理。从而有效的提 高了多个同时超时定时器的精度,这对于提高嵌入式实时操作系统 的快速反应性能是4艮有裨益的。同时,该方法对现有的^L术方案改 动很小,不但可以提高嵌入式软件定时器的精度,而且可以节省嵌入式软件定时器的重开发成本和升级成本,在嵌入式软件领域有很 大的推广价值和实用价值。参考图8,-沈明用于实现4艮据本发明的用于实时才喿作系统的定 时方法的定时系统。如图8所示,根据本发明的用于实时操作系统的定时系统包括 定时队列建立装置802,用于建立用于定时的循环计时队列;定时 事件中止装置804,用于在循环计时队列中的未处理的超时定时器 的数目大于1的情况下,记录超时定时器在循环计时队列中的位置, 并中止由超时定时器进行定时的事件。上述定时系统还可以包括新定时器设置装置806,用于在需 要i殳置新定时器的情况下,4企查循环计时队列中是否存在超时定时 器,如果存在,则从循环计时队列中删除超时定时器,再将新定时 器插入循环计时队列中,否则直接将新定时器插入循环计时队列中。其中,定时队列建立装置802包括队列建立模块8022,用于 建立由特定长度的教:组和循环指4十组成的循环计时队列;变量建立 模块8024,用于建立用于标记数组和循环指针的位置变量。其中,定时事件中止装置804包括数目判断模块8042,用于 在捕捉到嘀。达信号的情况下,判断循环计时队列中的未处理的超时 定时器的数目是否大于l;第一定时器删除模块8044,用于在超时 定时器的数目不大于1的情况下,从循环计时队列删除超时定时器 从而中止由超时定时器进行定时的事件;定时器记录模块8046,用于在超时定时器的4fet目大于1的情况下,将超时定时器的位置信息 记录在用于标记凄t组和循环指针的位置变量中,并中止由超时定时 器进行定时的事件。其中,新定时器设置装置806包括定时器检查模块8062,用 于在需要设置新定时器的情况下,4全查用于标记数组和循环指针的 位置变量中是否记录有超时定时器的位置信息;第二定时器删除模 块8064,用于在记录有超时定时器的位置信息的情况下,根据超时 定时器的位置信息从循环计时队列的相应位置删除超时定时器;定 时器插入模块8066,用于根据新定时器的长度计算新定时器在循环 计时队列中的位置,将新定时器插入到循环计时队列中的计算得出 的位置中。其中,特定长度的数组的长度与实时操作系统允许的最大定时 器凄t目相同。在循环计时队列中,循环指4十以循环的方式逐一指向特定长度的4fet组。特定长度的凄史組是单向有序队列。新定时器在循 环计时队列中的^f立置通过以下方法计算新定时器的<立置=(循环 计时队列的起始位置+新定时器的长度与循环计时队列的长度相 除的余数)与循环计时队列的长度相除取余。其中,定时器插入冲莫块8066可以包括用于#4居所述新定时器 的长度计算所述新定时器在所述循环计时队列中的位置的定时器 位置计算模块。在实时操作系统中止运行时,删除定时系统中建立的循环计时 队列和用于标记凄t组和循环指针的位置变量。以上所述仅为本发明的优选实施例而已,并不用于限制本发 明,对于本领域的4支术人员来i兌,本发明可以有各种更改和变化。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进 等,均应包含在本发明的保护范围之内。
权利要求
1. 一种用于实时操作系统的定时方法,其特征在于包括以下步骤S302,建立用于定时的循环计时队列;以及S304,当所述循环计时队列中的未处理的超时定时器的数目大于1时,记录所述超时定时器在所述循环计时队列中的位置,并中止由所述超时定时器进行定时的事件。
2. 根据权利要求1所述的定时方法,其特征在于,还包括以下步 骤S306,当i殳置新定.时器时,首先4企查所述循环计时队列 中是否存在所述超时定时器,如果存在,则从所述循环计时队 列中删除所述超时定时器,再将所述新定时器插入所述循环计 时队列中,否则直4^将所述新定时器插入所述循环计时队列中。
3. 根据权利要求2所述的定时方法,其特征在于,所述步骤S302 包括以下步骤S3022,建立由特定长度的数组和循环指针组成的循环计 时队列;S3024,建立用于标记所述数组和所述循环指针的位置变量。
4. 根据权利要求3所述的定时方法,其特征在于,所述步骤S304 包4舌以下步骤S3042,当捕才足到嘀。达信号时,判断所述循环计时队列中 的未处理的所述超时定时器的数目是否大于1;以及S3044,如果所述^£时定时器的数目不大于1,则从所述 循环计时队列删除所述.超时定时器/人而中止由所述超时定时 器进行定时的事件,否则,将所述超时定时器的位置信息记录 在用于标记所述数组和所述循环指针的位置变量中,并中止由 所述超时定时器进行定时的事件。
5. 根据权利要求4所述的定时方法,其特征在于,所述步骤S306 包4舌以下步-骤S3062,当设置新定时器时,检查用于标记所述数组和所 述循环指针的位置变量中是否记录有所述超时定时器的位置信息;S3064,如果记录有所述超时定时器的位置信息,则首先 根据所述超时定时器的位置信息从所述循环计时队列的相应 位置删除所迷超时定时器,再进行步骤S3066,否则直接进行 S3066;以及S3 066,根据所述新定时器的长度计算所述新定时器在所 述循环计时队列中的位置,将所述新定时器插入到所述循环计 时队列中的计算得出的位置中。
6. 根据权利要求5所述的定时方法,其特征在于,所述特定长度 的数组的长度与所述实时操作系统允许的最大定时器数目相 同。
7. #4居一又利要求5所述的定时方法,其特4正在于,在所述循环计 时队列中,所述循环指针以循环的方式逐一指向所述特定长度 的数组。
8. 根据权利要求7所述的定时方法,其特征在于,所述特定长度 的数组是单向有序队列。
9. 根据权利要求5所述的定时方法,其特征在于,所述新定时器 在所述循环计时队列中的位置通过以下方法计算新定时器的 位置=(循环计时队列的起始位置+新定时器的长度与循环计 时队列的长度相除的余凄t)与循环计时队列的长度相除耳又余。
10. 根据权利要求3至9中的任一项所述的定时方法,其特征在于, 在所述实时操作系统中止运行时,删除所述定时方法中建立的 所述循环计时队列和用于标记所述数组和所述循环指针的位 置变量。
11. 一种用于实时才喿作系统的定时系统,其特征在于包括定时队列建立装置,用于建立用于定时的循环计时队列;定时事件中止装置,用于当所述循环计时队列中的未处 理的超时定时器的^t目大于1时,记录所述超时定时器在所述 循环计时队列中的位置,并中止由所述超时定时器进行定时的 事件。
12. 根据权利要求11所述的定时系统,其特征在于,还包括新定时器i殳置装置,用于在需要i殳置新定时器时,4企查 所述循环计时队列中是否存在所述超时定时器,如果存在,则 从所述循环计时队列中删除所述超时定时器,再将所述新定时器插入所述循环计时队列中,否则直^妄将所述新定时器插入所 述循环计时队列中。
13. 根据权利要求12所述的定时系统,其特征在于,所述定时队 列建立装置包括队列建立模块,用于建立由特定长度的数组和循环指针 组成的循环计时队列;以及变量建立4莫块,用于建立用于标i己所述凄t组和所述循环 指针的位置变量。
14. 根据权利要求13所述的定时系统,其特征在于,所述定时事 件中止装置包括数目判断模块,用于在捕捉到嘀哒信号的情况下,判断 所述循环计时队列中的未处理的所述超时定时器的^t目是否大于l;第一定时器删除模块,用于在所述超时定时器的数目不 大于1的情况下^人所述循环计时队列删除所述超时定时器从而中止由所述超时定时器进^f亍定时的事件;以及定时器记录模块,用于在所述超时定时器的数目大于1 的情况下,将所述超时定时器的位置信息记录在用于标记所述 凄史组和所述循环指针的位置变量中,并中止由所述超时定时器 进行定时的事件。
15. 根据权利要求14所述的定时系统,其特征在于,所述新定时 器设置装置包括定时器检查模块,用于在需要设置新定时器的情况下, -险查用于标记所述凄t组和所述循环指针的位置变量中是否记 录有所述超时定时器的位置信息;第二定时器删除模块,用于在记录有所述超时定时器的 位置信息的情况下,根据所述超时定时器的位置信息从所述循环计时队列的相应<立置删除所述超时定时器;以及定时器插入模块,用于根据所述新定时器的长度计算所 述新定时器在所述循环计时队列中的^f立置,^寻所述新定时器插 入到所述循环计时队列中的计算得出的位置中。
16. 才艮据^L利要求15所述的定时系统,其特;f正在于,所述特定长 度的数组的长度与所述实时操作系统允许的最大定时器数目 相同。
17. 冲艮据权利要求15所述的定时系统,其特征在于,在所述循环 计时队列中,所述循环指4十以循环的方式逐一指向所述特定长 度的lt组。
18. 根据权利要求17所述的定时系统,其特征在于,所述特定长 度的数组是单向有序队列。
19. 根据权利要求15所述的定时系统,其特征在于,所述新定时 器在所述循环计时队列中的位置通过以下方法计算新定时器 的位置=(循环计时队列的起始位置+新定时器的长度与循环 计时队列的长度相除的余数)与循环计时队列的长度相除取余。
20. 根据权利要求15所述的定时系统,其特征在于,所述定时器 插入模块包括用于根据所述新定时器的长度计算所述新定时 器在所述循环计时队列中的位置的定时器位置计算模块。
21. 4艮据权利要求13至20中的任一项所述的定时系统,其特征在 于,在所述实时操作系统中止运行时,删除所述定时系统中建 立的所述循环计时队列和用于标记所述数组和所述循环指针 的位置变量。
全文摘要
本发明公开了一种用于实时操作系统的定时方法和系统。其中,用于实时操作系统的定时方法包括以下步骤S302,建立用于定时的循环计时队列;S304,当循环计时队列中的未处理的超时定时器的数目大于1时,记录超时定时器在循环计时队列中的位置,并中止由超时定时器进行定时的事件。通过本发明,可以有效提高嵌入式软件定时器的精度,特别是对多个定时器同时超时的情况。
文档编号G06F9/46GK101221512SQ20071000088
公开日2008年7月16日 申请日期2007年1月12日 优先权日2007年1月12日
发明者徐立锋, 刚 曹, 王泽民 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1