任务按时间片伦实践
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;}