打印

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

[复制链接]
1979|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

粉丝