1. 大致功能介绍
- 实现任务列表,定时器会间隔一段时间遍历列表发现要执行的任务
- 任务列表中的所有任务并行执行
- 每个任务都可以有自己的定时器,并且可以选择是否要重复执行
- 定义方便的任务函数实现接口
- 定时器可以由用户自定义何时启动和停止
- 提供等待功能,保证任务列表中的所有任务执行完成
- 提供任务列表的传参功能
2. API库介绍
void setTick(int val);
设置定时间的间隔时间tick,若设置tick为1000,且任务的定时器时间为1000,则任务会在1秒后执行,默认tick为1秒,最小tick时间为1us。
void addTimerTask(TimerTask task, int val, int autoreset, void *arg);
向任务列表注册一个任务,并指定其定时时间val,以及是否要重复执行autoreset,并可以指定参数的地址。
task需要按照头文件提供的宏来编写,例如:
TASK_START(test2, arg)
//body
Arg *temp = (Arg*)arg;
temp->ret = temp->a + temp->b;
printf("This is a test2\n");
TASK_END
TASK_START(name, arg)是任务头,name是任务名,arg是参数地址,TASK_END是任务结尾。任务体内可编写正常的c语言代码,并使用参数arg指针。
autoreset有两个可选项:AUTORESET(重复执行),NORESET(执行一次)。
若没有参数,可将arg参数设置为NULL。
void TimerWait();
用于等待任务列表中所有任务执行完毕。
void TimerStop();
用于停止定时器。
void StartTimer();
用于启动定时器。
3. 一个例子
#include <stdio.h>
#include "timer.h"
typedef struct Argument{
int a;
int b;
int ret;
}Arg;
//任务1,打印语句
TASK_START(test1, arg)
printf("This is a test1\n");
TASK_END
//任务2,计算arg中两个数的和,打印语句
TASK_START(test2, arg)
Arg *temp = (Arg*)arg;
temp->ret = temp->a + temp->b;
printf("This is a test2\n");
TASK_END
//任务3,打印语句
TASK_START(test3