[ZLG-ARM] 为什么任务不能调度(附源代码)

[复制链接]
2317|3
 楼主| renwoxing2 发表于 2007-6-4 12:01 | 显示全部楼层 |阅读模式
/****************************************Copyright&nbsp;(c)*******************<br />*&nbsp;功能:LED数码管显示0-F字符<br />*&nbsp;说明:将跳线器JP3、JP4、JP7短接。<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;64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义用户任务堆栈长度<br />#define&nbsp;LED&nbsp;&nbsp;(1&lt&lt24)<br />&nbsp;<br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk&nbsp;[TaskStkLengh];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义用户任务0的堆栈<br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk1&nbsp;[TaskStkLengh];&nbsp;&nbsp;&nbsp;&nbsp;//定义用户任务1的堆栈<br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk2&nbsp;[TaskStkLengh];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义用户任务0的堆栈<br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk3&nbsp;[TaskStkLengh];<br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk4&nbsp;[TaskStkLengh];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义用户任务0的堆栈<br />OS_STK&nbsp;&nbsp;&nbsp;&nbsp;TaskStk5&nbsp;[TaskStkLengh];<br /><br />void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task0(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Task0&nbsp;任务0<br />void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task1(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;<br />//void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task2(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task3(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task4(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Task5(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />OS_EVENT&nbsp;*MyBox;<br />OS_EVENT&nbsp;*MyQueue;<br />void&nbsp;*MyDatQueue[16];<br />INT8U&nbsp;*Data;<br />//INT8U&nbsp;Time=0;<br />/*&nbsp;此表为0--F的字模&nbsp;*/<br />INT8U&nbsp;DISP_TAB[16]&nbsp;=&nbsp;{&nbsp;0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,&nbsp;<br />&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;0x88,0x83,0xC6,0xA1,0x86,0x8E&nbsp;};<br /><br />/****************************************************************************<br />*&nbsp;名称:DelayNS()<br />*&nbsp;功能:长软件延时<br />****************************************************************************/<br />void&nbsp;&nbsp;DelayNS(uint32&nbsp;&nbsp;dly)<br />{&nbsp;&nbsp;uint32&nbsp;&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;for(;&nbsp;dly&gt0;&nbsp;dly--)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt50000;&nbsp;i++);<br />}<br /><br /><br />/****************************************************************************<br />*&nbsp;名称:HC595_SendDat()<br />*&nbsp;功能:向74HC595发送一字节数据<br />*&nbsp;入口参数:*dat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要发送的数据<br />*&nbsp;出口参数:无<br />*&nbsp;说明:发送数据时,高位先发送。<br />****************************************************************************/<br />void&nbsp;&nbsp;HC595_SendDat(INT8U&nbsp;dat)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SPI_CS&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;S0PDR=&nbsp;dat;<br />&nbsp;&nbsp;&nbsp;while((S0PSR&0x80)==0);&nbsp;<br />&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SPI_CS&nbsp;=&nbsp;1,输出显示数据<br />}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;主函数&nbsp;*/<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;&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;&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 />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate&nbsp;(Task0,(void&nbsp;*)0,&nbsp;&TaskStk[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&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;&nbsp;/*任务Task0*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Task0&nbsp;&nbsp;&nbsp;&nbsp;(void&nbsp;*pdata)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pdata&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;Data=DISP_TAB;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate&nbsp;(Task1,(void&nbsp;*)0,&nbsp;&TaskStk1[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;//OSTaskCreate&nbsp;(Task2,(void&nbsp;*)0,&nbsp;&TaskStk2[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate&nbsp;(Task3,(void&nbsp;*)0,&nbsp;&TaskStk3[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;3);<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate&nbsp;(Task4,(void&nbsp;*)0,&nbsp;&TaskStk4[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;4);<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate&nbsp;(Task5,(void&nbsp;*)0,&nbsp;&TaskStk5[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;//MyBox=OSMboxCreate((void&nbsp;*)0);<br />&nbsp;&nbsp;&nbsp;&nbsp;//MyQueue=OSQCreate(&MyDatQueue[0],16);<br />&nbsp;&nbsp;&nbsp;&nbsp;TargetInit&nbsp;();&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&=~LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR|=LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*for(Time=0;Time&lt16;Time++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Data=DISP_TAB[Time];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSMboxPost(MyBox,Data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Time++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//OSQPost(MyQueue,Data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//OSTimeDly(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//HC595_SendDat(DISP_TAB[Time]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET|=LED;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDlyHMSM(0,0,10,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_SendDat(DISP_TAB[10]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*任务Task1*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;Task1&nbsp;&nbsp;(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;//&nbsp;INT8U&nbsp;*Disp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//INT8U&nbsp;err;<br />&nbsp;&nbsp;&nbsp;&nbsp;pdata=pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;Disp=OSMboxPend(MyBox,0,&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR|=LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Disp=OSQPend(MyQueue,2,&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//OSMboxDel(MyBox,OS_DEL_NO_PEND,&err);//没有信号量时删除邮箱&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_SendDat(Disp);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;输出LED显示数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if(Time&gt=10)&nbsp;&nbsp;OSTaskSuspend(OS_PRIO_SELF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DelayNS(40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;延时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//OSTimeDlyHMSM(0,0,1,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDlyResume(0);*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_SendDat(DISP_TAB[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><br /><br /><br /><br /><br />void&nbsp;&nbsp;Task3&nbsp;(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;pdata=pdata;<br />&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_SendDat(DISP_TAB[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;&nbsp;Task4&nbsp;(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;pdata=pdata;<br />&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_SendDat(DISP_TAB[4]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;&nbsp;Task5&nbsp;(void&nbsp;*pdata)<br />{<br />&nbsp;&nbsp;&nbsp;pdata=pdata;<br />&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_SendDat(DISP_TAB[5]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
 楼主| renwoxing2 发表于 2007-6-4 12:08 | 显示全部楼层

继续

在运行的时候,当运行到任务5时,便跳转到空闲任务,之后就出不来了,不知是何原因,还请高手指教。还有,系统延时的时间该怎样计算?好像延时很重要,我试过只开两个任务,当延时时间合适时,任务可以很好的运行,但当我把延时时间改动一下,任务就不能运行了。摸索了几天,还是得不到要领,请高手明示,谢谢
 楼主| renwoxing2 发表于 2007-6-5 11:53 | 显示全部楼层

RE

谁可以帮帮我啊?谢谢啦
 楼主| renwoxing2 发表于 2007-6-5 12:30 | 显示全部楼层

想请问下是不是系统时钟源还要自己初始化的?

想请问下是不是系统时钟源还要自己初始化的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

39

帖子

0

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