CN110333938A - 一种提高嵌入式定时器效率的方法 - Google Patents
一种提高嵌入式定时器效率的方法 Download PDFInfo
- Publication number
- CN110333938A CN110333938A CN201910468395.0A CN201910468395A CN110333938A CN 110333938 A CN110333938 A CN 110333938A CN 201910468395 A CN201910468395 A CN 201910468395A CN 110333938 A CN110333938 A CN 110333938A
- Authority
- CN
- China
- Prior art keywords
- timer
- time
- moment
- hardware
- chain table
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000012512 characterization method Methods 0.000 claims description 3
- 241000406668 Loxodonta cyclotis Species 0.000 claims 1
- 230000001934 delay Effects 0.000 claims 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/482—Application
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种提高嵌入式定时器效率的方法,初始化系统定时器的二维链表为空;二维的系统链表一旦非空,就代表系统有运行的定时器,这时就会启动一个硬件的定时器,定时器的时长为最近的将要超时但未超时时刻点T_least与全局的系统定时器时间戳的差值T_least–TS;当硬件定时器超时,则代表T_least事件发生,进行动态更新硬件定时器时长;定时器超时前,停止或者删除未超时的定时器对象;停止,删除已经正在运行的定时器对象,只要把该定时器对象从系统的二维链表中解链即可,接着更新定时器对象的状态机,若是删除操作,则做对象销毁操作。本发明极大提高了定时器效率,降低了系统定时器中断开销,提高了定时器的分辨率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种提高嵌入式定时器效率的方法。
背景技术
定时器在嵌入式或者非嵌入式的计算机程序里都是常用的功能,定时器的时间分辨率的差异取决于具体应用程序的要求,定时器的实时性也同样取决于应用程序的要求。
通常的定时器设计是采用一个硬件的定时器作为基准定时器,当应用程序开启了不同时间长度的定时器,定时器模块会在每次基准定时器超时中断发生时,对每个应用定时器的当前计数进行减1操作,若更新后发现应用定时器超时了(当前计数为0),则调用定时器对应的回调函数来处理超时事件。
可是如果定时器的分辨率比较低,数量多,实时性要求不一样的情况下,对每个定时器采用相同的处理流程,会有明显的缺陷,其一:定时器分辨率低,则硬件定时器的周期性中断就多,每个中断都会有系统开销,可能存在冗余的没有超时事件的定时中断,从而增加了系统的开销;其二:定时器多的情况下,没有区分不同的实时性要求,会导致要么实时性都低,要么实时性都高,无法满足系统程序的设计要求,更不能合理分配处理器的计算力资源。
发明内容
针对上述的问题,本发明提出了一种改进的方法,该方法能够解决现实系统定时器应用的困扰,能明显提高定时器的有效中断次数,还能合理划分定时器的实时性要求并优先分配CPU资源给高实时性的定时器对象,最后还提高定时器链表的检索效率。
一种提高嵌入式定时器效率的方法,所述方法主要由一个定时器任务,一个硬件定时器,一个全局的系统定时器时间戳TS和一个系统定时器的二维链表资源组成,具体的步骤为:
步骤1,初始化系统定时器的二维链表为空,全局TS时刻值为0;
步骤2,二维的系统链表一旦非空,就代表系统有启动的定时器对象,这时就会启动一个硬件的定时器,定时器的时长为最近的将要超时但未超时时刻点T_least与全局的系统定时器时间戳的差值T_least–TS,使用硬件定时器超时中断事件来通知超时的定时器对象;
步骤3,当硬件定时器超时,则代表T_least事件发生,首先更新TS =T_least,如果系统还有最近时刻发生的定时器事件T_least更新为下个时刻值,接着动态更新硬件定时器时长,时长为当前时间戳与下个将要发生但未发生的时刻的差值T_least-TS;
步骤4,定时器超时前,停止或者删除未超时的定时器对象;
步骤5,停止,删除已经正在运行的定时器对象,只要把该定时器对象从系统的二维链表中解链即可,接着更新定时器对象的状态机,若是删除操作,则做对象销毁操作。
进一步地,所述步骤1中,具体的初始化操作为,全局的系统定时器时间戳为0,该二维链表的第一维的每个元素表征系统里的一个唯一的时刻点有定时器对象超时事件发生,第二维是同个时刻超时的所有定时器对象链表,它挂在第一维表的某个元素下;当系统定时器对象启动时,按照系统二维链表的结构,逐个插入;第一维是按时刻值排序,时刻点最近的排在链表头。
进一步地,所述步骤3中,具体地,首先将T_least节点从链表里解链,接着处理T_least节点指向的所有定时器对象的事务,如果该定时器对象的实时性要求高,则在中断函数里就调用定时器对象的回调函数,反之,则把该定时器对象提交到定时器任务的事件队列里,延后处理,最后更新TS 为T_least,启动下个硬件定时器,硬件定时器时长为T_least-TS,注意这时的T_least的值已经更新为从系统定时器二维链表的第一维的第一个节点的时刻值。
进一步地,所述步骤4中,具体地,系统定时器运行过程中,最近的超时事件未发生时,启动新的定时器对象时,需要先计算超时时刻,T_new =当前时刻+定时器时长,所述当前时刻=TS +硬件定时器已经消逝的时间,然后判断T_new是否小于最近将要超时的时刻值T_least,如果是,则需要把该定时器对象插入到系统的二维链表中,并重启当前的硬件定时器的时长为T_least - T_new;如果不是则无需更新硬件定时器,则直接把定时器对象插入到系统的二维链表中。
进一步地,所述步骤4中,若系统定时器里不存在T_new时刻值的节点,则需新创建时刻节点按序插入到二维链表,接着指向定时器对象。
本发明的有益效果:极大提高了定时器效率,降低了系统定时器中断开销,提高了定时器的分辨率。
具体实施方式
下面对本发明的技术方案做进一步的详细说明。
一种提高嵌入式定时器效率的方法,所述方法主要由一个定时器任务,一个硬件定时器,一个全局的系统定时器时间戳TS和一个系统定时器的二维链表资源组成,具体的步骤为:
步骤1,初始化系统定时器的二维链表为空,全局TS时刻值为0。
步骤2,二维的系统链表一旦非空,就代表系统有启动的定时器对象,这时就会启动一个硬件的定时器,定时器的时长为最近的将要超时但未超时时刻点T_least与全局的系统定时器时间戳的差值T_least–TS,使用硬件定时器超时中断事件来通知超时的定时器对象。
步骤3,当硬件定时器超时,则代表T_least事件发生,首先更新TS =T_least,如果系统还有最近时刻发生的定时器事件T_least更新为下个时刻值,接着动态更新硬件定时器时长,时长为当前时间戳与下个将要发生但未发生的时刻的差值T_least-TS。
步骤4,定时器超时前,停止或者删除未超时的定时器对象。
步骤5,停止,删除已经正在运行的定时器对象,只要把该定时器对象从系统的二维链表中解链即可,接着更新定时器对象的状态机,若是删除操作,则做对象销毁操作。
所述步骤1中,具体的初始化操作为,全局的系统定时器时间戳为0,该二维链表的第一维的每个元素表征系统里的一个唯一的时刻点有定时器对象超时事件发生,第二维是同个时刻超时的所有定时器对象链表,它挂在第一维表的某个元素下;当系统定时器对象启动时,按照系统二维链表的结构,逐个插入;第一维是按时刻值排序,时刻点最近的排在链表头。
所述步骤3中,具体地,首先将T_least节点从链表里解链,接着处理T_least节点指向的所有定时器对象的事务,如果该定时器对象的实时性要求高,则在中断函数里就调用定时器对象的回调函数,反之,则把该定时器对象提交到定时器任务的事件队列里,延后处理,最后更新TS 为T_least,启动下个硬件定时器,硬件定时器时长为T_least-TS,注意这时的T_least的值已经更新为从系统定时器二维链表的第一维的第一个节点的时刻值。
所述步骤4中,具体地,系统定时器运行过程中,最近的超时事件未发生时,启动新的定时器对象时,需要先计算超时时刻,T_new =当前时刻+定时器时长,所述当前时刻=TS+硬件定时器已经消逝的时间,然后判断T_new是否小于最近将要超时的时刻值T_least,如果是,则需要把该定时器对象插入到系统的二维链表中,并重启当前的硬件定时器的时长为T_least - T_new;如果不是则无需更新硬件定时器,则直接把定时器对象插入到系统的二维链表中。
所述步骤4中,若系统定时器里不存在T_new时刻值的节点,则需新创建时刻节点按序插入到二维链表,接着指向定时器对象。
以上所述仅为本发明的较佳实施方式,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。
Claims (5)
1.一种提高嵌入式定时器效率的方法,其特征在于:
所述方法主要由一个定时器任务,一个硬件定时器,一个全局的系统定时器时间戳TS和一个系统定时器的二维链表资源组成,具体的步骤为:
步骤1,初始化系统定时器的二维链表为空,全局TS时刻值为0;
步骤2,二维的系统链表一旦非空,就代表系统有启动的定时器对象,这时就会启动一个硬件的定时器,定时器的时长为最近的将要超时但未超时时刻点T_least与全局的系统定时器时间戳的差值T_least–TS,使用硬件定时器超时中断事件来通知超时的定时器对象;
步骤3,当硬件定时器超时,则代表T_least事件发生,首先更新TS =T_least,如果系统还有最近时刻发生的定时器事件T_least更新为下个时刻值,接着动态更新硬件定时器时长,时长为当前时间戳与下个将要发生但未发生的时刻的差值T_least-TS;
步骤4,定时器超时前,停止或者删除未超时的定时器对象;
步骤5,停止,删除已经正在运行的定时器对象,只要把该定时器对象从系统的二维链表中解链即可,接着更新定时器对象的状态机,若是删除操作,则做对象销毁操作。
2.根据权利要求1所述的一种提高嵌入式定时器效率的方法,其特征在于:所述步骤1中,具体的初始化操作为,全局的系统定时器时间戳为0,该二维链表的第一维的每个元素表征系统里的一个唯一的时刻点有定时器对象超时事件发生,第二维是同个时刻超时的所有定时器对象链表,它挂在第一维表的某个元素下;当系统定时器对象启动时,按照系统二维链表的结构,逐个插入;第一维是按时刻值排序,时刻点最近的排在链表头。
3.根据权利要求1所述的一种提高嵌入式定时器效率的方法,其特征在于:所述步骤3中,具体地,首先将T_least节点从链表里解链,接着处理T_least节点指向的所有定时器对象的事务,如果该定时器对象的实时性要求高,则在中断函数里就调用定时器对象的回调函数,反之,则把该定时器对象提交到定时器任务的事件队列里,延后处理,最后更新TS 为T_least,启动下个硬件定时器,硬件定时器时长为T_least-TS,注意这时的T_least的值已经更新为从系统定时器二维链表的第一维的第一个节点的时刻值。
4.根据权利要求1所述的一种提高嵌入式定时器效率的方法,其特征在于:所述步骤4中,具体地,系统定时器运行过程中,最近的超时事件未发生时,启动新的定时器对象时,需要先计算超时时刻,T_new =当前时刻+定时器时长,所述当前时刻=TS +硬件定时器已经消逝的时间,然后判断T_new是否小于最近将要超时的时刻值T_least,如果是,则需要把该定时器对象插入到系统的二维链表中,并重启当前的硬件定时器的时长为T_least - T_new;如果不是则无需更新硬件定时器,则直接把定时器对象插入到系统的二维链表中。
5.根据权利要求4所述的一种提高嵌入式定时器效率的方法,其特征在于:所述步骤4中,若系统定时器里不存在T_new时刻值的节点,则需新创建时刻节点按序插入到二维链表,接着指向定时器对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910468395.0A CN110333938A (zh) | 2019-05-31 | 2019-05-31 | 一种提高嵌入式定时器效率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910468395.0A CN110333938A (zh) | 2019-05-31 | 2019-05-31 | 一种提高嵌入式定时器效率的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110333938A true CN110333938A (zh) | 2019-10-15 |
Family
ID=68140503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910468395.0A Pending CN110333938A (zh) | 2019-05-31 | 2019-05-31 | 一种提高嵌入式定时器效率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110333938A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840353A (zh) * | 2010-05-14 | 2010-09-22 | 陈冬岩 | 一种实时嵌入式操作系统的动态计时方法 |
CN101859260A (zh) * | 2010-05-14 | 2010-10-13 | 中国科学院计算技术研究所 | 用于操作系统中的定时器管理装置和管理方法 |
CN102270156A (zh) * | 2011-05-30 | 2011-12-07 | 北京华源格林科技有限公司 | 一种实时嵌入式系统定时器管理方法 |
CN102937893A (zh) * | 2012-10-11 | 2013-02-20 | 科立讯通信股份有限公司 | 一种动态重载定时长度的软件定时方法 |
CN103455402A (zh) * | 2013-08-16 | 2013-12-18 | 厦门雅迅网络股份有限公司 | 一种无累计误差的定时器控制方法 |
CN104834347A (zh) * | 2015-04-29 | 2015-08-12 | 杭州东信捷峻科技有限公司 | 有利于低功耗的无累计误差的动态时长定时器实现方法 |
CN104866325A (zh) * | 2015-06-20 | 2015-08-26 | 成都彬鸿科技有限公司 | 一种硬件定时器的管理方法 |
WO2016082523A1 (zh) * | 2014-11-28 | 2016-06-02 | 华为技术有限公司 | 故障处理装置及方法 |
-
2019
- 2019-05-31 CN CN201910468395.0A patent/CN110333938A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840353A (zh) * | 2010-05-14 | 2010-09-22 | 陈冬岩 | 一种实时嵌入式操作系统的动态计时方法 |
CN101859260A (zh) * | 2010-05-14 | 2010-10-13 | 中国科学院计算技术研究所 | 用于操作系统中的定时器管理装置和管理方法 |
CN102270156A (zh) * | 2011-05-30 | 2011-12-07 | 北京华源格林科技有限公司 | 一种实时嵌入式系统定时器管理方法 |
CN102937893A (zh) * | 2012-10-11 | 2013-02-20 | 科立讯通信股份有限公司 | 一种动态重载定时长度的软件定时方法 |
CN103455402A (zh) * | 2013-08-16 | 2013-12-18 | 厦门雅迅网络股份有限公司 | 一种无累计误差的定时器控制方法 |
WO2016082523A1 (zh) * | 2014-11-28 | 2016-06-02 | 华为技术有限公司 | 故障处理装置及方法 |
CN104834347A (zh) * | 2015-04-29 | 2015-08-12 | 杭州东信捷峻科技有限公司 | 有利于低功耗的无累计误差的动态时长定时器实现方法 |
CN104866325A (zh) * | 2015-06-20 | 2015-08-26 | 成都彬鸿科技有限公司 | 一种硬件定时器的管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11327945B2 (en) | Method and device for storing high-concurrency data | |
CN103870340B (zh) | 流计算系统中的数据处理方法、控制节点及流计算系统 | |
CN104734989B (zh) | 基于令牌桶的数据传输流量调度方法及其系统 | |
CN107506234B (zh) | 一种虚拟机调度方法及装置 | |
WO2013122755A3 (en) | Method and apparatus for rapid disaster recovery preparation in a cloud network | |
CN105516024B (zh) | 一种基于队列的任务流量监控方法及系统 | |
WO2020233054A1 (zh) | 基于区块链的区块生成方法、装置、设备及存储介质 | |
CN105515837B (zh) | 一种基于事件驱动的高并发web流量产生器 | |
CN103428108B (zh) | 数据帧处理方法和装置 | |
CN102270156A (zh) | 一种实时嵌入式系统定时器管理方法 | |
CN105897365A (zh) | 一种处理器的防冲击处理方法及装置 | |
CN110333938A (zh) | 一种提高嵌入式定时器效率的方法 | |
CN106445659A (zh) | 一种空间飞行器周期性混成随机任务调度方法 | |
CN111198595A (zh) | 一种基于dpdk的时间同步方法 | |
WO2017000448A1 (zh) | 交换机mac地址同步方法以及系统 | |
CN107402826B (zh) | 一种以异步方式进行远程过程调用的方法及装置 | |
CN103207775A (zh) | 采用gpu加速进行实时网络流应用程序的处理方法 | |
CN112231078A (zh) | 一种自动化营销系统分布式任务调度的实现方法 | |
US20150160968A1 (en) | Freezing a call stack | |
CN105591790A (zh) | 数据通信连接池管理装置 | |
CN113918339A (zh) | 一种在分布式集群中频繁修改延迟时间的解决方案 | |
CN103645952B (zh) | 一种基于MapReduce的非精确任务并行处理方法 | |
CN102710356A (zh) | 一种实时冗余主站数据同步方法 | |
Du et al. | Worst case response time analysis for can messages with offsets | |
WO2016206403A1 (zh) | 虚拟机部署方法、装置及网络功能虚拟化编排nfvo |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191015 |