请大家帮我看看这ucosii+lpc213x 第二个任务怎么不执行阿

[复制链接]
 楼主| wlrt 发表于 2007-12-4 15:42 | 显示全部楼层 |阅读模式
请大家帮我看看这ucosii+lpc213x  第二个任务怎么不执行阿 

  我是 用周工lpc213x模板,

#include "config.h"
#include "stdlib.h"

#define    TaskStkLengh    128            //Define the Task0 stack length 定义用户任务0的堆栈长度

OS_STK    TaskStk [TaskStkLengh];        //Define the Task0 stack 定义用户任务0的堆栈
OS_STK  Taskdisp_1 [TaskStkLengh];
OS_STK  Taskdisp_2 [TaskStkLengh];

void     Task0(void *pdata);        //声明Task0 任务0
void    Task1(void *pdata);         //声明Task0 任务1
void    Task2(void *pdata);
OS_EVENT *DispSem;
OS_EVENT *MsgBox;

        int main (void)
{
    OSInit ();    
    DispSem=OSSemCreate(2);    

    OSTaskCreate(Task0,(void *)0,&TaskStk[TaskStkLengh - 1], 2);    OSStart ();
    return 0;                                                            
}

        void Task0    (void *pdata)
{   
    pdata = pdata;
    TargetInit ();
    
OSTaskCreate(Task1,(void *)0,&Taskdisp_1[TaskStkLengh-1],3);
OSTaskCreate(Task2,(void *)0,&Taskdisp_2[TaskStkLengh-1],4);
  
  
    while (1)
    { 
    
      OSTimeDly(10);
    
    }
}
   

void Task1 (void *pdata)

  
  uint8 err;
  //volatile uint32 data=1000000;
  pdata = pdata;
   while(1)
  {
   
   //OSSemPend(DispSem,0,&err);-------为什么 这句如果注释掉任务2无法执行?????
  
   disp_1();
  
    
   OSTimeDly(10);
   }
}


void Task2 (void *pdata)
{ uint8 err;
  
  pdata=pdata;
  
   while(1)
  {
   OSSemPend(DispSem,0,&err);

   disp_2();
   OSTimeDly(1);
   }

}

好奇怪啊,本来的建立2个信号量,2个任务各获得一个(即文中注释的语句保留),两个任务正常切换,而若是把那句注释掉(即只让任务2等待信号量,任务1无条件执行)怎么任务2总是得不到信号量无法执行呢??
  请大家帮忙指点一二。。。。
 
 
gouki_s 发表于 2007-12-4 21:19 | 显示全部楼层

信号量要获取也要释放,你确定没写错?

wswh2o 发表于 2007-12-6 17:06 | 显示全部楼层

仔细看看函数说明吧

bxb_lhj 发表于 2007-12-11 14:29 | 显示全部楼层

DispSem=OSSemCreate(2);

当然不运行,DispSem=OSSemCreate(2);

OSSemPend(DispSem,0,&err);

Task2 运行两次后,就不运行.因为其一直处于挂起状态.除非有OSMboxPost出现.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

20

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部