打印
[ZLG-MCU]

请大家帮我看一下,下面这程序是怎样分别执行3个任务?

[复制链接]
1235|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nicky99|  楼主 | 2008-11-1 08:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
os, IDT, tmp, se, TE
//相关的头文件已包含

bit    sys_TIME;//定时器0  1MS中断标志位

#define   n_real_task 1
#define   n_task 3
typedef   void   (*fct_ptsk)(void);

unchar D_taskNOWR;
unchar D_taskNOW;
unchar C_taskCON[n_task];  

extern       void     TSK_0(void);
extern       void     TSK_1(void);
extern       void     TSK_2(void);

code const fct_ptsk   CT_taskADD[]=
{               
          TSK_0,
          TSK_1,
          TSK_2,        
            };

void main(void)
{
   unchar  i,tmp;
     EA=0;
     WDT_INIT();
     PORT_INIT();
     USART_INIT();  
        
    
       ET0=1;
       TR0=1;
       ES=1; 
       IP0=0X10;
       IP0H=0X10;    
       EA=1;  

  
     D_taskNOWR=0xff;        
     D_taskNOW=n_real_task-1;  
     
     while(1)
       {
       OS_LOOP:
        WDT_RST();
        
        if(sys_TIME)//1ms中断
           {
           sys_TIME=0;
           i=0;
           while(i<n_task)
               {
                if(C_taskCON>0)
                     C_taskCON--;
                i++;
               }
            }
        
        OS_T:
         D_taskNOWR++;
      if(D_taskNOWR==n_real_task)//Y
        {
         D_taskNOWR=0xff;
         D_taskNOW++;
         if(D_taskNOW==n_task)
           {
           D_taskNOWR=0xff;
           D_taskNOW=n_real_task-1;
           }
         else
           {
             tmp=D_taskNOW;
               goto OS_R;
           }
        goto OS_LOOP;
        }
     else
          tmp=D_taskNOWR;

       OS_R:
            if(C_taskCON[tmp]>0)
               goto OS_T;
         else
            (*CT_taskADD[tmp])();

   }
   
 }

void     TSK_0(void)
{

         C_taskCON[0]=1;
         C_taskCON[2]=100;
}
void     TSK_1(void)
{
        C_taskCON[1]=2;
}
void     TSK_2(void)
{
        C_taskCON[2]=1;
}

相关帖子

沙发
ayb_ice| | 2008-11-2 18:24 | 只看该作者

是通过函数指针调用的

使用特权

评论回复
板凳
nicky99|  楼主 | 2008-11-3 10:33 | 只看该作者

是通过函数指针调用,

是通过函数指针调用,但问题是这系统如何分时去调用任务?这是一个小小的操作系统吗??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

126

主题

497

帖子

0

粉丝