请大家帮我看看这ucosii+lpc213x 第二个任务怎么不执行阿
请大家帮我看看这ucosii+lpc213x 第二个任务怎么不执行阿 <br /><br /> 我是 用周工lpc213x模板,<br /><br />#include "config.h"<br />#include "stdlib.h"<br /><br />#define TaskStkLengh 128 //Define the Task0 stack length 定义用户任务0的堆栈长度<br /><br />OS_STK TaskStk ; //Define the Task0 stack 定义用户任务0的堆栈<br />OS_STK Taskdisp_1 ;<br />OS_STK Taskdisp_2 ;<br /><br />void Task0(void *pdata); //声明Task0 任务0<br />void Task1(void *pdata); //声明Task0 任务1<br />void Task2(void *pdata);<br />OS_EVENT *DispSem;<br />OS_EVENT *MsgBox;<br /><br /> int main (void)<br />{<br /> OSInit (); <br /> DispSem=OSSemCreate(2); <br /><br /> OSTaskCreate(Task0,(void *)0,&TaskStk, 2); OSStart ();<br /> return 0; <br />}<br /><br /> void Task0 (void *pdata)<br />{ <br /> pdata = pdata;<br /> TargetInit ();<br /> <br />OSTaskCreate(Task1,(void *)0,&Taskdisp_1,3);<br />OSTaskCreate(Task2,(void *)0,&Taskdisp_2,4);<br /> <br /> <br /> while (1)<br /> { <br /> <br /> OSTimeDly(10);<br /> <br /> }<br />}<br /> <br /><br />void Task1 (void *pdata)<br />{ <br /> <br /> uint8 err;<br /> //volatile uint32 data=1000000;<br /> pdata = pdata;<br /> while(1)<br /> {<br /> <br /> //OSSemPend(DispSem,0,&err);-------为什么 这句如果注释掉任务2无法执行?????<br /> <br /> disp_1();<br /> <br /> <br /> OSTimeDly(10);<br /> }<br />}<br /><br /><br />void Task2 (void *pdata)<br />{ uint8 err;<br /> <br /> pdata=pdata;<br /> <br /> while(1)<br /> {<br /> OSSemPend(DispSem,0,&err);<br /><br /> disp_2();<br /> OSTimeDly(1);<br /> }<br /><br />}<br /><br />好奇怪啊,本来的建立2个信号量,2个任务各获得一个(即文中注释的语句保留),两个任务正常切换,而若是把那句注释掉(即只让任务2等待信号量,任务1无条件执行)怎么任务2总是得不到信号量无法执行呢??<br /> 请大家帮忙指点一二。。。。<br /> <br /> <br />信号量要获取也要释放,你确定没写错?
仔细看看函数说明吧
DispSem=OSSemCreate(2);
当然不运行,DispSem=OSSemCreate(2);<br /><br />OSSemPend(DispSem,0,&err);<br /><br />Task2 运行两次后,就不运行.因为其一直处于挂起状态.除非有OSMboxPost出现.
页:
[1]