HW_Lib/lib/task/inc/task.h

115 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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