一.简介
在项目开发中,很多功能模块都会用到定时功能,比如说定时3分钟后点亮一个led灯,定时1个小时后自动关机等,如果项目中只用到了一个应用层级别的定时功能,可能简单的写一下就好了,但是当项目中有多个定时功能需求的话,反而是把定时功能单独拿出来,写成一个功能模块,更简单更清晰。
二.功能实现
创建TimSet.c,TimSet.h,在TimSet.h文件中声明需要用的数据类型,及声明外部文件调用要用的api函数,在TimSet.c中实现api接口函数
2.1在头文件中定义数据类型
//枚举用到定时功能的模块,根据自己需求定义
typedef enum
{
TSM_HEAT,//加热定时功能
TSM_SAFE,//安全工作时间定时功能
//...
NUM_TSM
}EM_TIMSETMOUDLE;
//枚举定时功能的不同状态
typedef enum
{
TIMSETSTA_STOP,
TIMSETSTA_PASUSE,
TIMSETSTA_RUN,
TIMSETSTA_END
}EM_TIMSETSTA;
//定义触发定时到达处理函数时的触发方式
#define TSHTYPE_TIMOVER 1 //到达设定时间后触发处理函数
#define TSHTYPE_INTERRUPT 2 //未到达设定时间,中间人为打断
//定义函数指针类型
typedef void (*pFun)(uint8_t);
//定义处理结构体
typedef struct
{
pFun handleFun; //定义定时到达后的处理函数
EM_TIMSETSTA curSta;
EM_TIMSETSTA lastSta;
unsigned long clkTarget; //秒定时计数
unsigned long tarTime; //预计定时时间
unsigned long timeCnt; //定时计数器
}ST_TIMSETDATA;
2.2在头文件中声明api接口函数
//初始化指定功能模块,指定其处理函数
void TimSet_InitOne(EM_TIMSETMOUDLE tarMoudle,pFun handleFun);
//总初始化函数
void TimSet_InitAll(void);
//启动某个具体模块定时功能
void TimSet_Start(EM_TIMSETMOUDLE tarMoudle,unsigned long seconds);
//停止某