无积累误差和自适应定时器实现方法技术

技术编号:3486720 阅读:213 留言:0更新日期:2012-04-11 18:40
一种无积累误差和自适应定时器实现方法,包括获取当前的系统时间值T0并记录,作为执行实例开始的初始时间值,执行次数m清零;获取当前系统时间T1,将其作为本次执行的起始时间;执行任务,执行次数m增加1;用执行周期T10乘以执行次数m,得到理论执行总时间T4;用当前的系统时间值T5,减去初始时间值T0,得到实际的执行总时间T5;用理论执行总时间T4减去实际的执行总时间T5,得到需要休眠的总时间T6;如果休眠总时间大于0,执行休眠,休眠时间结束后唤醒,然后判断是否需要修改执行周期,如果是,则修改执行周期,重启定时器。本发明专利技术可以通过类似积分的方式进行补偿,从而实现消除累积误差的目的,并消除单次的大扰动,且执行周期可动态调节。

【技术实现步骤摘要】

本专利技术涉及一种在计算机中和通信领域实现无积累误差和自适应定时器的实现方法。
技术介绍
定时器是用于控制执行实例定期执行的,例如在TCP通信中,如果一定时间内没有收到 回应,会再次发起连接请求;在软件维护的的MAC (媒质接入层)表中,需要维护表项的老 化时间, 一般是定时执行减1的操作,减至0时就将表项删除。在需要长期进行定时操作的 场合,如协议编程,如果每次的定时存在一定的误差,则经过很多次的执行之后,可能会积 累起很大的时间误差,这些误差将会影响协议正确运转,导致协议出现很隐晦的问题。而在 通信领域,协议非常的多,对于无累积误差的定时需求是很强烈的。定时器的时钟源来源于硬件时钟中断,时钟中断每隔一定时间产生,该时间间隔为最小 计时时长,也就是定时器的计时精度,每个对硬件时钟中断处理称为机器的定时周期。现在定时器的实现多采用对列的形式实现,时钟周期一到,就对定时对列进行减1的操 作,当结果等于0时,就认为定时时间已到,调用执行函数执行任务。对于对列的组织形式 有单对列和多对列之分。这种定时方式对机器要求较高,如果执行函数的执行时间超过定时 的周期,将可能会产生-一些问题;而如果因为对列庞大,单次遍历时间已经超过硬件时钟中 断周期的情况下,整个定时体制的精度都会受到影响。所以应该尽量减少时钟中断处理的时 间,并具有容纳单次执行时间过长的能力。
技术实现思路
本专利技术的目的在于提供一种,以消除定时器中单次 任务执行耗时过长的大扰动和积累误差。为达上述目的,本专利技术采用如下技术方案-一种,包括以下歩骤1) 开始',2) 获取当前的系统时间值TO并记录,作为执行实例开始的初始时间值,执行次数m清 零;3) 获取当前系统时间Tl,将其作为本次执行的起始时间;4) 执行任务,执行次数m增加l;5) 用执行周期T10乘以执行次数m,得到理论执行总时间T4;6) 用当前的系统时间值T5,减去初始时间值TO,得到实际的执行总时间T5;7) 用理论执行总时间T4减去实际的执行总时间T5,得到需要休眠的总时间T6;8) 如果休眠总时间大fO,执行休眠,休眠时间结束后唤醒,然后进入步骤9);否则进 入歩骤9);9) 判断是否需要修改执行周期,如果是,则修改执行周期,重启定时器,返回步骤2);如果否,则返回歩骤3)。作为本专利技术的一种改进,在所述歩骤4)之后,歩骤5)之前还包括以下歩骤获取当前系统时间T2,减去本次执行的起始时间Tl,得到并记录本次任务的执行时间 T3,以用于计算任务执行的平均耗时值和CPU负荷率。作为本专利技术的又一改进,在所述步骤7)之后,步骤8)之前还包括休眠时间补偿步骤 用需要休眠的总时间T6减去估算的定时器本身计算所需的耗时量,对休眠时间进行补偿。其中,在所述方法的任一步骤中,如果收到外部中断或指令,则结束执行。通过本专利技术方法,累积的误差可以通过类似积分的方式进行补偿,从而实现消除累积误 差的目的,并消除单次的大扰动,且执行周期可动态调节。而且只调用系统的休眠机制,不 往系统的定时器对列中加入任何节点,几乎不增加系统定时器的负担。同时任务一直由一个 进程或线程执行,而不由定时器执行,任务之间的交互和同歩都会更加简单。特别适用于通 信协议开发领域中定时累积误差和执行时间变化大、但平均值稳定的场合。以下结合附图及实施例进一歩说明本专利技术。附图说明图1为本专利技术实施例处理流程图。具体实施例方式--种,如图2所示,具体包括以下步骤-1) 开始;2) 获取当前的系统时间值TO并记录,作为执行实例开始的初始时间值,执行次数m清零;3) 获取当前系统时间T1,将其作为本次执行的起始时间;4) 执行任务,执行次数m增加l;5) 用执行周期T10乘以执行次数m,得到理论执行总时间T4;6) 用当前的系统时间值T5,减去初始时间值TO,得到实际的执行总时间T5;7) 用理论执行总时间T4减去实际的执行总时间T5,得到需要休眠的总时间T6; 用需要休眠的总时间T6减去估算的定时器本身计算所需的耗时量,对休眠时间进行补偿。 该耗时量与机器及运行的环境有关,通过对需要休眠的总时间T6进行补偿可以获得更好的精度;8) 如果休眠总时间大于0,则执行休眠,休眠时间结束后唤醒,然后进入步骤9);否则直接进入步骤10);9) 判断是否需要修改执行周期,如果是,则修改执行周期,重启定时器,返回步骤2);如果否,则直接返回歩骤3)。其中,在上述步骤中,如果收到外部中断或指令,则结束执行过程。其中,在所述步骤4)之后,步骤5)之前还包括以下步骤获取当前系统时间T2,减去本次执行的起始时间Tl,得到并记录本次任务的执行时间T3,以用于计算任务执行的平均耗时值和CPU负荷率;艮P,将每个执行周期的执行时间T3 相加再除以总的执行次数就得到了任务执行的平均耗时值,平均耗时值与执行周期的比值就是定时器的CPU负荷率。上述实施例的实现需具备以下两个条件1、具备读取系统时钟的能力,而且读取的精度 应该尽可能的高,因为这将决定最终的定时精度;2、操作系统具备对进程或线程的休眠和唤醒能力,而且控制的精度越高越好,因为其精度也会影响最终的定时精度。以上两个条件在一般的操作系统和硬件平台上都能够提供。权利要求1. 一种,其特征在于包括以下步骤1)开始;2)获取当前的系统时间值T0并记录,作为执行实例开始的初始时间值,执行次数m清零;3)获取当前系统时间T1,将其作为本次执行的起始时间;4)执行任务,执行次数m增加1;5)用执行周期T10乘以执行次数m,得到理论执行总时间T4;6)用当前的系统时间值T5,减去初始时间值T0,得到实际的执行总时间T5;7)用理论执行总时间T4减去实际的执行总时间T5,得到需要休眠的总时间T6;8)如果休眠总时间大于0,执行休眠,休眠时间结束后唤醒,然后进入步骤9);否则进入步骤9);9)判断是否需要修改执行周期,如果是,则修改执行周期,重启定时器,返回步骤2);如果否,则返回步骤3)。2、 根据权利要求l所述的,其特征在于在所述步骤4) 之后,歩骤5)之前还包括以下歩骤获取当前系统时间T2,减去本次执行的起始时间Tl,得到并记录本次任务的执行时间T3, 以用于计算任务执行的平均耗时值和CPU负荷率。3、 根据权利要求1或2所述的,其特征在于在所述步骤7)之后,歩骤8)之前还包括以下一休眠时间补偿步骤用需要休眠的总时间T6减去估算的定时器本身计算所需的耗时量,对休眠时间进行补偿。4、 根据权利要求1或2所述的,其特征在于在所述方 法的任一歩骤中,如果收到外部中断或指令,则结束执行。全文摘要一种,包括获取当前的系统时间值T0并记录,作为执行实例开始的初始时间值,执行次数m清零;获取当前系统时间T1,将其作为本次执行的起始时间;执行任务,执行次数m增加1;用执行周期T10乘以执行次数m,得到理论执行总时间T4;用当前的系统时间值T5,减去初始时间值T0,得到实际的执行总时间T5;用理论执行总时间T4减去实际的执行总时间T5,得到需要休眠的总时间T6;如果休眠总时间大于0,执行休眠,休眠时间结束后唤醒,然后判断是否需要修改执行周期,如果是,则修改执行周期,重启定时器。本专利技术可以通过类似积分的方式进行补偿,从而实现消除累积误差的目的,并消除单本文档来自技高网...

【技术保护点】
一种无积累误差和自适应定时器实现方法,其特征在于包括以下步骤:1)开始;2)获取当前的系统时间值T0并记录,作为执行实例开始的初始时间值,执行次数m清零;3)获取当前系统时间T1,将其作为本次执行的起始时间; 4)执行任务,执行次数m增加1;5)用执行周期T10乘以执行次数m,得到理论执行总时间T4;6)用当前的系统时间值T5,减去初始时间值T0,得到实际的执行总时间T5;7)用理论执行总时间T4减去实际的执行总时间T5, 得到需要休眠的总时间T6;8)如果休眠总时间大于0,执行休眠,休眠时间结束后唤醒,然后进入步骤9);否则进入步骤9);9)判断是否需要修改执行周期,如果是,则修改执行周期,重启定时器,返回步骤2);如果否,则返回步骤3)。

【技术特征摘要】

【专利技术属性】
技术研发人员:晏春平孙刚
申请(专利权)人:上海未来宽带技术及应用工程研究中心有限公司
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1