#ifndef TASK_H #define TASK_H #ifdef __cplusplus extern "C" { #endif #include "stdint.h" #define true 0 #define false (-1) //平台切换相关类型重定义 typedef int64_t TaskStatus_t; typedef uint64_t TaskTime_t; typedef int64_t TaskCnt_t; typedef struct TaskList Task_t; typedef uint64_t (*PlatformTicksFunc_t)(void); typedef void (*Task_Callback_t)(Task_t *task, void *userdata); struct TaskList { Task_t *next; uint8_t enable; TaskCnt_t runcnt; TaskTime_t lasttime; TaskTime_t intervaltime; Task_Callback_t callback; void *userdata; }; /** * @brief 初始化任务模块 * @param TicksFunc: [输入] 时间基准函数指针 * @return TaskStatus_t 返回任务状态 * @example TaskInit(GetPlatformTicks); */ TaskStatus_t TaskInit(PlatformTicksFunc_t TicksFunc); /** * @brief 创建任务 * @param task: [输入/输出] 任务结构体指针 * @param time: [输入] 间隔时间 * @param runcnt: [输入] 执行次数,-1为无限制执行,0为只创建不运行 * @param callback: [输入] 回调函数 * @param userdata: [输入] 用户数据传参 * @return TaskStatus_t 返回任务状态 * @example TaskCreat(&myTask, 100, -1, myCallbackFunc, &myData); */ TaskStatus_t TaskCreat(Task_t *task, TaskTime_t time, TaskCnt_t runcnt, Task_Callback_t callback, void *userdata); /** * @brief 添加任务 * @param task: [输入] 任务结构体指针 * @return TaskStatus_t 返回任务状态 * @example TaskAdd(&myTask); */ TaskStatus_t TaskAdd(Task_t *task); /** * @brief 删除任务 * @param task: [输入] 任务结构体指针 * @return TaskStatus_t 返回任务状态 * @example TaskDel(&myTask); */ TaskStatus_t TaskDel(Task_t *task); /** * @brief 重新开始停止的任务 * @param task: [输入] 任务结构体指针 * @return TaskStatus_t 返回任务状态 * @example TaskStart(&myTask); */ TaskStatus_t TaskStart(Task_t *task); /** * @brief 暂停任务执行 * @param task: [输入] 任务结构体指针 * @return TaskStatus_t 返回任务状态 * @example TaskStop(&myTask); */ TaskStatus_t TaskStop(Task_t *task); /** * @brief 重设任务执行次数 * @param task: [输入] 任务结构体指针 * @param runcnt: [输入] 新的执行次数 * @return TaskStatus_t 返回任务状态 * @example TaskSetCnt(&myTask, 5); */ TaskStatus_t TaskSetCnt(Task_t *task, TaskCnt_t runcnt); /** * @brief 重设任务间隔时间 * @param task: [输入] 任务结构体指针 * @param time: [输入] 新的间隔时间 * @return TaskStatus_t 返回任务状态 * @example TaskSetTime(&myTask, 50); */ TaskStatus_t TaskSetTime(Task_t *task, TaskTime_t time); /** * @brief 任务调度 * @return TaskStatus_t 返回任务状态 * @example TaskRun(); */ TaskStatus_t TaskRun(void); #ifdef __cplusplus } #endif #endif //TASK_H