基于嵌入式系统的定时器装置及定时方法转让专利

申请号 : CN201610019615.8

文献号 : CN105718257B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蔡锦达唐静陟俊杰张菁王德铭金政宇

申请人 : 上海理工大学

摘要 :

本发明公开了一种基于嵌入式系统的定时器装置和定时方法,其中该装置包括:定时器、请求定时模块、时间数据处理模块和定时器休眠模块,请求定时模块用于接收控制系统的定时请求,根据该请求创建定时请求信号,并向时间数据处理模块发送定时请求信号;时间数据处理模块,用于接收请求定时模块发来的定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,定时器休眠模块用于接收时间数据处理模块发来的定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备。本发明定时时间灵活性强、使用简单方便,实现了工业控制系统中延时、定时多重性和多样性的要求,且定时精度高。

权利要求 :

1.一种基于嵌入式系统的定时器装置,包括:定时器、请求定时模块、时间数据处理模块和定时器休眠模块,其特征在于:请求定时模块用于接收控制系统的定时请求,根据该请求创建定时请求信号,并向时间数据处理模块发送定时请求信号;

时间数据处理模块,用于接收请求定时模块发来的定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,当定时时长达到预定定时时长时,创建定时结束信号,并将其传递给控制系统和定时器休眠模块;

定时器休眠模块用于接收时间数据处理模块发来的定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备;

所述定时器包括递减计数器和定时计数缓冲寄存器,

时间数据处理模块包括定时中断次数计数器、计数结束标志位、中断溢出位、中断溢出计数器;

所述定时请求信号包括:①定时器编号Tnum,②预定定时时长C_time,③定时初始参数P_init;

所述时间数据处理模块对定时器的定时时间进行实时检测包括,实时读取当前定时参数P_curt,然后根据时间差值算法对定时时长进行实时检测判断:时间差值=当前定时参数-初始定时参数,当时间差值大于等于请求的定时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制系统;

所述中断溢出位F_of在定时中断次数计数器的计数值未发生溢出时为0,发生溢出时置为1。

2.根据权利要求1所述的定时器装置,其特征在于:

所述定时初始参数P_init和当前定时参数P_curt都是结构体变量,P_init包括定时器递减计数器的初始计数值P_0,定时中断次数计数器的初始计数值P_C0以及中断溢出计数器的初始计数值P_OC0;P_curt包括定时器递减计数器的当前计数值P_t,定时中断次数计数器的当前计数值P_Ct以及中断溢出计数器的当前计数值P_OCt。

3.根据权利要求2所述的定时器装置,其特征在于:请求信号发出后,请求定时模块将计数结束标志位中的标志变量F_tup设为“0”,每接收一个脉冲递减计数器的值P_t减1,每当P_t减为0时,定时器向时间数据处理模块发送信号,根据该信号,定时中断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中的值自动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时,中断溢出计数器的计数值P_OCt加1,时间数据处理模块将中断溢出位置1,同时将P_Ct清零。

4.一种基于嵌入式系统的定时器方法,其特征在于包括如下步骤:

接收控制系统的定时请求,根据该请求创建定时请求信号,并发送定时请求信号;

接收定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,当定时时间达到预定定时时长时,创建定时结束信号,并将其传递给控制系统;

接收定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备;

所述定时器包括递减计数器和定时计数缓冲寄存器,

所述定时请求信号包括:①定时器编号T_num,②预定定时时长C_time,③定时初始参数P_init;

对定时器的定时时长进行实时检测包括,实时读取当前定时参数P-curt,然后根据时间差值算法对定时时长进行实时检测判断:时间差值=当前定时参数-初始定时参数,当时间差值大于等于预定的定时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制系统;

中断溢出位F_of在定时中断次数计数器的计数值未发生溢出时为0,发生溢出时置为

1。

5.根据权利要求4所述的定时器方法,其特征在于:

所述定时初始参数P_init和当前定时参数P_curt都是结构体变量,P_init包括定时器递减计数器的初始计数值P_0,定时中断次数计数器的初始计数值P_C0以及中断溢出计数器的初始计数值P_OC0;P_curt包括定时器递减计数器的当前计数值P_t,定时中断次数计数器的当前计数值P_Ct以及中断溢出计数器的当前计数值P_OCt。

6.根据权利要求5所述的定时器方法,其特征在于:请求信号发出后,将计数结束标志寄存位中的标志变量F_tup设为“0”,每接收一个脉冲递减计数器的值P_t减1,每当P_t减为

0时,发送一个指示信号,根据该信号,定时中断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中的值自动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时,中断溢出计数器的计数值P_OCt加1,将中断溢出位置1,同时将P_Ct清零。

说明书 :

基于嵌入式系统的定时器装置及定时方法

技术领域

[0001] 本发明涉及一种基于嵌入式系统的定时器装置及定时方法,具体阐述了嵌入式系统控制器的定时器装置的设计方法及应用层定时器算法。

背景技术

[0002] 随着工业自动控制技术的规模化发展,控制过程中多任务、多层次的复杂控制要求向各工业控制系统提出了新的挑战。要使系统稳定、可靠地运行,控制内容常常要求控制系统延时或定时向外设发出各种不同的控制信号,以满足不同时序、不同功能的控制要求。因此,需要控制系统具有多个相互独立而又标准相同的定时器来实现控制功能。
[0003] 嵌入式系统集成了输入输出口、RS232和485通信串口,是一款功能丰富的一体控制器(以下简称控制器)。其硬件系统结构精简、内核小、成本低、灵活方便且实时性高,已逐渐发展成为嵌入式系统开发研究中的主流部件。然后,控制器有可供用户使用的相互独立的定时器,例如timer0~4,除此之外,若控制系统还要求实现其他更多的延时、定时功能,则多是通过使用for函数进行一定次数的空循环来达到延时、定时效果,这种方式不但定时时间难以精确判定,而且在延时时间未结束时,CPU始终停留在延时功能程序段内,不会扫描其他程序段内容,可见,这种定时方式不仅占用了大量系统内存,还拖慢了CPU处理事件的时间进程。然而,由于硬件资源的限制,不可能为每一个定时应用单独配置一个硬件定时器。这种有限的定时器个数和日益复杂的自动控制要求之间的矛盾,无疑成了控制器在嵌入式开发领域中发展的绊脚石。为了解决这个问题,本文提出一种基于嵌入式系统的定时器的设计方法,基于ADS编译器在单个硬件定时器的基础上创建多个定时器,以实现在硬件资源有限的情况下满足多点同时定时的控制要求。

发明内容

[0004] 本发明涉及一种基于嵌入式系统的软件定时器设计,针对工业控制过程中经常需要在不同之处同时使用定时功能,而嵌入式系统中有的相互独立的定时器,例如timer0~4,提出一种基于嵌入式系统的软件定时器的设计方法。
[0005] 本发明公开了一种基于嵌入式系统的定时器设计方法,包括定时启动、运行、停止三个阶段,分别对应软件定时系统的请求定时模块、数据处理模块和定时器休眠模块。三个阶段分别由不同的API函数完成。
[0006] 一种基于嵌入式系统的定时器装置,包括:定时器、请求定时模块、时间数据处理模块和定时器休眠模块,其中:
[0007] 请求定时模块用于接收控制系统的定时请求,根据该请求创建定时请求信号,并向时间数据处理模块发送定时请求信号;
[0008] 时间数据处理模块,用于接收请求定时模块发来的定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,当定时时长达到预定定时时长时,创建定时结束信号,并将其传递给控制系统和定时器休眠模块;
[0009] 定时器休眠模块用于接收时间数据处理模块发来的定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备。
[0010] 所述的定时器装置,优选的:
[0011] 所述定时器包括递减计数器和定时计数缓冲寄存器,
[0012] 时间数据处理模块包括定时中断次数计数器、计数结束标志位、中断溢出位、中断溢出计数器;
[0013] 所述定时请求信号包括:①定时器编号T_num,②预定定时时长C_time,③定时初始参数P_init;
[0014] 所述时间数据处理模块对定时器的定时时间进行实时检测包括,实时读取当前定时参数P_curt,然后根据时间差值算法对定时时长进行实时检测判断:时间差值=当前定时参数-初始定时参数,当时间差值大于等于请求的定时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制系统;
[0015] 所述中断溢出位F_of在定时中断次数计数器的计数值未发生溢出时为0,发生溢出时置为1。
[0016] 所述的定时器装置,优选的:
[0017] 所述定时初始参数P_init和当前定时参数P_curt都是结构体变量,P_init包括定时器递减计数器的初始计数值P_0,定时中断次数计数器的初始计数值P_C0以及中断溢出计数器的初始计数值P_OC0;P_curt包括定时器递减计数器的当前计数值P_t,定时中断次数计数器的当前计数值P_Ct以及中断溢出计数器的当前计数值P_OCt。
[0018] 所述的定时器装置,优选的:请求信号发出后,请求定时模块将计数结束标志位中的标志变量F_tup设为“0”,每接收一个脉冲递减计数器的值P_t减1,每当P_t减为0时,定时器向时间数据处理模块发送信号,根据该信号,定时中断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中的值自动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时,中断溢出计数器的计数值P_OCt加1,时间数据处理模块将中断溢出位置1,同时将P_Ct清零。
[0019] 所述的定时器装置,优选的:所述时间数据处理模块按如下方式对定时器的定时时长进行计算:
[0020] 1)当F_of=0时,表示定时器中断次数累计没有发生溢出,当前定时时长按如下公式计算:
[0021]
[0022] 其中:
[0023] 2)当F_of=1时,表示定时器中断次数累计有溢出现象发生,当前时间长度计算公式如下式:
[0024]
[0025] 其中:
[0026] 式(1)、(2)、(3)和(4)中:
[0027] Tbase表示定时器的时间计数time base,即定时计数缓冲寄存器中用于自动重载到递减计数器中的值;设控制系统定时器中断频率为Tirpt,则Tbase按式(5)计算:
[0028]
[0029] P_Climit表示定时参数P_C不发生溢出的最大极限值;
[0030] 此外,用T0表示初始定时参数、Tt表示当前定时参数、上角标表示结构体成员编号、下脚标表示数组成员编号。
[0031] 根据计算式(1)和(3)计算出Δn值后,做下式判断:
[0032] Δn≥C_time  (6)。
[0033] 一种基于嵌入式系统的定时器方法,包括如下步骤:
[0034] 接收控制系统的定时请求,根据该请求创建定时请求信号,并发送定时请求信号;
[0035] 接收定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,当定时时间达到预定定时时长时,创建定时结束信号,并将其传递给控制系统;
[0036] 接收定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备。
[0037] 所述的定时器装置,优选的:
[0038] 所述定时器包括递减计数器和定时计数缓冲寄存器,
[0039] 所述定时请求信号包括:①定时器编号T_num,②预定定时时长C_time,③定时初始参数P_init;
[0040] 对定时器的定时时长进行实时检测包括,实时读取当前定时参数P_curt,然后根据时间差值算法对定时时长进行实时检测判断:时间差值=当前定时参数-初始定时参数,当时间差值大于等于预定的定时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制系统;
[0041] 所述中断溢出位F_of在定时中断次数计数器的计数值未发生溢出时为0,发生溢出时置为1。
[0042] 所述的定时器装置,优选的:
[0043] 所述定时初始参数P_init和当前定时参数P_curt都是结构体变量,P_init包括定时器递减计数器的初始计数值P_0,定时中断次数计数器的初始计数值P_C0以及中断溢出计数器的初始计数值P_OC0;P_curt包括定时器递减计数器的当前计数值P_t,定时中断次数计数器的当前计数值P_Ct以及中断溢出计数器的当前计数值P_OCt。
[0044] 所述的定时器装置,优选的:请求信号发出后,将计数结束标志寄存位中的标志变量F_tup设为“0”,每接收一个脉冲递减计数器的值P_t减1,每当P_t减为0时,发送一个指示信号,根据该信号,定时中断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中的值自动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时,中断溢出计数器的计数值P_OCt加1,将中断溢出位置1,同时将P_Ct清零。
[0045] 所述的定时器装置,优选的:按如下方式对定时器的定时时长进行计算:
[0046] 1)当F_of=0时,表示定时器中断次数累计没有发生溢出,当前定时时长按如下公式计算:
[0047]
[0048] 其中:
[0049] 2)当F_of=1时,表示定时器中断次数累计有溢出现象发生,当前时间长度计算公式如下式:
[0050]
[0051] 其中:
[0052] 式(1)、(2)、(3)和(4)中:
[0053] Tbase表示定时器的时间基数time base,即定时计数缓冲寄存器中用于自动重载到递减计数器中的值;设控制系统定时器中断频率为Tirpt,则Tbase按式(5)计算:
[0054]
[0055] P_Climit表示定时参数P_C不发生溢出的最大极限值;
[0056] 此外,用T0表示初始定时参数、Tt表示当前定时参数、上角标表示结构体成员编号、下脚标表示数组成员编号。
[0057] 根据计算式(1)和(3)计算出Δn值后,做下式判断:
[0058] Δn≥C_time  (6)。
[0059] 一种基于嵌入式系统的软件定时器设计方法,包括定时启动、运行、停止三个阶段,分别对应软件定时系统的请求定时模块、时间数据处理模块和定时器“休眠”模块。三个阶段分别由不同的API函数完成不同的功能,并与控制系统进行数据交换,其中:
[0060] A)所述启动阶段,对应请求定时模块。在控制系统请求定时时,该功能模块负责创建定时请求信号,并将信号传递给数据处理功能模块。定时请求信号主要包括:①软件定时系统中定时器编号T_num,②请求定时时长C_time,③定时初始参数P_init。
[0061] B)所述运行阶段,对应时间数据处理模块。首先读取控制系统当前定时参数P_curt,然后根据时间差值算法对定时时长进行实时检测判断,最后创建定时结束信号F_tup,并将其传递给控制系统。
[0062] C)所述停止阶段,对应系统“休眠”模块。负责当某次定时功能结束后清除相应的定时请求信号,为下一次定时请求做初始化准备。
[0063] 所述的基于嵌入式系统的软件定时器设计方法,其特征在于:所述启动阶段,定义结构体类型变量P_init存储初始定时参数,包括定时系统中定时器编号T_num、请求定时时长C_time,定时器递减计数器计数值P_t,定时中断次数计数P_Ct以及中断溢出计数P_OCt。所述定时器计数缓存寄存器(TCNTO)指嵌入式内部寄存器。
[0064] 所述的基于嵌入式系统的软件定时器设计方法,其中:通过设定定时器计数缓存寄存器值,确定定时器定时精度,通过公式:所需计数次数=(所需时间*系统主频)/定时器计数监视寄存器值,可得出所需定时器中断次数。
[0065] 所述的基于嵌入式系统的软件定时器设计方法,其中:所述运行阶段,定时器开始定时后,定义“计数结束”标志变量F_tup为“0”,所述定时器中断计数变量P_Ct在每次定时器中断服务函数中增加一次,若定时器中断次数超过定时器计数变量最大值,便向定时器中断溢出计数变量进1,且清零定时器中断计数变量。
[0066] 所述的基于嵌入式系统的软件定时器设计方法,其特征在于:所述时间差值算法,根据公式:时间差值=当前定时参数-初始定时参数,当时间差值大于等于请求定时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制系统,完成计时和延时功能。
[0067] 所述的基于嵌入式系统的软件定时器设计方,其中:所述停止阶段,当“计数结束”变量F_tup置“1”后,保证定时参数P_init和P_curt在下一次请求定时动作发起之前保持一致。
[0068] 本发明产生的有益效果是:定时时间灵活性强、使用简单方便,实现了工业控制系统中延时、定时多重性和多样性的要求,且定时精度高。

附图说明

[0069] 图1:基于嵌入式系统的定时器装置结构示意图
[0070] 图2:请求定时子程序流程图
[0071] 图3:软件定时器数据计数原理
[0072] 图4:PWM定时器功能原理图
[0073] 图5:PWM定时器控制流程图
[0074] 图6:定时运行子程序流程图
[0075] 图7:定时停止子程序流程图

具体实施方式

[0076] 以下结合附图对本发明作进一步说明。
[0077] 如图1所示,本发明基于嵌入式系统的定时器装置,包括:定时器、请求定时模块、时间数据处理模块和定时器休眠模块,其中:请求定时模块用于接收控制系统的定时请求,根据该请求创建定时请求信号,并向时间数据处理模块发送定时请求信号;时间数据处理模块,用于接收请求定时模块发来的定时请求信号,读取定时器的当前定时参数,然后根据时间差值算法对定时器的定时时长进行实时检测判断,当定时时间达到定时时长时,创建定时结束信号,并将其传递给控制系统;定时器休眠模块用于接收时间数据处理模块发来的定时结束信号,根据该信号清除相应的定时请求信号,为下一次定时请求做初始化准备。
[0078] 所述定时器包括递减计数器和定时计数缓冲寄存器。所述时间数据处理模块包括定时中断次数计数器、计数结束标志位、中断溢出位、中断溢出计数器。所述定时请求信号包括:①定时器编号T_num,②请求定时时长C_time,③定时初始参数P_init;所述时间数据处理模块对定时器的定时时长进行实时检测包括,实时读取当前定时参数P_curt,然后根据时间差值算法对定时时长进行实时检测判断:时间差值=当前定时参数-初始定时参数,当时间差值大于等于请求的定时时长,即Δ=P_curt-P_init≥C_time时,定义“计数结束”标志变量F_tup为“1”,并输出给控制系统;所述中断溢出位F_of在定时中断次数计数器的计数值未发生溢出时为0,发生溢出时置为1。
[0079] 请求信号发出后,请求定时模块将计数结束标志寄存位中的标志变量F_tup设为“0”,每接收一个脉冲递减计数器的值P_t减1,每当P_t减为0时,向时间数据处理模块发送信号,根据该信号,定时中断次数计数器的计数值P_Ct的值加1,定时计数缓冲寄存器中的值自动重载到递减计数器中;当P_Ct的值达到其上限值P_Climit时,中断溢出计数器的计数值P_OCt加1,时间数据处理模块将中断溢出位置1,同时将P_Ct清零。
[0080] 一种基于嵌入式系统的定时方法,包括定时启动、运行、停止三个阶段,分别对应软件定时系统的请求定时模块、时间数据处理模块和定时器休眠模块,三个阶段分别由不同的API函数完成,并与控制系统进行数据交换,其中:
[0081] A)所述启动阶段,完成定时请求信号的创建和定时初始数据的预处理。请求定时子程序需要接收用户提供的请求定时器编号和请求定时时间两个参数,之后由该子程序向数据处理子程序发送初始定时信息P_init,并在定时运行阶段与当前定时参数P_curt一同参与时长计算。因为P_init和P_curt是一个含有多个数组成员的自定义结构体类型的变量(定时参数结构体设计如表1所示,为便于理解和表述,将本发明中其余变量定义如表2所示),故要求请求定时子程序向控制系统返回多个数据,因此,设计一个返回自定义结构体类型子函数。其控制流程图如附图2所示。图中*timerid(num,time)是一个指向整型数组的指针函数。由于软件定时系统中有任意多个相互独立的软件定时器,分别对应不同的T_num,而函数不能直接返回整个数组的值,*timerid指针函数返回的指针指向请求定时时长数组的首地址,这样其他子函数便可以通过简单的指针操作获取对应T_num定时器的请求定时时长。
[0082]
[0083] 表1
[0084]
[0085] 表2
[0086] B)所述运行阶段,采用基于差值比较原理的时间长度算法,来实时计算当前定时时长。若当前定时时长T_curt满足定时请求时要求的时长C_time[T_num],则要求时间数据处理功能模块将相应定时结束标志F_tup[T_num]置1并传递给控制系统。
[0087] 1.所述时间长度算法在时间数据处理功能模块中应用,主要是对定时请求模块传递来的数据初始定时信息P_init和数据处理模块读取的数据当前定时参数P_curt进行计算,由结构体变量的定义可知,P_init和P_curt的数据来源于三个部分,对这三个部分的数据的操作称为定时数据的预处理过程。本发明提出的三部分数据之间存在如附图3所示逻辑关系。每当PWM定时器的递减计数器的值P_t减为0,P_Ct的值就加1,同时寄存器TCNTB0中的值自动重载到递减计数器中(见附图4,PWM定时器功能原理示意图);当P_Ct的值达到数据的上限值P_Climit时,P_OCt的值加1,同时将P_Ct清零。每当递减计数器中的值减为0,系统会向CPU发出一个中断请求信号,使当前程序运行指针发生跳转去执行定时器中断服务程序,因此,在定时系统中对数据P_t、P_Ct、P_OCt的处理均在PWM定时器中断服务函数中完成,正是因为如此,称PWM定时器为软件定时器的硬件基础。设计PWM定时器控制流程图如附图4所示。
[0088] 2.所述基于差值比较原理的时间长度算法其核心思想是由API子函数计算定时参数P_curt和P_init的差值Δn,并将其与对应请求定时时长C_time[T_num]实时进行比较,当Δn值满足定时时长要求时,定时系统的数据处理模块将定时结束标志F_tup[T_num]置1输出并传递给控制系统。因为PWM定时计数器是递减工作模式,即P_0和P_t的数值是递减计数,而P_C0、P_Ct、P_OC0和P_OCt是递增计数,且由附图5可知,在PWM定时中断服务程序中对定时数据的处理有两种模式,在设计时间长度算法时应分情况进行讨论,因此,本发明基于以下两种情况提出软件定时系统的时间长度算法:
[0089] 1)当F_of=0时
[0090] 此时,表示定时器中断次数累计没有发生溢出,故当前定时时长可按如下公式计算:
[0091]
[0092] 其中:
[0093] 2)当F_of=1时
[0094] 此时,表示定时器中断次数累计有溢出现象发生,故在设计时间长度算法时,要考虑溢出对当前定时长度的影响,此时,设计时间长度计算公式如下式:
[0095]
[0096] 其中:
[0097] 式(1)、(2)、(3)和(4)中:
[0098] Tbase表示PWM定时器的时间计数time base,即定时计数缓冲寄存器TCNTBn中用于自动重载到递减计数器中的值。设控制系统PWM定时中断频率为Tirpt,则Tbase可按式(5)计算:
[0099]
[0100] P_Climit表示定时参数P_C不发生溢出的最大极限值;
[0101] 此外,为简化算法的表达形式,用T0表示初始定时参数、Tt表示当前定时参数、上角标表示结构体成员编号、下脚标表示数组成员编号。
[0102] 根据计算式(1)和(3)计算出Δn值后,做下式判断:
[0103] Δn≥C_time[T_num]  (6)
[0104] 综上所述,本发明提出的定时系统时间长度算法的计算过程可归纳为:
[0105] (1)计算PWM定时器递减计数器的初始计数值 与当前计数值Tt1的差值[0106] (2)检测PWM定时器中断次数计数溢出标志的状态,若F_of=0,执行步骤3,若F_of=1,执行步骤4。
[0107] (3)计算定时中断次数计数的当前值Tt2和初始值 之差,记为
[0108] (4)中断计数次数发生溢出,考虑溢出对计数值的影响计算中断次数计数的当前2
值Tt和初始值 之差,记为
[0109] (5)计算中断计数值的溢出量,记为
[0110] (6)计算三部分差值的 的和,记为Δn,即为定时系统实时定时时长;
[0111] (7)比较Δn与请求定时时长C_time[T_num]关系,若Δn≥C_time[T_num],将定时结束标志F_tup[T_num]置1输出给控制系统,表示当前定时结束;否则,跳转执行步骤(1)。
[0112] 根据时间差值算法设计定时运行API函数,控制流程图如附图6所示。在子程序中计算Δn值时,定时初始参数P_init的值由定时请求子程序返回,为避免函数在传递和返回数据时产生数据冗余,占用太多内存,设计数据处理子函数的返回类型为整型,但形式参数为指向自定义结构体类型Time_Para_init的指针,通过传递P_init的地址来进行函数调用,指针比整个结构要小得多,所以把它压到堆栈上效率比直接拷贝结构要高很多。
[0113] C)所述定时停止阶段,定时停止是在当计算出当前定时长度满足设定时长要求需要执行的操作,目的是当前定时功能结束时,保证对应定时器P_init和P_curt在下一次请求定时动作发起之前保持一致,也即将Δn值设为0,达到初始化定时参数的目的。由此可设计出定时停止阶段API子函数程序流程图如附图7所示。该函数是一个无返回值类型的函数,其形式参数有两个,一个是指向结构的指针,另一个是用户指定请求使用的软件定时器编号。