时间调度的架构

来源:互联网 发布:全志科技 知乎 编辑:程序博客网 时间:2024/05/17 02:32

1.设计一个结构体:

代码:

// 任务结构

typedef struct _TASK_COMPONENTS

{

uint8 Run;                 // 程序运行标记:0-不运行,1运行uint8 Timer;              // 计时器uint8 ItvTime;              // 任务运行间隔时间void (*TaskHook)(void);    // 要运行的任务函数

} TASK_COMPONENTS; // 任务定义

这个结构体的设计非常重要,一个用4个参数,注释说的非常详细,这里不在描述。

  1. 任务运行标志出来,此函数就相当于中断服务函数,需要在定时器的中断服务函数中调用此函数,每隔TaskComps[i].Timer时间执行一次对应的函数。这里独立出来,并于移植和理解。

代码:

void TaskRemarks(void)

{

uint8 i;for (i=0; i逐个任务时间处理{     if (TaskComps[i].Timer)          // 时间不为0    {        TaskComps[i].Timer--;         // 减去一个节拍        if (TaskComps[i].Timer == 0)       // 时间减完了        {             TaskComps[i].Timer = TaskComps[i].ItvTime;       // 恢复计时器值,重新开始计时             TaskComps[i].Run = 1;           // 任务可以运行        }    }

}

}

大家认真对比一下次函数,和上面定时复用的函数是不是一样的呢?

  1. 任务处理

代码:

void TaskProcess(void)

{

uint8 i;for (i=0; i逐个任务时间处理{     if (TaskComps[i].Run)           // 时间不为0    {         TaskComps[i].TaskHook();         // 运行任务         TaskComps[i].Run = 0;          // 标志清0    }}  

}

此函数就是判断什么时候该执行那一个任务了,实现任务的管理操作,应用者只需要在main()函数中调用此函数就可以了,

并不需要去分别调用和处理任务函数。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

到此,一个时间片轮询应用程序的架构就建好了,

简单吧?此架构只需要两个函数,一个结构体

本文转载于他人,感谢作者

原创粉丝点击