因为我常用的是stm32F4系列单片机,所以采用其滴答定时器作为时基定时器(如果你使用的单片机是别款,只要单片机上有个定时器都可以,另外也得有中断处理函数)(另外如果用的是stm32等单片机,片上具有滴答定时器,可以省掉1、2步骤,在HAL库下直接用HAL_GetTick()代替GetCount()即可,其他类似)
1.首先初始化定时器,本人一般设置定时时间为1ms,这个可以是具体情况而定。
2.定义一个全局变量,假设命名为Count,并初始化为0;然后再定时器相关的中断处理函数中进行Count++。
static long long Count = 0;
//定时器初始化,并设定定时时间和中断使能
void TimInit(){
...
}
//其相关的中断处理函数
void InterHandle(void){
....
Count ++;
}
//防止外界修改Count
long long GetCount(void){
return Count;
}
3.在相关的头文件里定义俩个宏,第一行代码中的(num)表示任务上一次的运行时刻,然后通过全局的时钟数减去上一次的运行时刻,再与设定好的时间(ms)进行比较,如果大于等于则表示时间已到可以进行此任务,否则不能进行。当可以进行该任务时,会有num=GetCount()的动作,表示得到当前时间,方便下次判断下次进此任务。举个例子:现在12点整,定个明天12点整的闹钟,每天循环,然后它会显示还有24个小时,然后等它到每天12点就响,也就是进闹钟任