wlrt 发表于 2007-12-4 15:42

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

请大家帮我看看这ucosii+lpc213x&nbsp;&nbsp;第二个任务怎么不执行阿&nbsp;<br /><br />&nbsp;&nbsp;我是&nbsp;用周工lpc213x模板,<br /><br />#include&nbsp;&quot;config.h&quot;<br />#include&nbsp;&quot;stdlib.h&quot;<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;TaskStkLengh&nbsp;&nbsp;&nbsp;&nbsp;128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Define&nbsp;the&nbsp;Task0&nbsp;stack&nbsp;length&nbsp;定义用户任务0的堆栈长度<br /><br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Define&nbsp;the&nbsp;Task0&nbsp;stack&nbsp;定义用户任务0的堆栈<br />OS_STK&nbsp;&nbsp;Taskdisp_1&nbsp;;<br />OS_STK&nbsp;&nbsp;Taskdisp_2&nbsp;;<br /><br />void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task0(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//声明Task0&nbsp;任务0<br />void&nbsp;&nbsp;&nbsp;&nbsp;Task1(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//声明Task0&nbsp;任务1<br />void&nbsp;&nbsp;&nbsp;&nbsp;Task2(void&nbsp;*pdata);<br />OS_EVENT&nbsp;*DispSem;<br />OS_EVENT&nbsp;*MsgBox;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;OSInit&nbsp;();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DispSem=OSSemCreate(2);&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(Task0,(void&nbsp;*)0,&TaskStk,&nbsp;2);&nbsp;&nbsp;&nbsp;&nbsp;OSStart&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Task0&nbsp;&nbsp;&nbsp;&nbsp;(void&nbsp;*pdata)<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pdata&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;TargetInit&nbsp;();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />OSTaskCreate(Task1,(void&nbsp;*)0,&Taskdisp_1,3);<br />OSTaskCreate(Task2,(void&nbsp;*)0,&Taskdisp_2,4);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;&nbsp;<br /><br />void&nbsp;Task1&nbsp;(void&nbsp;*pdata)<br />{&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;uint8&nbsp;err;<br />&nbsp;&nbsp;//volatile&nbsp;uint32&nbsp;data=1000000;<br />&nbsp;&nbsp;pdata&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;//OSSemPend(DispSem,0,&err);-------为什么&nbsp;这句如果注释掉任务2无法执行?????<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;disp_1();<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;OSTimeDly(10);<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;Task2&nbsp;(void&nbsp;*pdata)<br />{&nbsp;uint8&nbsp;err;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;pdata=pdata;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;OSSemPend(DispSem,0,&err);<br /><br />&nbsp;&nbsp;&nbsp;disp_2();<br />&nbsp;&nbsp;&nbsp;OSTimeDly(1);<br />&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />好奇怪啊,本来的建立2个信号量,2个任务各获得一个(即文中注释的语句保留),两个任务正常切换,而若是把那句注释掉(即只让任务2等待信号量,任务1无条件执行)怎么任务2总是得不到信号量无法执行呢??<br />&nbsp;&nbsp;请大家帮忙指点一二。。。。<br />&nbsp;<br />&nbsp;<br />

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);<br /><br />OSSemPend(DispSem,0,&err);<br /><br />Task2&nbsp;运行两次后,就不运行.因为其一直处于挂起状态.除非有OSMboxPost出现.
页: [1]
查看完整版本: 请大家帮我看看这ucosii+lpc213x 第二个任务怎么不执行阿