一种大量定时器实现方法技术

技术编号:35032697 阅读:18 留言:0更新日期:2022-09-24 23:07
本申请提供一种大量定时器实现方法,包括以下步骤:定义定时器结构体,判断时钟变量大于等于目标句柄所对应的定时时间时,调用目标句柄所对应的函数指针指向的函数实体,执行子步骤s52;判断时钟变量小于目标句柄所对应的定时时间时,执行子步骤s53;s52:判断目标句柄所对应的周期次数不为0时,将定时时间更新为定时时间加上时钟变量,将周期次数减1,执行子步骤s53;判断目标句柄所对应的周期次数为0时,执行子步骤s53;s53:通过目标句柄所对应的next指针,将目标句柄的值更新为next指针所指向的定时器结构体的地址。通过上述步骤,实现了定时器的扩展,解决了由于定时器硬件的限制而无法满足使用需求的技术难题。而无法满足使用需求的技术难题。而无法满足使用需求的技术难题。

【技术实现步骤摘要】
一种大量定时器实现方法


[0001]本公开一般涉及计算机控制
,具体涉及一种大量定时器实现方法。

技术介绍

[0002]在一个多任务处理的复杂嵌入式系统中,通常需要大量的定时器对周期性任务进行计时,以及对任务中的统计量进行计数操作等。
[0003]处理器(例如GD32F4处理器)通常只有数个定时器,无法满足大量定时器应用场景下的使用需求;传统方式下,基于此通过利用一个定时器为基准,采用标记量的方式进行倍频;然而这种方法下需要管理大量的标记量,并且对于不同周期/频率的定时需求,则需要不同的基准定时器,随着定时器需求量的增加,导致基准定时器数量逐渐无法满足使用需求。

技术实现思路

[0004]鉴于现有技术中的上述缺陷或不足,期望提供一种可解决上述技术问题的一种大量定时器实现方法。
[0005]本申请第一方面提供一种大量定时器实现方法,包括以下步骤:
[0006]s1:定义定时器结构体,所述定时器结构体的成员包括定时时间、周期次数、函数指针以及指向下一个所述定时器结构体的next指针;多个所述定时器结构体按序排列;
[0007]s2:设定系统时钟的周期;定义时钟变量,所述时钟变量用于表示所述系统时钟的运行次数;
[0008]s3:初始化所述定时器结构体,以对多个的所述定时器结构体的成员赋值;
[0009]s4:定义结构体指针变量,所述结构体指针变量用于表示多个所述定时器结构体所形成的链表的头句柄;
[0010]s5:定义循环函数以及所述循环函数的目标句柄,所述目标句柄的初值设置为所述结构体指针变量;执行所述循环函数,所述循环函数用于进行以下子步骤:
[0011]s51:判断所述时钟变量大于等于所述目标句柄所对应的定时器结构体的定时时间时,调用所述目标句柄所对应的定时器结构体的函数指针所指向的函数实体,执行子步骤s52;判断所述时钟变量小于所述目标句柄所对应的定时器结构体的定时时间时,执行子步骤s53;
[0012]s52:判断所述目标句柄所对应的定时器结构体的周期次数不为0时,将当前所述定时器结构体的定时时间更新为所述定时时间加上当前所述时钟变量,将当前所述定时器结构体的周期次数减1,执行子步骤s53;
[0013]判断所述目标句柄所对应的定时器结构体的周期次数为0时,执行子步骤s53;
[0014]s53:通过所述目标句柄所对应的定时器结构体的next指针,将所述目标句柄的值更新为所述next指针所指向的定时器结构体的地址。
[0015]根据本申请实施例提供的技术方案,所述子步骤s51还包括:判断所述目标句柄为
空时,结束循环。
[0016]根据本申请实施例提供的技术方案,执行所述循环函数前还包括启动定时器步骤;所述启动定时器步骤包括:
[0017]接收启动指针句柄,所述启动指针句柄为待启动的所述定时器结构体的地址;
[0018]判断所述目标句柄不为空时:
[0019]判断所述目标句柄是否等于所述启动指针句柄;若是,则表示所述目标句柄所对应的定时器结构体已启动;若否,则将所述目标句柄中所对应的定时器结构体的next指针赋值给所述目标句柄;
[0020]将所述结构体指针变量的值赋值给所述启动指针句柄所对应的定时器结构体的next指针;将所述启动指针句柄的值赋值给所述结构体指针变量。
[0021]根据本申请实施例提供的技术方案,所述大量定时器实现方法还包括以下步骤:
[0022]s61:接收停止指针句柄,所述停止指针句柄为待停止的所述定时器结构体的地址;
[0023]s62:定义所述定时器结构体的二级指针;
[0024]s63:将所述结构体指针变量赋值给所述二级指针;
[0025]s64:定义所述定时器结构体的指针变量,将所述指针变量的初始值设置为所述二级指针所指向的地址;
[0026]s65:判断所述停止指针句柄等于所述指针变量时,将所述指针变量所对应的定时器结构体的next指针赋值给所述二级指针所指向的地址;
[0027]判断所述停止指针句柄不等于所述指针变量时,将所述指针变量所对应的定时器结构体的next指针取地址后赋值给所述二级指针;
[0028]s66:判断所述二级指针所指向的地址存储的值是否为空:若为空,则结束循环,若不为空,则执行步骤s63。
[0029]本申请第二方面提供一种服务端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述所述的大量定时器实现方法步骤。
[0030]本申请第三方面提供一种计算机可读存储介质,所述计算机可读存储介质有计算机程序,所述计算机程序被处理器执行时实现如上述所述的大量定时器实现方法步骤。
[0031]本申请的有益效果在于:基于系统时钟,通过定义定时器结构体,使得多个定时器结构体之间相互串联,形成多个定时链表,每个链表中均包括定时时间TimOut(即所需要定时的周期时间),周期次数CyCnt(即所需要定时的次数),函数指针pFun(即所需要处理的函数实体的地址)以及next指针(即指向下一个链表的地址);通过循环函数的不断循环,使得对每个链表进行不断的判断运行,即:当判断当前的时钟变量大于等于定时时间时,则调用输出该函数实体;同时,判断周期次数大于0时,则将定时时间更新为定时时间加上当前时钟变量,以使下一个周期到来时,继续触发定时;同时,将周期次数减1;当判断当前的时钟变量小于定时时间时,则直接对下一个定时器结构体继续判断运行。
[0032]上述步骤中,使得系统时钟与定时器结构体各成员间形成联系,实现了定时器的扩展,解决了现有技术中由于定时器硬件的限制或基准定时器的不足而无法满足大量定时器的使用需求的技术难题,同时也无需管理大量的标记值,有利于提高工作效率。
附图说明
[0033]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0034]图1为本申请提供的一种大量定时器实现方法的流程图;
[0035]图2为图1所示步骤s5中执行所述循环函数的流程图;
[0036]图3为以图1所示大量定时器实现方法中所形成的链表的原理图;
[0037]图4为本申请提供的服务端。
具体实施方式
[0038]下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关专利技术,而非对该专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与专利技术相关的部分。
[0039]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0040]请参考图1

图2为本申请提供的一种大量定时器实现方法,包括以下步骤:
[0041]s1:定义定时器结构体,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种大量定时器实现方法,其特征在于,包括以下步骤:s1:定义定时器结构体,所述定时器结构体的成员包括定时时间、周期次数、函数指针以及指向下一个所述定时器结构体的next指针;s2:设定系统时钟的周期;定义时钟变量,所述时钟变量用于表示所述系统时钟的运行次数;s3:初始化所述定时器结构体,以对多个的所述定时器结构体的成员赋值;s4:定义结构体指针变量,所述结构体指针变量用于表示多个所述定时器结构体所形成的链表的头句柄;s5:定义循环函数以及所述循环函数的目标句柄,所述目标句柄的初值设置为所述结构体指针变量;执行所述循环函数,所述循环函数用于进行以下子步骤:s51:判断所述时钟变量大于等于所述目标句柄所对应的定时器结构体的定时时间时,调用所述目标句柄所对应的定时器结构体的函数指针所指向的函数实体,执行子步骤s52;判断所述时钟变量小于所述目标句柄所对应的定时器结构体的定时时间时,执行子步骤s53;s52:判断所述目标句柄所对应的定时器结构体的周期次数不为0时,将当前所述定时器结构体的定时时间更新为所述定时时间加上当前所述时钟变量,将当前所述定时器结构体的周期次数减1,执行子步骤s53;判断所述目标句柄所对应的定时器结构体的周期次数为0时,执行子步骤s53;s53:通过所述目标句柄所对应的定时器结构体的next指针,将所述目标句柄的值更新为所述next指针所指向的定时器结构体的地址。2.根据权利要求1所述的大量定时器实现方法,其特征在于,所述子步骤s51还包括:判断所述目标句柄为空时,结束循环。3.根据权利要求1所述的大量定时器实现方法,其特征在于,执行所述循环函数前还包括启动定时器步骤;所述启动定时器步骤包括:接收启动指...

【专利技术属性】
技术研发人员:王雨龙
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:

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

1