一种用于嵌入式实时操作系统定时器的两级定时方法

文档序号:6536075阅读:564来源:国知局
专利名称:一种用于嵌入式实时操作系统定时器的两级定时方法
技术领域
本发明涉及计算机领域的嵌入式实时操作系统,特别涉及一种用于嵌入式实时操作系统定时器的两级定时方法。
背景技术
实时系统是指如果逻辑和时序出现偏差会引起严重后果的系统,广泛应用于工厂生产过程控制、汽车业、办公自动化、计算机外设、通信设备、机器人、航空航天、民用消费等领域。
对于不太复杂的实时系统,一般可以设计成前后台式或者超循环式。对于大多数实时系统来说,因为有多任务处理和共享资源的要求,则必须有操作系统支持,该操作系统就称为实时操作系统。对于隐藏在系统内部的计算机系统成为嵌入式系统,而多数实时操作系统又是嵌入式的,则称为嵌入式实时操作系统。
嵌入式实时操作系统一般由任务调度管理、时间管理、任务同步和通信、内存管理等几部分组成。因为实时操作系统对时序的偏差依赖型很强,因此定时器作为操作系统时间管理的核心就显得很重要。
定时器的时钟源来源于硬件的时钟中断,时钟中断每隔一定时间产生,该时间间隔为最小计时时长,也就是定时器的计时精度,每个对硬件时钟中断处理称为计时周期。
目前定时器的计时方法主要有两种。一种方法是当每个计时周期到达时,先将所有定时器的计时数减1,然后判断结果是否为0,如果为0,则表示计时时间已到并进行到时处理,否则继续进行计时操作,这种方法称为简单计时法。
另一种方法是多队列计时法。首先根据系统定时器应用特点,将定时器划分成不同时长的队列,目的在于减少每次参与计数的定时器个数。在设定定时器时,将计时时长分解为毫秒位、个位、十位、百位、千位等几个部分,再把定时器插入到最大的不为0的位所在的队列,计时就从该队列开始,完成后逐一计以下位,直至计时到毫秒位队列,最后在该队列计时完成后,该定时器总计时完毕。
由于各队列除头定时器外计算的均是相对于上一个定时器的相对值,则计时的时候只需要对队列头部定时器时间做减运算,便可确定是否有定时器在本次计时到期。
纵上所述,简单计时法固然方法简单,实现容易,但当定时器数目满载(如20000个)时,则每次计数需要所有定时器做减法,即做20万次减法(假设每一个定时器的计时周期100毫秒),而嵌入式系统的CPU资源相当有限,定时器本身的任务不能占太多的资源,所以如果采用这种方法,就会占用较多的CPU资源。
而多任务队列计时法相对简单计时法更高效,在每次计时周期到来时,只需做与队列数相同的判断和减法,以及可能的报时操作,就能基本满足嵌入式系统的定时需求。但同时该方法也存在很多冗余操作,如空负载时检查所有队列,满负载时要对所有队列做2倍于检查的加减法操作,真正有效的操作只有占其中很少部分的报时和插入操作;而且在队列处理中存在耗费计算资源的排序操作。

发明内容
本发明要解决上述技术所存在的缺陷,提供一种用于嵌入式实时操作系统定时器的两级定时方法,采用两级定时器机制(计数器和定时器),主要解决了简单定时器的低效率问题和多队列计时法中存在的冗余操作和排序操作的缺点,提高了定时效率。
本发明解决其技术问题所采用的技术方案。这种用于嵌入式实时操作系统定时器的两级定时方法,不同于一般的硬件时钟中断直接与定时器相关联的一级定时器方法,首先将硬件的时钟中断与计数器(counter)相关联,每一个硬件时钟中断可以关联多于一个的计数器,在计数器中有可配置的计数单位,当计数器中的计数单位达到用户预设的值时,计数器将触发更高级的定时器(Alarm),每一个计数器可以关联多于一个的定时器。因为实现方法为硬件时钟中断——计数器——定时器的两级结构,故称为两级定时器方法。
本发明的优点主要有1、每次硬件时钟中断仅触发计数器,而不触发所有定时器,提高了定时器效率;2、没有排序等冗余操作,节省了CPU资源;3、在硬件有多个时钟定时器的情况下,通过定义多个计数器,不同的计数器关联不同的硬件时钟中断的方法能充分利用硬件资源。


图1是本发明两级定时器结构图;图2是本发明GetAlarm的流程图;图3是本发明GetAlarmBase的流程图;图4是本发明SetRelAlarm的流程图;
图5是本发明SetAbsAlarm的流程图;图6是本发明CancelAlarm的流程图;具体实施方式
下面结合附图和实例对本发明作进一步介绍这种用于嵌入式实时操作系统定时器的两级定时方法,主要步骤如下1)、用户定义每一个计数器计数单位Ci(O<i<K,K表示系统中计数器个数);2)、用户定义与计数器相关联的每一个定时器在Nij(表示系统中第i个计数器所关联的第j个定时器)个计数单位后触发,也就是说它将在Ci×Nij个硬件时钟中断后触发;3)、系统启动后,当一个硬件时钟中断到达,系统将第一个计数器的系统时钟个数加一,如果小于计数单位Ci,则将同样的过程应用在下一个计数器上,直到最后一个计数器;4)、如果等于计数单位Ci,则将与之相关联的第一个定时器的计数单位加一,如果小于Nij则将同样的过程应用在下一个定时器上,直到最后一个定时器;5)、如果等于Nij,则该定时器被触发,系统处理相应的周期性任务等等。
一、本发明主要需要的函数及其功能(流程图如图2-图6所示)1、GetAlarm取得由参数指定的定时器的现在时刻到触发时间的相对ticks值;2、GetAlarmBase取得由参数指定的定时器的计数器相关信息;3、SetRelAlarm设置定时器,指定定时器由现在开始后过若干tick(相对时间)之后被触发;4、SetAbsAlarm设置定时器,指定定时器由系统启动运行后过若干tick后(绝对时间)被触发;5、CancelAlarm取消定时器。
二、Data Description数据描述系统中定时器个数的宏定义ALARMNUM定时器数组OS_EXT AlarmCB OSAlarms[ALARMNUM];系统中计数器个数的宏定义CTRMNUM计数器数组OS_EXT CtrCB*OS_CTR[CTRNUM];三、定时器相关结构
1.定时器的控制结构AlarmOSCB中包括以下成员1,状态位,标志该定时器是否启用;2,关联的counter号;3,关联的任务;4,关联的事件;5,alarmCallback函数的入口;6,定时器下一个触发点的tick值;7,定时器的周期(对于循环定时器);8,同一个counter上面的定时器链表指针9,其他2.Alarmbase结构包括以下成员1,最大允许的tick值2,几个tick后触发一个counter值ticksperbase3,最小的循环tick数(对于循环定时器)4,其他3.Counter结构包括以下成员1,当前tick值(小于等于ticksperbase,达到ticksperbase时counter加一)2,当前counter值(ticksperbase的倍数)3,Counter的配置信息4,关联的定时器链表头指针下面举例说明本方法定时器的使用方法假设系统的硬件时钟周期是10毫秒,也就是每10毫秒触发一个硬件时钟中断。系统中有2个周期性任务A和B,分别对应两个定时器a和b他们各自的触发周期分别是200毫秒和300毫秒。为此可以设置计数器的计数单位为10,也就是每10个硬件时钟中断(100毫秒)触发一个计数器。而每2个计数器中断(200毫秒)后a定时器被触发A任务被激活,每3个计数器中断(300毫秒)后b定时器被触发而B任务被激活。
权利要求
1.一种用于嵌入式实时操作系统定时器的两级定时方法,其特征是首先将硬件的时钟中断与计数器相关联,每一个硬件时钟中断关联一个或多于一个的计数器,在计数器中有可配置的计数单位,当计数器中的计数单位达到用户预设的值时,计数器将触发更高级的定时器,每一个计数器关联一个或多于一个的定时器。
2.根据权利要求1所述的用于嵌入式实时操作系统定时器的两级定时方法,其特征在于实现的主要步骤1)、用户定义每一个计数器计数单位Ci,其中0<=i<K,K表示系统中计数器个数;2)、用户定义与计数器相关联的每一个定时器在Nij(其中Nij表示系统中第i个计数器所关联的第j个定时器)个计数单位后触发,也就是说它将在Ci×Nij个硬件时钟中断后触发;3)、系统启动后,当一个硬件时钟中断到达,系统将第一个计数器的系统时钟个数加一,如果小于计数单位Ci,则将同样的过程应用在下一个计数器上,直到最后一个计数器;4)、如果等于计数单位Ci,则将与之相关联的第一个定时器的计数单位加一,如果小于Nij,则将同样的过程应用在下一个定时器上,直到最后一个定时器;5)、如果等于Nij,则该定时器被触发,系统处理相应的周期性任务。
全文摘要
本发明涉及一种用于嵌入式实时操作系统定时器的两级定时方法,首先将硬件的时钟中断与计数器相关联,每一个硬件时钟中断可以关联多于一个的计数器,在计数器中有可配置的计数单位,当计数器中的计数单位达到用户预设的值时,计数器将触发更高级的定时器,每一个计数器可以关联多于一个的定时器。因为实现方法为硬件时钟中断——计数器——定时器的两级结构,故称为两级定时器方法。本发明的优点主要有1.每次硬件时钟中断仅触发计数器,而不触发所有定时器,提高了定时器效率;2.没有排序等冗余操作,节省了CPU资源;3.在硬件有多个时钟定时器的情况下,通过定义多个计数器,不同的计数器关联不同的硬件时钟中断的方法能充分利用硬件资源。
文档编号G06F9/46GK1710543SQ20051005008
公开日2005年12月21日 申请日期2005年6月13日 优先权日2005年6月13日
发明者吴朝晖, 赵民德, 孟晓楠, 李红, 厉蒋, 姜旭锋 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1