用44b0跑了UCOS的程序,臭一下 激励自己

[复制链接]
2905|2
 楼主| IC1008 发表于 2007-5-7 09:11 | 显示全部楼层 |阅读模式
ucos, ST, se, TE, AC
/*<br />&nbsp;*&nbsp;File:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.c<br />&nbsp;*<br />&nbsp;*&nbsp;uC/OS&nbsp;Real-time&nbsp;multitasking&nbsp;kernel&nbsp;for&nbsp;the&nbsp;ARM&nbsp;processor.<br />&nbsp;*<br />&nbsp;*&nbsp;This&nbsp;program&nbsp;is&nbsp;an&nbsp;example&nbsp;of&nbsp;using&nbsp;semaphore&nbsp;to<br />&nbsp;*&nbsp;implement&nbsp;task&nbsp;rendevous.<br />&nbsp;*<br />&nbsp;*&nbsp;Created&nbsp;by&nbsp;Marco&nbsp;Graziano&nbsp;(marcog@crl.com).<br />&nbsp;*<br />&nbsp;*/<br /><br />#include&nbsp;&nbsp;&nbsp;&nbsp;&quot;includes.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;uC/OS&nbsp;interface&nbsp;*/<br /><br />/*&nbsp;allocate&nbsp;memory&nbsp;for&nbsp;tasks'&nbsp;stacks&nbsp;*/<br />#ifdef&nbsp;SEMIHOSTED<br />#define&nbsp;STACKSIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SEMIHOSTED_STACK_NEEDS+64)<br />#else<br />#define&nbsp;&nbsp;&nbsp;&nbsp;STACKSIZE&nbsp;&nbsp;&nbsp;&nbsp;128<br />#endif<br />unsigned&nbsp;int&nbsp;Stack1[STACKSIZE];<br />unsigned&nbsp;int&nbsp;Stack2[STACKSIZE];<br />unsigned&nbsp;int&nbsp;Stack3[STACKSIZE];<br /><br />/*&nbsp;semaphores&nbsp;event&nbsp;control&nbsp;blocks&nbsp;*/<br />//OS_EVENT&nbsp;*Sem1;<br />//OS_EVENT&nbsp;*Sem2;<br />//OS_EVENT&nbsp;*Sem3;<br /><br />OS_EVENT&nbsp;&nbsp;&nbsp;&nbsp;*KeyPress;<br />void&nbsp;*KeyMsg[10];<br />/*<br />*&nbsp;Task&nbsp;running&nbsp;at&nbsp;the&nbsp;highest&nbsp;priority.&nbsp;<br />*/<br /><br />void&nbsp;Task1(void&nbsp;*i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;key[5];<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i1,temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;NewKey,OldKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;ARMTargetStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewKey=rPDATG&0xf0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(NewKey!=OldKey)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldKey=NewKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((NewKey&0x10)==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp='a';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((NewKey&0x20)==0)&nbsp;&nbsp;&nbsp;&nbsp;temp='b';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((NewKey&0x40)==0)&nbsp;&nbsp;&nbsp;&nbsp;temp='c';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((NewKey&0x80)==0)&nbsp;&nbsp;&nbsp;&nbsp;temp='d';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;temp=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(temp!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i1=0;i1&lt5;i1++)&nbsp;&nbsp;&nbsp;&nbsp;if(key[i1]==0)&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key[i1]=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSQPost(KeyPress,&(key[i1]));<br />&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;OSTimeDly(20);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//20ms<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;Task2(void&nbsp;*i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;key[5];<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;NewKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewKey=Uart_GetKey();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(NewKey!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i1=0;i1&lt5;i1++)&nbsp;&nbsp;&nbsp;&nbsp;if(key[i1]==0)&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key[i1]=NewKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSQPost(KeyPress,&(key[i1]));&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;OSTimeDly(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;Task3(void&nbsp;*i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;*ip;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;&nbsp;&nbsp;err;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip=OSQPend(KeyPress,0,&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(*ip=='a')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;\nYou&nbsp;Press&nbsp;a!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(*ip=='b')&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;\nYou&nbsp;Press&nbsp;b!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(*ip=='c')&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;\nYou&nbsp;Press&nbsp;c!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(*ip=='d')&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;\nYou&nbsp;Press&nbsp;d!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*ip=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />/*<br />&nbsp;*&nbsp;Main&nbsp;function.<br />&nbsp;*/<br />void&nbsp;Main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;Id1&nbsp;=&nbsp;'1';<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;Id2&nbsp;=&nbsp;'2';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;Id3&nbsp;=&nbsp;'3';<br />&nbsp;&nbsp;&nbsp;&nbsp;Port_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Init(0,57600);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Select(0);&nbsp;//Select&nbsp;UART0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;Uc-OS&nbsp;ii&nbsp;will&nbsp;run&nbsp;at&nbsp;once!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;do&nbsp;target&nbsp;(uHAL&nbsp;based&nbsp;ARM&nbsp;system)&nbsp;initialisation&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ARMTargetInit();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;needed&nbsp;by&nbsp;uC/OS&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;OSInit();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;OSTimeSet(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;create&nbsp;the&nbsp;semaphores<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//Sem1&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;//Sem2&nbsp;=&nbsp;OSSemCreate(1);<br />//Sem3&nbsp;=&nbsp;OSSemCreate(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;create&nbsp;the&nbsp;tasks&nbsp;in&nbsp;uC/OS&nbsp;and&nbsp;assign&nbsp;decreasing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;priority&nbsp;to&nbsp;them&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(Task1,&nbsp;(void&nbsp;*)&Id1,&nbsp;(void&nbsp;*)&Stack1[STACKSIZE&nbsp;-&nbsp;1],&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(Task2,&nbsp;(void&nbsp;*)&Id2,&nbsp;(void&nbsp;*)&Stack2[STACKSIZE&nbsp;-&nbsp;1],&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(Task3,&nbsp;(void&nbsp;*)&Id3,&nbsp;(void&nbsp;*)&Stack3[STACKSIZE&nbsp;-&nbsp;1],&nbsp;3);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Start&nbsp;the&nbsp;(uHAL&nbsp;based&nbsp;ARM&nbsp;system)&nbsp;system&nbsp;running&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//ARMTargetStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyPress=OSQCreate(KeyMsg,10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//创建一个按键的消息队列<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;start&nbsp;the&nbsp;game&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;OSStart();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;never&nbsp;reached&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;main&nbsp;*/<br />
 楼主| IC1008 发表于 2007-5-7 14:53 | 显示全部楼层

说明

两个按键任务&nbsp;一个显示任务<br />按键任务1&nbsp;真实按键<br />按键任务2&nbsp;串口接收<br />显示任务3&nbsp;串口向电脑发送消息<br /><br />显示任务一直等待按键消息队列.<br /><br />所以要创建一个事件指针&nbsp;OS_EVENT&nbsp;&nbsp;&nbsp;&nbsp;*KeyPress;<br />因为是消息队列&nbsp;所以必须还要创建一个消息指针堆栈&nbsp;void&nbsp;*KeyMsg[10];<br />定义事件为消息队列&nbsp;KeyPress=OSQCreate(KeyMsg,10);&nbsp;<br />任务1&nbsp;任务2&nbsp;检测到按键事件,向消息队列添加一个消息&nbsp;OSQPost(KeyPress,&(key[i1]));<br />任务3&nbsp;等待消息队列里面的消息&nbsp;ip=OSQPend(KeyPress,0,&err);使用完消息将消息清零&nbsp;*ip=0;<br />
lufeijian 发表于 2007-5-8 09:35 | 显示全部楼层

不错,学习中~那天也让UCOS在DSP上跑跑啊

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

229

帖子

0

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