Timer.h
#ifndef TIMER_H
#define TIMER_H
#include <Ticker.h>
Ticker myTimer;
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define GetStructNum(a) (sizeof(a)/sizeof(a[0]))
#define FlushTime_Task 10 //s
#define TaskNum (GetStructNum(tasks))
typedef void(*Task)();
//任务组
typedef struct
{
bool isOK;//剩余时间为0,任务就绪,在主函数中进入。
u16 curTime;//当前剩余时间 由设定时间在定时器中逐步递减
u16 endTime;//设定时间
Task task;//任务 函数指针,指向定时执行的任务
}MyTaskList;
#endif
Timer
MyTaskList tasks[]=
{
{
0,2,2,Task_1},
{
0,2,2,Task_2},
{
0,2,2,Task_3},
{
0,2,2,Task_4},
};
void TASK_TIMER_IRQ()
{
for(int i=0;i<TaskNum;i++)
{
if(tasks[i].curTime)
{
tasks[i].curTime--;
}
else
{
tasks[i].isOK=true;
tasks[i].curTime = tasks[i].endTime;
}
}
}
//判断是否有任务定时时间到,可以运行
void Task_Process()
{
u8 i=0;
for(int i=0;i<TaskNum;i++)
{
if(tasks[i].isOK)
{
//执行对应任务
tasks[i].task();
tasks[i].isOK=false;
}
}
}
void Task_1()
{
Serial.println("Task_1 : is OK");
}
void Task_2()
{
Serial.println("Task_2 : is OK");
}
void Task_3()
{
Serial.println("Task_3 : is OK");
}
void Task_4()
{
Serial.println("Task_4 : is OK");
}
main
#include "Timer.h"
void setup() {
Serial.begin(115200);
myTimer.attach_ms(FlushTime_Task,TASK_TIMER_IRQ);
}
void loop() {
Task_Process();
}
实现效果,