任务按时间片伦实践

eg

while(1)

{

if(task_delay[0]==0)

task1();

if(task_delay[1]==0)

task2();

}

void time0(void) interrupt1

{

for(i=0;i<task_max;i++)

{

if(task_delay[i])

task_delay[i]--;

此结构适用于每个任务时间在10ms以下

要是如18B20初始化那样长的时间可以分割成多个片段就可以了(状态机)

eg

case 0:。。。

flag=1

case 1

flag=2

 

系统按优先级实现

while(1)

{

for(i=0;i<max_task;i++)

{

if(task_delay[i]==0){run(task[i]);break;}

}

}

注意程序中的break!!!就是他使程序可以有优先级

void (* code task[])() = {task0,task1,task2,task3};//获得任务pc指针

void run(void (*ptask)())//指向函数的指针函数

{

(*ptask)();

}

使用时:run(task[i]); 

 

#include
#include
#include
#include
#include
using namespace std;void hello1(){    cout <<"hello1"<
<<"hello22"<
<<"hello333"<
< 3; ++i)    {        if (task_delay[i])        {            task_delay[i] --;        }    }    signal(SIGALRM, timer);   return;}int main(int argc, char *argv[]){    signal(SIGALRM, timer);    struct itimerval value;    value.it_value.tv_sec = 0;    value.it_value.tv_usec = 10000;    value.it_interval.tv_sec = 0;    value.it_interval.tv_usec = 10000;    setitimer(ITIMER_REAL, &value, &value);    while (true)    {        if (! task_delay[0])        {            run(task[0]);            task_delay[0] = 10;        }        else if (! task_delay[1])        {            run(task[1]);            task_delay[1] = 50;        }        else if (! task_delay[2])        {            run(task[2]);            task_delay[2] = 100;        }    }    return 0;}