我是 用周工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 [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈<br />OS_STK Taskdisp_1 [TaskStkLengh];<br />OS_STK Taskdisp_2 [TaskStkLengh];<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[TaskStkLengh - 1], 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[TaskStkLengh-1],3);<br /> OSTaskCreate(Task2,(void *)0,&Taskdisp_2[TaskStkLengh-1],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 /> |
|