时间触发和状态机思想的嵌入式系统 分析都给大家传上去了

今天我给大家讲一下:
时间触发的嵌入式系统 :

我先给大家了一个程序:这个程序是在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;      

  };


struct Task task[TASKmax];
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值