一种实时嵌入式操作系统的动态计时方法

文档序号:6602322阅读:233来源:国知局
专利名称:一种实时嵌入式操作系统的动态计时方法
技术领域
本发明涉及一种实时嵌入式操作系统的动态计时方法。
背景技术
实时操作系统需要采用时钟计时功能进行延迟任务苏醒时间的管理以及对同优先级任务共享处理器资源的管理。目前的实时操作系统(如FreeRT0S,UC/OS-2)采用了固定 时间片的管理方法,CPU在每个时间片上苏醒并对每个延迟的任务进行延迟时间更新操作 以及同优先级任务轮转操作等。这个时间片的大小是所有任务延迟中的最小值,具体操作 方法如下首先,利用硬件定时器设定固定的定时周期,定时周期到则产生定时中断。然后, 在定时中断的处理程序中更新系统时间并访问延时任务链表,更新延时任务的剩余延时时 间。如果延时时间到,则把任务加入到就绪队列中。尽管该方法简单而且容易实现,但是它 存在若干性能问题。首先,当系统最小延时较小时,需要采用小的定时周期,这样即便最小 延时任务执行频率低,依然需要系统频繁进入定时中断,增加了处理器负担;其次,固定的 定时周期限制了系统延时的分辨率。例如,1毫秒的定时周期决定了任务延时仅能以毫秒为 单位,这对某些需要精确延时的应用构成了障碍。

发明内容
本发明的目的是为克服上述现有技术的不足,提供一种实时嵌入式操作系统的动 态计时方法。为实现上述目的,本发明采用下述技术方案
一种实时嵌入式操作系统的动态计时方法,该方法包括以下步骤 Stepl 当定时器中断时,记录此时的系统时间;
Step2 操作系统将各个任务需要执行时刻升序排列组成延时任务链表,将链表头的 任务需要执行时刻和系统时间进行比较,如果链表头的任务需要执行时刻小于等于系统时 间,则将链表头的任务移出,添加到相应的就绪任务链表中;反之则将链表头的任务需要执 行时刻减去系统时间,将差值作为链表头的任务延时时间;
Step3 如果该延时时间大于定时器设定的最大周期,则将该最大周期设定为下次任务 的定时器中断周期;如果延时时间小于定时器设定的最大周期,则将此延时时间作为下次 任务的定时器中断周期,退出定时器中断;
St印4 判断延时任务链表是否为空,如为空则退出定时器中断,反之则返回stepl继 续执行。所述定时器设定最大周期为硬件定时器设定的最大定时周期。所述step2中,每个任务的描述块中都有一个变量表示该任务的需要执行的时 亥IJ,当任务需要延时时,系统当前时间加上任务需要延时时间,得到任务需要执行的时刻, 然后按照任务需要执行的先后顺序插入到延时任务链表中。本发明的有益效果本发明的动态计时方法采用可变定时时间取代现有固定定时时间,以硬件定时器时钟源周期为时间单位取代现有以硬件定时时间为时间单位,减少了系统空闲时维护系统时间的不必要开销,同时提高了系统的响应时间,降低了处理器负载 并提高了定时精度。


图1是本发明的流程图2是任务延时时间小于定时器设定最大周期MaxPeriod的实施例; 图3是任务延时时间大于定时器设定最大周期MaxPeriod的实施例。
具体实施例方式下面结合附图和实施例对本发明作进一步说明
如图1所示当定时器定时周期到时,首先维护系统时间,系统时间由一个变量来记 录,每次定时时间到,该变量加上本次定时时间。然后查询延时任务链表,该链表是一个单 向链表,链表中元素为需要延时的任务,该链表存储在硬件RAM存储器中。链表的移出操作 是,链表头指针变量指向该链表的下一个任务;链表的插入工作是,从链表头开始,逐个比 较链表中任务执行时刻和当前插入链表的任务执行时刻,直到找到比当前插入链表的任务 执行时刻大的任务,使当前插入链表的任务的next指针变量指向找到的任务,使找到的任 务的前一个任务的next指针变量指向当前插入链表的任务。由于延时任务链表是按照各 个任务需要执行时刻升序排列,所以链表头的延时任务需要执行时刻是所有延时任务中的 最小执行时刻,如果该最小执行时刻小于等于当前系统时间,则说明该任务需要执行,把该 任务移出延时任务链表,添加到相应的就绪任务链表中。一般情况下,最小执行时刻等于当 前系统时间,但当有某个任务执行时关断了系统中断,导致系统在定时器中断时没有及时 执行中断,此时会出现该最小执行时刻小于当前系统时间。直到有延时任务需要执行时刻大于系统当前时间,用延时任务需要执行时间减去 系统时间,算出该延时任务还需要延时多长时间才需要执行,如果该延时时间大于定时器 最大定时周期MaxPeriod (定时器最大定时周期MaxPeriod是硬件定时器设定的最大定时 周期,每个硬件定时器最大定时周期是根据实际硬件定时器性能来设置该定时周期),则将 MaxPeriod设定为下次任务的定时器中断周期;如果延时时间小于MaxPeriod,则将此延时 时间作为下次任务的定时器中断周期,退出定时器中断。每个任务延时时间计算方法是,每个任务的描述块中都有一个变量表示该任务的 需要执行的时刻。当任务需要延时时,把系统当前时间加上任务需要延时时间,得到任务需 要执行的时刻,然后再按照任务需要执行的先后顺序插入到延时任务链表中。下面根据图2和图3说明一下技术方案的具体实施。假设某一时刻,延时任务链表 中有4个任务,A、B、C、D。图2中,延时任务链表中最早需要执行的任务A需要延时30ms, 系统设置当前的定时器值为30ms。30ms后定时器时间到,此时任务A需要执行的时间小于 等于系统当前时间,移出延时任务链表,任务B成为延时任务链表中的第一个任务,任务B 需要执行的时间还需要延时20ms,设置定时器值为20ms。图3中,任务延时时间大于定时 器最大定时时间MaxPeriodl. 6s,设置定时器值为1. 6s,然后等待延时时间到,任务A延时 时间为0. 4s,小于定时器最大延时时间,设置定时器值为0. 4s。
权利要求
一种实时嵌入式操作系统的动态计时方法,其特征是,该方法包括以下步骤Step1当定时器中断时,记录此时的系统时间;Step2操作系统将各个任务需要执行时刻升序排列组成延时任务链表,将链表头的任务需要执行时刻和系统时间进行比较,如果链表头的任务需要执行时刻小于等于系统时间,则将链表头的任务移出,添加到相应的就绪任务链表中;反之则将链表头的任务需要执行时刻减去系统时间,将差值作为链表头的任务延时时间;Step3如果该延时时间大于定时器设定的最大周期,则将该最大周期设定为下次任务的定时器中断周期;如果延时时间小于定时器设定的最大周期,则将此延时时间作为下次任务的定时器中断周期,退出定时器中断;Step4判断延时任务链表是否为空,如为空则退出定时器中断,反之则返回step1继续执行。
2.如权利要求1中所述的一种实时嵌入式操作系统的动态计时方法,其特征是,所述 定时器设定最大周期为硬件定时器设定的最大定时周期。
3.如权利要求1中所述的一种实时嵌入式操作系统的动态计时方法,其特征是,所述 step2中,每个任务的描述块中都有一个变量表示该任务的需要执行的时刻,当任务需要延 时时,系统当前时间加上任务需要延时时间,得到任务需要执行的时刻,然后按照任务需要 执行的先后顺序插入到延时任务链表中。
全文摘要
本发明提供了一种实时嵌入式操作系统中系统时间计时方法,该计时方法包括当定时器定时周期到时,首先维护系统时间,然后再从延时任务链表中移出就绪任务,如果延时任务链表为空,则结束,如果不为空,则用下个任务苏醒时间减去当前系统时间,计算出任务苏醒时间差,如果该时间差大于定时器允许定时周期,定时周期设置为最大定时周期,否则,定时周期设置为该时间差。本发明采用可变定时时间取代现有固定定时时间,以硬件定时器时钟源周期为时间单位取代现有以硬件定时时间为时间单位,减少了系统空闲时维护系统时间的不必要开销,同时提高了系统的响应时间。
文档编号G06F9/46GK101840353SQ20101017212
公开日2010年9月22日 申请日期2010年5月14日 优先权日2010年5月14日
发明者王志华, 陈冬岩 申请人:陈冬岩
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1