时间触发的嵌入式系统 :
我先给大家了一个程序:这个程序是在PC机上测试过,大家给点意见!
#include "stdio.h" #define TASKmax 5
typedef unsigned long u32;
typedef unsigned int u16;
typedef unsigned char u8;
struct Task
{
void (*Ptask)(void);
u8 delay;
u8 period;
u8 Runme;
};
u8 Task_G;
u8 Task1_time= 10;//10ms
u8 Task2_time= 20;
void task1(void)
{
int i=0;for(i=0;i<2;i++)
{
printf("1\r\n");
}
}
void task2(void )
{
char j=0;for(j=0;j<2;j++)
{
printf("2\r\n");
};
}
u8 TASK_dele(u8 cn){if(task[cn].Ptask ==0)
return 0;
task[cn].Ptask= 0x00;
task[cn].delay= 0;task[cn].period= 0;
task[cn].Runme= 0;
return 1;
}
void Task_tr(void ){
u8 taskIndex;
for(taskIndex=0;taskIndex< TASKmax;taskIndex++)
{
if(task[taskIndex].Runme>0)
{
(*task[taskIndex].Ptask)();
task[taskIndex].Runme--;
}
if(task[taskIndex].period==0)
TASK_dele(taskIndex);
}
}
u8 task_add(void (*function)(),u8 delay,u8 period)
{
u8 dex=0;
while((task[dex].Ptask!=0) && (dex< TASKmax)) dex++;
if(dex==TASKmax)
return 0;
task[dex].Ptask= function;
task[dex].delay= delay;task[dex].period= period;
task[dex].Runme= 1;
return 1;
}
void Task_ref(void )//任务控制{
u8 Task_tran;
Task_tran=Task_G;
switch(Task_tran)
{
case task11: //时间判断
// break;
case task12: //时间判断
//如果到了就到下一个状态
break;
default:break;
}}
void main()
{
//初始化定时器 控制标志位//初始化须要的变量
//增加任务
//while(1);
task_add(task1,10,1);
task_add(task2,30,2);
//Task_tr();定时器 控制标志位
}//以上是系统和基本思想,可以根据自己的程序更改。
http://bbs.eeworld.com.cn/thread-67442-1-1.html