时间片轮询法:
实时性、并行。
void init();//任务变量初始化
void updaty();//任务更新变量
void run();//任务处理
struct Task_Struct//结构体成员变量
{
char enable_flag;//打开任务标志位
int task_time;//时间变量
char run_flag;//1:执行;0:关闭
}
struct Task_Struct task_struct[3];//该结构体变量需执行3次
void init(void)
{
task_struct[0].enable_flag=1;//打开任务1
task_struct[0].task_time=50;//50毫秒执行一次
task_struct[0].run_flag=0;//置零,关闭该任务1的标志位
task_struct[1].enable_flag=1;
task_struct[1].task_time=100;
task_struct[1].run_flag=0;
task_struct[2].enable_flag=1;
task_struct[2].task_time=5;
task_struct[2].run_flag=0;
}
void updaty(void)
{
for(char i=0;i<3;i++)
{
if(task_struct[i].enable_flag)//当该标志位为1,继续执行。
if(time%task_struct[i].task_time==0)//当定时器time整除该任务时间变量,说明时间到。
task_struct[i].run_flag++;//如果以上两个if都满足,则++为1:执行该任务。
}
}
void run(void)
{
if(task_struct[0].run_flag)//若该标志位为1:执行该任务1。
{
task1();//任务1
task_struct[0].run_flag--;//执行后,则--为0:关闭此任务。
}
if(task_struct[1].run_flag)
{
task2();
task_struct[1].run_flag--;
}
if(task_struct[2].run_flag)
{
task3();
task_struct[2].run_flag--;
}
}