定时器是客户应用是最常见的功能之一,本文主要介绍软件定时器和RTC定时器的函数接口,以及实际使用中的注意事项。
- 软件定时器使用流程解析
图1 软件定时器使用流程
- 软件定时器接口与代码解析
2.1、定义软定时器回调函数
(1)该函数为定时器的功能函数,定时完成执行该函数;
(2)回调函数内不能包含延迟函数;
(3)形参与返回值必须与回调函数格式对应;
(4)回调函数内,不能执行太复杂的功能,若有复杂功能需要实现,通常把回调函数用于发送信号量给功能线程,在该线程中执行该功能。
图2 定义软定时器回调函数
2.2、软定时器命名
(1)该参数用配置名即可。
图3 软定时器命名接口
2.3、创建软件定时器
(1)osTimerNew 返回值为该软件定时器的空间的首地址;
(2)soft_timer_callback 为回调函数的首地址(函数的名字为该函数的首地址);
(3)osTimerOnce,为配置单次触发定时器,osTimerPeriodic为周期性触发该回调;
(4)argument参数不用设置为空或者0;
(5)之前配置完成的osTimerAttr_t的地址。
图4 创建软定时器接口
2.4、开启软件定时器
(1)参数一:定时器地址;
(2)参数二:定时器实际时间值,单位ms;
(3)如果该函数为单次定时器:则过XXXms执行一次回调函数;
(4)如果该函数为周期性定时器,则以XXXms为周期执行回调函数;
(5)重复调用,此函数将重新计时。
图5 软定时器开启接口
2.5、停止软件定时器
该函数将不会执行回调函数,但是可以重新开启即重新调用osTimerStart来继续执行回调函数。
图6 软定时器停止接口
2.6、获取软件定时器名字
图7 获取软定时器名称接口
2.7、判断该定时器是否开启
ret:为0未开启,为1开启。
图8 判断定时器运行接口
2.8、删除定时器,释放定时器空间
删除后,不能调用该定时器,必须重新创建。
图9 删除软定时器接口
- 软件定时器demo演示
图10 定义软定时器回调函数
图11 创建软定时器
图12 启动软定时器
图13 判断软定时器执行
图14 软定时器Demo运行结果
- RTC定时器使用流程解析
即便模组进入睡眠模式,RTC定时器仍然继续计时,计时结束后唤醒模组。
图15 RTC定时器使用流程
- RTC定时器接口与代码解析
5.1、获取当前RTC时间
(1)time_t 为long long int 类型;
(2)网络附着获取为当前网络时间,否则默认时间从2000-1-1开始,精确到秒,返回的是一个UNIX时间。
图16 获取RTC时间接口
5.2、获取北京时间的UTC时间
(1)返回0成功,小于0失败;
(2)tm结构体如图17;
(3)网络附着获取为当前网络时间,否则默认时间从2000-1-1开始。
图17 获取RTC北京UTC时间接口
5.3、设置当前系统时间
返回值 0成功,1失败。
图18 设置当前系统时间接口
5.4、启动RTC定时器
(1)timer_id:有四个RTC定时可以使用,参考结构体cm_rtc_timer_id_e;
(2)timeout定时时间,单位秒;
(3)rtc定时器回调函数cb,到定点时间执行该回调函数; 形参返回值必须与typedef void (*cm_rtc_timer_cb)(void * arg);该函数一致;
(4)data用户参数可不填写,一般为NULL或者(void *)0。
图19 启动RTC定时器接口
5.5、停止rtc定时器
图20 停止RTC定时器接口
- RTC定时器demo演示
图21 定义RTC定时器回调
图22 未驻网获取RTC时间,设置一个系统时间
图23 启动RTC定时器,当前设置的系统时间60秒后,执行回调
图24 RTC定时器例程运行结果
以上便是MN316 OpenCPU下软定时器和RTC定时器相关demo的代码解析及应用介绍。