CN113504979B - 定时器实现方法、装置、实时操作系统及存储介质 - Google Patents
定时器实现方法、装置、实时操作系统及存储介质 Download PDFInfo
- Publication number
- CN113504979B CN113504979B CN202110804078.9A CN202110804078A CN113504979B CN 113504979 B CN113504979 B CN 113504979B CN 202110804078 A CN202110804078 A CN 202110804078A CN 113504979 B CN113504979 B CN 113504979B
- Authority
- CN
- China
- Prior art keywords
- timer
- time
- head assembly
- absolute time
- assembly
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 77
- 230000001174 ascending effect Effects 0.000 claims abstract description 13
- 238000004590 computer program Methods 0.000 claims description 6
- 230000006870 function Effects 0.000 description 48
- 238000010586 diagram Methods 0.000 description 13
- 230000000712 assembly Effects 0.000 description 5
- 238000000429 assembly Methods 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 3
- 230000000737 periodic effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 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
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供的一种定时器实现方法、装置、实时操作系统及存储介质,获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件;执行所述头组件对应的定时事件。
Description
技术领域
本申请涉及实时操作系统技术领域,特别地涉及一种定时器实现方法、装置、实时操作系统及存储介质。
背景技术
微控制单元(MCU,Microcontroller Unit)软件定时器是软件开发人员经常使用的开发功能,用于周期性的处理某些软件业务逻辑。但基于MCU的部分实时操作系统(RTOS)却不一定会提供软件定时功能;MCU软件开发通常会开发一套基于RTOS软件封装层,实现软件业务逻辑功能,其中,就包含软件定时器功能;此时,如果RTOS并没有提供软件定时器的软件接口,那么,封装层则无法利用RTOS本身的定时器接口实现对软件定时器功能的封装,不能实现定时的目的。
发明内容
针对定时器软件不能在任意RTOS适配的问题,本申请提供一种定时器实现方法、装置、实时操作系统及存储介质,通过设定各个定时器组件包括绝对时间,且各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,使得实时操作系统确定系统的当前绝对时间达到所述头组件的绝对时间的情况下,可以从所述定时器链条中申请所述头组件,以执行所述头组件对应的定时事件,对于没有软件接口的实时操作系统,通过申请,使得没有软件接口的实时操作系统也能适用,使得软件定时器能够在任何RTOS中适配。
本申请提供了一种定时器实现方法,应用于实时操作系统,包括:
获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;
在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件;
执行所述头组件对应的定时事件。
在一些实施例中,所述方法还包括:
在所述系统的当前绝对时间未达到所述头组件的绝对时间的情况下,基于所述头组件的绝对时间和所述当前绝对时间确定时间差;
将所述时间差确定为内核线程同步的等待时间;
在达到所述等待时间的情况下,从所述定时器链条中申请所述头组件;
执行所述头组件的定时事件。
在一些实施例中,所述定时器组件还包括:定时器句柄函数,所述执行所述头组件对应的定时事件,包括:
对所述头组件进行解析,以获取所述头组件对应的定时器句柄函数;
执行所述定时器句柄函数,以执行头组件对应的定时事件。
在一些实施例中,所述方法还包括:
配置组件管理池,所述组件管理池用于管理在组件管理池中的定时器组件的数量恒定,所述定时器链条位于所述组件管理池中。
在一些实施例中,所述方法还包括:
基于所述头组件的绝对时间和所述当前绝对时间,确定下一次执行所述头组件的定时器句柄函数的目标时间;
基于所述目标时间在所述组件管理池中更新所述头组件得到目标定时器组件;
基于所述目标时间,将所述目标定时器组件插入至定时器链条中,以更新所述定时器链条。
在一些实施例中,各个定时器组件的绝对时间大于对应的定时器句柄函数的执行时间。
在一些实施例中,所述方法还包括:
获取各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息;
基于各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息生成各个定时器组件;
基于各个定时器组件的绝对时间,确定所述定时器链条。
本申请实施例提供一种定时器实现装置,应用于实时操作系统,包括:
获取模块,用于获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;
申请模块,用于在系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件;
执行模块,用于执行所述头组件对应的定时事件。
本申请实施例提供一种设备,包括存储器和处理器,所述存储器上存储有计算机程序,该计算机程序被所述处理器执行时,执行上述任意一项所述定时器实现方法。
本申请实施例提供一种存储介质,该存储介质存储的计算机程序,能够被一个或多个处理器执行,能够用来实现上述任一项所述定时器实现方法。
本申请提供的一种定时器实现方法、装置、实时操作系统及存储介质,通过设定各个定时器组件包括绝对时间,且各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,使得实时操作系统确定系统的当前绝对时间达到所述头组件的绝对时间的情况下,可以从所述定时器链条中申请所述头组件,以执行所述头组件对应的定时事件,对于没有软件接口的实时操作系统,通过申请,使得没有软件接口的实时操作系统也能适用,使得软件定时器能够在任何RTOS中适配。
附图说明
在下文中将基于实施例并参考附图来对本申请进行更详细的描述。
图1为本申请实施例提供的一种定时器实现方法的实现流程示意图;
图2为本申请实施例提供的一种定时器组件的结构示意图;
图3为本申请实施例提供的一种定时器链条的结构示意图;
图4为本申请实施例提供的一种定时器实现方法;
图5为本申请实施例提供的一种定时器实现方法的实现流程示意图;
图6为本申请实施例提供的一种组件管理池的结构示意图;
图7为本申请实施例提供的一种定时器实现方法的实现流程示意图;
图8为本申请实施例提供的更新后的定时器链条的结构示意图;
图9为本申请实施例提供的一种定时器实现装置的结构示意图。
在附图中,相同的部件使用相同的附图标记,附图并未按照实际的比例绘制。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
如果申请文件中出现“第一\第二\第三”的类似描述则增加以下的说明,在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
基于相关技术中存在的问题,本申请实施例提供一种定时器实现方法,所述方法应用于实时操作系统。本申请实施例提供的定时器实现方法所实现的功能可以通过电子设备的处理器调用程序代码来实现,其中,程序代码可以保存在计算机存储介质中。
本申请实施例提供一种定时器实现方法,图1为本申请实施例提供的一种定时器实现方法的实现流程示意图,如图1所示,包括:
步骤S101,获取定时器链条中头组件的绝对时间。
本申请实施例中,实时操作系统可以基于进程间通信,获取定时器链条中头组件的绝对时间,还可以是实时操作系统向定时器链条发送消息,以获取定时器链条中头组件的绝对时间。所述定时器链条包括至少一个定时器组件。例如,包括n个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件。本申请实施例提供的定时器链条,可以单独地整合在RTOS的内核中,作为内核的一部分,也可以基于内核功能进行封装。
在一些实施例中,图2为本申请实施例提供的一种定时器组件的结构示意图,如图2所示,所述定时器组件可以包括:绝对时间、定时器句柄函数、句柄参数以及定时器私有信息等,绝对时间记录的是整个软件系统从MCU开机运行到某个时刻的时间,通常是RTOS系统内核时钟基的整数倍;定时器句柄函数(Timer-Handler)指的是,当系统运行至定时器组件所设定的绝对时间时,该句柄函数会被触发;句柄的具体实现为软件的要求定时器需定时处理的业务逻辑。句柄参数,则是处理业务逻辑时所必要的参数,该参数也可以为空,用以表示业务逻辑无需句柄参数的参与;定时器私有信息用以描述该组件的详尽信息,如定时器名称以及附带调试信息等。
示例性地,在定时器链条中,以定时器组件有n个为例,图3为本申请实施例提供的一种定时器链条的结构示意图,如图3所示,包括:定时器组件0、定时器组件1...定时器组件n,以定时器组件0的绝对时间小于定时器组件1的绝对时间,依次类推,定时器组件n-1的绝对时间小于定时器组件n的绝对时间。定时器链条依次包括:定时器组件0、定时器组件1...定时器组件n。本申请实施例中,所述头组件为所述定时器链条中的第一个定时器组件,承接上面的示例,所述头组件为定时器组件0。
步骤S102,在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件。
本申请实施例中,从所述定时器链条中申请头组件可以采用内核的线程同步方式的申请头组件,所述内核的线程同步可以包括:内核互斥量、信号量、消息、邮箱等,还可以通过线程通信从从所述定时器链条中申请头组件。
步骤S103,执行所述头组件对应的定时事件。
本申请实施例中,执行所述头组件对应的定时事件可以通过以下方式实现:对所述头组件进行解析,以获取所述头组件对应的定时器句柄函数;执行所述定时器句柄函数,以执行头组件对应的定时事件。
本申请提供的一种定时器实现方法、装置、设备及存储介质,通过设定各个定时器组件包括绝对时间,且各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,使得实时操作系统确定系统的当前绝对时间达到所述头组件的绝对时间的情况下,可以从所述定时器链条中申请所述头组件,以执行所述头组件对应的定时事件,对于没有软件接口的实时操作系统,通过申请,使得没有软件接口的实时操作系统也能适用,使得软件定时器能够在任何RTOS中适配。
基于前述的各个实施例,本申请实施例再提供一种定时器实现方法,图4为本申请实施例提供的一种定时器实现方法,所述方法包括:
步骤S401,获取定时器链条中头组件的绝对时间。
本申请实施例中,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件。
步骤S402,判断实时操作系统的当前绝对时间是否达到所述头组件的绝对时间。
本申请实施例中,当所述实时操作系统的当前绝对时间达到所述头组件的绝对时间的情下,执行步骤S406,在所述系统的当前绝对时间未达到所述头组件的绝对时间的情况下,执行步骤S403。
步骤S403,基于所述头组件的绝对时间和所述当前绝对时间确定时间差。
示例性地,头组件的绝对时间为250ms,当实时操作系统的绝对时间运行至10ms时,这时间差为240ms。
步骤S404,将所述时间差确定为内核线程同步的等待时间。
本申请实施例中,将时间差确定为内核线程同步的等待时间后,内心线程进行等待。
步骤S405,判断是否达到等待时间。
承接上面的示例,判断等待时间是否达到240ms,如果达到240ms执行步骤S206,如果没有达到240ms,则继续等到。
本申请实施例中,当达到等待时间的情况下,执行步骤S406。
步骤S406,从所述定时器链条中申请所述头组件。
本申请实施例中,所述定时器组件还包括:定时器句柄函数,本申请实施例中,对所述头组件进行解析,可以获取所述头组件对应的定时器句柄函数。
步骤S407,执行所述头组件对应的定时事件。
本申请实施例中,可以执行头组件对应的定时器句柄函数,从而执行所述头组件对应的定时事件。
本申请提供的一种定时器实现方法,通过设定各个定时器组件包括绝对时间,且各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,使得实时操作系统确定系统的当前绝对时间达到所述头组件的绝对时间的情况下,可以从所述定时器链条中申请所述头组件,以执行所述头组件对应的定时事件,对于没有软件接口的实时操作系统,通过申请,使得没有软件接口的实时操作系统也能适用,使得软件定时器能够在任何RTOS中适配。
在一些实施例中,在“获取定时器链条中头组件的绝对时间”之前,所述方法还包括:
步骤S1,配置组件管理池,所述组件管理池用于管理在组件管理池中的定时器组件的数量恒定,所述定时器链条位于所述组件管理池中。
本申请实施例中,组件管理池可以设置在实时操作系统的内存资源中,组件管理池的大小可以基于定时器组件的数量决定,例如,组件管理池占用8KB内存资源。
本申请实施例中,在步骤S1之后,且在获取定时器链条中头组件的绝对时间之前,所述方法还包括:
步骤S2,获取各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息。
本申请实施例中,绝对时间记录的是整个软件系统从MCU开机运行到某个时刻的时间,通常是RTOS系统内核时钟基的整数倍;定时器句柄函数(Timer-Handler)指的是,当系统运行至定时器组件所设定的绝对时间时,该句柄函数会被触发;句柄的具体实现为软件的要求定时器需定时处理的业务逻辑。句柄参数,则是处理业务逻辑时所必要的参数,该参数也可以为空,用以表示业务逻辑无需句柄参数的参与;定时器私有信息用以描述该组件的详尽信息,如定时器名称以及附带调试信息等。
步骤S3,基于各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息生成各个定时器组件。
本申请实施例中,各个定时器组件在所述组件管理池中生成。
步骤S4,基于各个定时器组件的绝对时间,确定所述定时器链条。
本申请实施例中,可以基于各个定时器组件的绝对时间,确定定时器链条,所述定时器链条在所述组件管理池中。
以定时器组件为n+1个为例,包括:定时器组件0、定时器组件1...定时器组件n,以定时器组件0的绝对时间小于定时器组件1的绝对时间,依次类推,定时器组件n-1的绝对时间小于定时器组件n的绝对时间。定时器链条依次包括:定时器组件0、定时器组件1...定时器组件n。本申请实施例中,所述头组件为所述定时器链条中的第一个定时器组件,承接上面的示例,所述头组件为定时器组件0。
基于前述的各个实施例,本申请实施例本申请提供的一种定时器实现方法,图5为本申请实施例提供的一种定时器实现方法的实现流程示意图,如图5所示,所述方法包括:
步骤S501,获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;
步骤S502,在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件;
步骤S503,执行所述头组件对应的定时事件。
步骤S504,基于所述头组件的绝对时间和所述当前绝对时间,确定下一次执行所述头组件的定时器句柄函数的目标时间。
示例性地,头组件的绝对时间为250ms,实时操作系统的当前绝对时间为250ms,那么可以确定下一次执行所述投足间的定时器句柄函数的目标时间为500ms。
步骤S505,基于所述目标时间在所述组件管理池中更新所述头组件得到目标定时器组件。
承接上面的示例,将头组件的250ms更新为500ms,得到目标定时器组件。
步骤S506,基于所述目标时间,将所述目标定时器组件插入至定时器链条中,以更新所述定时器链条。
本申请实施例中,可以比较目标时间和其他定时器组件的绝对时间。
示例性地,在未更新的定时器链条中,定时器组件(0...n)的初始设定时间为250ms,280ms,350ms,600ms,...,1000ms,1500ms,而目标定时器组件的时间为500ms,因此,将目标定时器组件插入至定时器组件之后。以此同时,定时器组件1被移位至头部,变为头组件;当系统绝对时间至500ms时,目标定时器组件的句柄函数又被执行,从而实现周期性地执行定时功能。
本申请实施例提供的定时器实现方法,通过基于头组件的绝对时间和当前绝对时间,来确定下一次执行头组件的定时器句柄函数的目标时间,然后基于目标时间生成目标定时器组件,然后基于目标时间,更新更新定时器链条,实现周期性地执行定时功能。
基于前述的各个实施例,本申请实施例提供一种定时器实现方法,在介绍本申请实施例提供的一种定时器实现方法之前,对本申请中的定时器组件、及定时器链条进行介绍。
本申请实施例中,定时器组件由绝对时间、定时器句柄、句柄参数以及定时器私有信息四个关键模块构成;绝对时间记录的是整个软件系统从MCU开机运行到某个时刻的时间,通常是RTOS系统内核时钟基的整数倍;定时器句柄(Timer-Handler)指的是,当系统运行至定时器组件所设定的绝对时间时,该句柄会被触发;句柄的具体实现为软件的要求定时器需定时处理的业务逻辑。句柄参数,则是处理业务逻辑时所必要的参数(当然,该参数也可以为空,用以表示业务逻辑无需句柄参数的参与);定时器私有信息用以描述该组件的详尽信息,如,定时器名称以及附带调试信息等,这里不做任何限制。
软件系统会配置并开辟一个组件管理池,用于管理定时器组件的数量。图6为本申请实施例提供的一种组件管理池的结构示意图,如图6所示,这个是有必要的,原因在于定时器组件本身需要结合软件系统、硬件系统资源等因素来配置。其个数根据系统使用的具体定时器组件的个数而定。组件管理池用以决定:当系统需要某个定时器组件时,从该管理池中分配一个定时器组件资源,而当定时器组件使用完毕后,该组件管理池回收该组件资源,以备后续使用;从而,在定时器组件数量上保持恒定。
系统中所有的定时器组件按照组件定时器绝对时间由小到大的方式进行链式排列,即,绝对时间(定时器0)<=绝对时间(定时器1)<=绝对时间(定时器2)...<=绝对时间(定时器n)。
本申请实施例提供的定时器实现方法,图7为本申请实施例提供的一种定时器实现方法的实现流程示意图,所述方法包括:
步骤S701,比较定时器链条头组件设定的绝对时间与当前绝对时间。
实时操作系统系统时刻比较当前绝对时间与定时器时间链条中头组件设定的绝对时间。
本申请实施例中,当绝对时间大于当前绝对时间,执行步骤S702,当绝对时间大于当前绝对时间执行步骤S704。
步骤S702,计算时间差。
步骤S703,内核线程同步等待超时发出。
并将该时间差作为RTOS内核线程同步(这里的线程同步技术不做任何限制,可以是内核互斥量、信号量、消息、邮箱等)等待的时间参数来等待同步超时的发生(由于系统内核线程间的超时等待是基于系统时钟基原理进行实现。
步骤S704,取出定时器链条中的头组件。
步骤S705,执行头组件所述对应的定时句柄。
本申请实施例中,通过取出头组件解析出其定时器句柄函数,并连同该头组件的句柄参数,执行该定时器句柄函数。
步骤S706,计算头组件下次触发的绝对时间,并更新定时器链条。
举个例子,继续参见图3,如图3所示,系统中定时器组件(0...n)的设定的绝对时间依次为250ms、280ms、350ms、600ms、...,、1000ms、1500ms。当系统的当前绝对时间运行至10ms时,系统开始比较定时器链条头组件设定的绝对时间与当前绝对时间,发现当前绝对时间小于设定的绝对时间,且相差250-10=240ms,那么,系统采用内核线程同步技术等待240ms直至超时发生,之后,立即解析时间链条中头组件定时器句柄函数及句柄参数,执行该定时器句柄函数。这里句柄函数通常是一些业务逻辑,需要确保的是该业务逻辑的执行时间一定要小于定时器定时触发的时间,如上述提到的250ms,280ms等。如果该业务逻辑执行完成后,头组件下一次被触发的时间(即目标时间)为250+250=500ms,因此,对定时器链条进行更新,最终结果如图8所示,图8为本申请实施例提供的更新后的定时器链条的结构示意图,如图8所示,之前定时器链条中的头组件被移位至定时器组件2之后变为定时器组件0’(目标定时器组件)。以此同时,定时器组件1被移位至头部,变为头组件;当系统绝对时间至500ms时,定时器组件0’的句柄又被执行,这样往复,就达到了软件定时器的功能--即,周期性的执行定时功能。
定时器链条更新过程涉及到组件管理池的管理。以上述例子为例:系统会率先释放定时器组件0到组件管理池中,之后,再从组件管理池中分配一个新的定时器组件0’。组件管理池按照先释放后申请的原则,确保软件系统中定时器组件数量恒定可用,因此,管理池够有效避免系统频繁分配、回收定时器组件带来内存碎片化问题,有利于系统性能的提升。
本申请实施例提供的定时器实现方法,RTOS内核中是否存在专门的软件定时器功能无关。因此,本提案提及到发明,可以适用于所有RTOS内核,达到软件定时的目的。
基于前述的实施例,本申请实施例提供一种定时器实现装置,该装置包括的各模块、以及各模块包括的各单元,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU,Central ProcessingUnit)、微处理器(MPU,Microprocessor Unit)、数字信号处理器(DSP,Digital SignalProcessing)或现场可编程门阵列(FPGA,Field Programmable Gate Array)等。
本申请实施例提供一种定时器实现装置,图9为本申请实施例提供的一种定时器实现装置的结构示意图,如图9所示,定时器实现装置900包括:
第一获取模块901,用于获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;
第一申请模块902,用于在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件;
执行模块903,用于执行所述头组件对应的定时事件。
在一些实施例中,所述定时器实现装置900还包括:
第一确定模块,用于在所述系统的当前绝对时间未达到所述头组件的绝对时间的情况下,基于所述头组件的绝对时间和所述当前绝对时间确定时间差;
第二确定模块,用于将所述时间差确定为内核线程同步的等待时间;
第二申请模块,用于在达到所述等待时间的情况下,从所述定时器链条中申请所述头组件;
执行模块,用于执行所述头组件对应的定时事件。
在一些实施例中,所述定时器组件还包括:定时器句柄函数,所述执行模块,包括:
解析单元,用于对所述头组件进行解析,以获取所述头组件对应的定时器句柄函数;
执行单元,用于执行所述定时器句柄函数,以执行头组件对应的定时事件。
在一些实施例中,所述定时器实现装置900还包括:
配置模块,用于配置组件管理池,所述组件管理池用于管理在组件管理池中的定时器组件的数量恒定,所述定时器链条位于所述组件管理池中。
在一些实施例中,所述定时器实现装置900还包括:
第三确定模块,用于基于所述头组件的绝对时间和所述当前绝对时间,确定下一次执行所述头组件的定时器句柄函数的目标时间;
第一更新模块,用于基于所述目标时间在所述组件管理池中更新所述头组件得到目标定时器组件;
第二更新模块,用于基于所述目标时间,将所述目标定时器组件插入至定时器链条中,以更新所述定时器链条。
在一些实施例中,各个定时器组件的绝对时间大于对应的定时器句柄函数的执行时间。
在一些实施例中,所述定时器实现装置900还包括:
第二获取模块,用于获取各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息;
生成模块,用于基于各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息生成各个定时器组件;
第三确定模块,用于基于各个定时器组件的绝对时间,确定所述定时器链条。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的定时器实现方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
相应地,本申请实施例提供一种存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述实施例中提供的定时器实现方法中的步骤。
本申请实施例提供一种实时操作系统,包括上述任一实施例提供的一种定时器实现装置。
以上实时操作系统和存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请计算机设备和存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台控制器执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种定时器实现方法,其特征在于,应用于实时操作系统,所述方法包括:
获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;
在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件,执行所述头组件对应的定时事件;
在所述实时操作系统的当前绝对时间未达到所述头组件的绝对时间的情况下,基于所述头组件的绝对时间和所述当前绝对时间确定时间差;将所述时间差确定为内核线程同步的等待时间;在达到所述等待时间的情况下,从所述定时器链条中申请所述头组件,执行所述头组件对应的定时事件;
所述定时器组件还包括:定时器句柄函数,所述执行所述头组件对应的定时事件,包括:
对所述头组件进行解析,以获取所述头组件对应的定时器句柄函数;
执行所述定时器句柄函数,以执行头组件对应的定时事件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
配置组件管理池,所述组件管理池用于管理在组件管理池中的定时器组件的数量恒定,所述定时器链条位于所述组件管理池中。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
基于所述头组件的绝对时间和所述当前绝对时间,确定下一次执行所述头组件的定时器句柄函数的目标时间;
基于所述目标时间在所述组件管理池中更新所述头组件得到目标定时器组件;
基于所述目标时间,将所述目标定时器组件插入至定时器链条中,以更新所述定时器链条。
4.根据权利要求1所述的方法,其特征在于,各个定时器组件的绝对时间大于对应的定时器句柄函数的执行时间。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息;
基于各个定时器组件的定时器句柄函数、绝对时间、定时器句柄参数、定时器私有信息生成各个定时器组件;
基于各个定时器组件的绝对时间,确定所述定时器链条。
6.一种定时器实现装置,其特征在于,应用于实时操作系统,包括:
第一获取模块,用于获取定时器链条中头组件的绝对时间,其中,所述定时器链条包括至少一个定时器组件,各个定时器组件包括绝对时间,各个定时器组件基于各个定时器组件的绝对时间在所述定时器链条中升序排列,所述头组件为所述定时器链条中的第一个定时器组件;
第一申请模块,用于在实时操作系统的当前绝对时间达到所述头组件的绝对时间的情况下,从所述定时器链条中申请所述头组件;
第一确定模块,用于在所述实时操作系统的当前绝对时间未达到所述头组件的绝对时间的情况下,基于所述头组件的绝对时间和所述当前绝对时间确定时间差;
第二确定模块,用于将所述时间差确定为内核线程同步的等待时间;
第二申请模块,用于在达到所述等待时间的情况下,从所述定时器链条中申请所述头组件;
执行模块,用于执行所述头组件对应的定时事件;
所述定时器组件还包括:定时器句柄函数,所述执行模块,包括:
解析单元,用于对所述头组件进行解析,以获取所述头组件对应的定时器句柄函数;
执行单元,用于执行所述定时器句柄函数,以执行头组件对应的定时事件。
7.一种实时操作系统,其特征在于,包括权利要求6所述的定时器实现装置。
8.一种存储介质,其特征在于,该存储介质存储的计算机程序,能够被一个或多个处理器执行,能够用来实现如权利要求1至5中任一项所述定时器实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110804078.9A CN113504979B (zh) | 2021-07-16 | 2021-07-16 | 定时器实现方法、装置、实时操作系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110804078.9A CN113504979B (zh) | 2021-07-16 | 2021-07-16 | 定时器实现方法、装置、实时操作系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113504979A CN113504979A (zh) | 2021-10-15 |
CN113504979B true CN113504979B (zh) | 2024-04-16 |
Family
ID=78013492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110804078.9A Active CN113504979B (zh) | 2021-07-16 | 2021-07-16 | 定时器实现方法、装置、实时操作系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113504979B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859260A (zh) * | 2010-05-14 | 2010-10-13 | 中国科学院计算技术研究所 | 用于操作系统中的定时器管理装置和管理方法 |
WO2019140551A1 (zh) * | 2018-01-16 | 2019-07-25 | 深圳市汇顶科技股份有限公司 | 定时器实现方法和装置 |
CN110908429A (zh) * | 2018-09-18 | 2020-03-24 | 阿里巴巴集团控股有限公司 | 一种定时器操作方法及装置 |
CN112199170A (zh) * | 2020-09-07 | 2021-01-08 | 广州致远电子有限公司 | 实时操作系统的定时处理方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090140844A1 (en) * | 2007-12-03 | 2009-06-04 | Nokia Corporation | Method and Apparatus for Timer Event Management |
-
2021
- 2021-07-16 CN CN202110804078.9A patent/CN113504979B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859260A (zh) * | 2010-05-14 | 2010-10-13 | 中国科学院计算技术研究所 | 用于操作系统中的定时器管理装置和管理方法 |
WO2019140551A1 (zh) * | 2018-01-16 | 2019-07-25 | 深圳市汇顶科技股份有限公司 | 定时器实现方法和装置 |
CN110908429A (zh) * | 2018-09-18 | 2020-03-24 | 阿里巴巴集团控股有限公司 | 一种定时器操作方法及装置 |
CN112199170A (zh) * | 2020-09-07 | 2021-01-08 | 广州致远电子有限公司 | 实时操作系统的定时处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113504979A (zh) | 2021-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109032796B (zh) | 一种数据处理方法和装置 | |
WO2017143909A1 (zh) | 网页中的数据处理方法、装置及系统 | |
EP2551768A1 (en) | Multi-core system and start-up method | |
CN112486642B (zh) | 资源调度方法、装置、电子设备及计算机可读存储介质 | |
CN112631744A (zh) | 进程处理方法、装置、电子设备及计算机可读存储介质 | |
CN112817710A (zh) | 定时任务处理方法、系统、计算机设备及计算机存储介质 | |
CN115495262A (zh) | 一种微内核操作系统及进程间消息的处理方法 | |
CN109828759B (zh) | 代码编译方法、装置、计算机装置及存储介质 | |
CN114565502A (zh) | Gpu资源管理方法、调度方法、装置、电子设备及存储介质 | |
CN113504979B (zh) | 定时器实现方法、装置、实时操作系统及存储介质 | |
CN112052144A (zh) | 信息管理方法、装置、电子设备及存储介质 | |
CN109558254B (zh) | 异步回调方法、系统、装置及计算机可读存储介质 | |
CN111679895A (zh) | 分布式定时任务的执行方法、装置、设备及可读存储介质 | |
CN116483546A (zh) | 分布式训练任务调度方法、装置、设备及存储介质 | |
CN116737393A (zh) | 资源部署方法、装置和存储介质及电子设备 | |
CN116302420A (zh) | 并发调度方法、装置、计算机设备及计算机可读存储介质 | |
CN116069500A (zh) | 一种模型训练任务处理方法、装置、电子设备及可读介质 | |
CN112783613B (zh) | 一种单元调度的方法和装置 | |
CN113806055A (zh) | 一种轻量级任务调度方法、系统、装置及存储介质 | |
CN114675954A (zh) | 任务调度方法及装置 | |
CN115794321A (zh) | 定时任务处理方法、装置、介质及设备 | |
CN113704355A (zh) | 数据同步方法、电子设备及存储介质 | |
KR20220086245A (ko) | 차량용 운영체제의 태스크 실행 시스템 및 방법 | |
CN109150951B (zh) | Android系统Activity的启动方法和装置 | |
CN112433832A (zh) | 一种任务触发方法、装置、设备及计算机可读存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |