一、前言
为了方便理解和查阅本人所需的知识,在此做笔记。知识点来源书本与网络,如有侵权,联系删除。
二、框架
1.任务结构
typedef struct _TASK_COMPONENTS
{
uint8 Run; // 程序运行标记:0-不运行,1运行
uint8 Timer; // 计时器
uint8 *ItvTime; // 任务运行间隔时间
void (*TaskHook)(void); // 要运行的任务函数
} TASK_COMPONENTS; // 任务定义
2.任务运行标志出来,此函数就相当于中断服务函数
void TaskRemarks(void)
{
uint8 i;
for (i = 0; i < TASK_NUM; i++) // 逐个任务时间处理
{
if (TaskComps[i].Timer) // 时间不为0
{
TaskComps[i].Timer--; // 减去一个节拍
if (TaskComps[i].Timer == 0) // 时间减完了
{
TaskComps[i].Timer = *TaskComps[i].ItvTime; // 恢复计时器值,从新下一次
TaskComps[i].Run = 1; // 任务可以运行
}
}
}
}
3.任务处理
void TaskProcess(void)
{
uint8 i;
for (i = 0; i < TASK_NUM; i++) // 逐个任务时间处理
{
if (TaskComps[i].Run) // 时间不为0
{
if(NULL != TaskComps[i].TaskHook)
{
TaskComps[i].TaskHook(); // 运行任务
}
TaskComps[i].Run = 0; // 标志清0
}
}
}
标签:TASK,轮询,uint8,Timer,TaskComps,任务,时间,void
From: https://www.cnblogs.com/DW-Web/p/16898333.html