[ZLG-ARM] ucossii的全局变量问题

[复制链接]
 楼主| gangji 发表于 2007-1-9 11:29 | 显示全部楼层 |阅读模式
请问大家:我用的是LPC2210+UCOSII&nbsp;,我想设置一个全局变量,想在一个任务和串口中断服务程序中共享这个变量,该如何定义?<br />我是这么定义的:<br /><br />在主文件Test.c的开始定义一个全局变量&nbsp;&nbsp;volatile&nbsp;uint8&nbsp;cRcvEnter_flag=0;<br />在某个任务中,做如下处理<br />void&nbsp;task0(void&nbsp;*pdata)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;while(cRcvEnter_flag==1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;......<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />在uart.c文件的开始<br />extern&nbsp;volatile&nbsp;uint8&nbsp;cRcvEnter_flag;<br />在串口中断服务程序中:<br />void&nbsp;UART1_Exception(void)<br />{<br />&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;if(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;cRcvEnter_flag=1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;.......<br />&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />}<br /><br /><br />问题:如果我不使用cRcvEnter_flag这个变量,按串口中断服务程序是可以进入的,而一旦用了这个变量,连串口中断都进不去了,为什么那?<br />
zyc32 发表于 2007-1-11 09:54 | 显示全部楼层

ucossii的全局变量问题

可能是进入中断后陷入死循环,没有返回
xkleee 发表于 2007-1-11 10:14 | 显示全部楼层

我传一个UART给你看看

/********************************************************************************<br />*<br />*&nbsp;文件名:uart0.c<br />*<br />*&nbsp;功能:基于UC/OS-II操作系统串口驱动<br />*<br />*编写人:overfly<br />*<br />*日期:06/12/29<br />*<br />*版本:V2.0<br />*<br />*说明:由于水鸟水平有限,有些细节尚未考虑<br />********************************************************************************/<br /><br />#define&nbsp;IN_UART0<br />#include&nbsp;&quot;config.h&quot;<br /><br />/********************************************************************************<br />*<br />*&nbsp;名称:UART0Init()<br />*<br />*&nbsp;功能:初始化UART0<br />*<br />*&nbsp;入口参数:bps&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_lengh&nbsp;&nbsp;&nbsp;字符长度<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop_bit_num&nbsp;&nbsp;&nbsp;停止位个数<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_mode&nbsp;&nbsp;奇偶校验类型<br />*<br />*&nbsp;出口参数:&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;初始化失败<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;初始化成功<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemCreate,OSSemPost<br />*<br />********************************************************************************/<br /><br />&nbsp;<br />INT8U&nbsp;UART0Init(INT32U&nbsp;bps,INT8U&nbsp;data_lengh,INT8U&nbsp;stop_bit_num,INT8U&nbsp;check_mode)<br />{<br />&nbsp;&nbsp;INT32U&nbsp;Fdiv;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;(PINSEL0&nbsp;&&nbsp;0xfffffff0)&nbsp;|&nbsp;0x05;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;选择管脚为UART0&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x80;&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;Fdiv&nbsp;=&nbsp;(Fpclk&nbsp;/&nbsp;16)&nbsp;/&nbsp;bps;&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;U0DLM&nbsp;=&nbsp;Fdiv&nbsp;/&nbsp;256;&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;U0DLL&nbsp;=&nbsp;Fdiv&nbsp;%&nbsp;256;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(data_lengh==5)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=U0LCR|0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(data_lengh==6)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=U0LCR|0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(data_lengh==7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=U0LCR|0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(data_lengh==8)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=U0LCR|0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;//选择失败<br />&nbsp;&nbsp;&nbsp;&nbsp;if(stop_bit_num==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=U0LCR|0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(stop_bit_num==2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=U0LCR|0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(check_mode==0)&nbsp;//<br />&nbsp;&nbsp;U0LCR=U0LCR|0x00;<br />&nbsp;else&nbsp;if(check_mode==1)//ji<br />&nbsp;&nbsp;U0LCR=U0LCR|0x08;<br />&nbsp;else&nbsp;if(check_mode==2)<br />&nbsp;&nbsp;U0LCR=U0LCR|0x18;//ou<br />&nbsp;else&nbsp;<br />&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;U0LCR=U0LCR&0x7f;//固定波特率<br />&nbsp;U0FCR=0x87;//8BYTE&nbsp;85<br />&nbsp;&nbsp;&nbsp;&nbsp;U0IER=0x00;//发送中断<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ReMsgQeue=OSQCreate(&MsgQeueTb[0],20);<br />&nbsp;&nbsp;&nbsp;UART0SendFree=OSSemCreate(0);//建立空闲信号量<br />&nbsp;&nbsp;&nbsp;UART0SendEnd=OSSemCreate(0);//建立发送结束信号量<br />&nbsp;&nbsp;//&nbsp;UART0SendContinue=OSSemCreate(0);//数据尚未发送完毕,继续发送<br />&nbsp;&nbsp;&nbsp;OSSemPost(UART0SendFree);//发送空闲信号<br />&nbsp;&nbsp;&nbsp;return&nbsp;1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />/********************************************************************************<br />*<br />*&nbsp;名称:&nbsp;void&nbsp;UART0SendData(INT8U&nbsp;*dat,INT8U&nbsp;nbyte)<br />*<br />*&nbsp;功能:发送8byte&nbsp;数据<br />*<br />*&nbsp;入口参数:*dat&nbsp;发送的数据存储位置<br />*&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nbyte&nbsp;发送的字节数<br />*<br />*&nbsp;出口参数:&nbsp;无<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemPend,OSSemPost<br />*<br />********************************************************************************/<br /><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;void&nbsp;UART0SendData(INT8U&nbsp;*dat,INT8U&nbsp;nbyte)//nbyte&lt=16<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;INT8U&nbsp;err,i;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;OSSemPend(UART0SendFree,0,&err);//判断发送器是否为空<br />&nbsp;&nbsp;&nbsp;U0IER=U0IER|0x02;//开中断<br />&nbsp;&nbsp;&nbsp;for(i=0;i&ltnbyte;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;U0THR=*(dat+i);<br />&nbsp;&nbsp;&nbsp;//UART0SendByte=nbyte;//已发送nbyte&nbsp;<br />&nbsp;&nbsp;&nbsp;OSSemPend(UART0SendEnd,0,&err);//等待发送完毕<br />&nbsp;&nbsp;&nbsp;OSSemPost(UART0SendFree);//发送器空闲<br />&nbsp;&nbsp;&nbsp;U0IER=U0IER&~0x02;//禁止发送中断<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />/********************************************************************************<br />*<br />*&nbsp;名称:&nbsp;&nbsp;INT8U&nbsp;UART0ReadData(INT8U&nbsp;*ReceDat)<br />*<br />*&nbsp;功能:读取串口数据<br />*<br />*&nbsp;入口参数:*ReceDat&nbsp;接收数据存储位置<br />*&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UART0SendByte&nbsp;从串口读取数据的个数(一定是4N个数据,N&gt0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*&nbsp;*<br />*&nbsp;出口参数:&nbsp;1&nbsp;&nbsp;读取成功<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemPend<br />*<br />********************************************************************************/<br />&nbsp;&nbsp;void&nbsp;UART0ReadData(INT8U&nbsp;*ReceDat,INT8U&nbsp;UART0SendByte)//读取串口数据<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;INT8U&nbsp;i,err;<br />&nbsp;&nbsp;&nbsp;INT32U&nbsp;rec_data;<br />&nbsp;&nbsp;&nbsp;U0IER=U0IER|0x01;//允许接收中断<br />&nbsp;&nbsp;&nbsp;for(i=0;i&lt(UART0SendByte/4);i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;rec_data=(INT32U)(INT32U&nbsp;*)OSQPend(ReMsgQeue,0,&err);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(err=0;err&lt4;err++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReceDat[4*i+3-err]=(INT8U)(rec_data&0xff);//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rec_data&gt&gt=8;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;U0IER=U0IER&~0x01;//关闭接收中断<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;/********************************************************************************<br />*<br />*&nbsp;名称:&nbsp;&nbsp;void&nbsp;UART0_Exception(void)<br />*<br />*&nbsp;功能:IRQ中断<br />*<br />*&nbsp;入口参数:无<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*<br />*&nbsp;出口参数:&nbsp;无<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemPost,OSQPost,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL<br />*<br />********************************************************************************/<br />&nbsp;&nbsp;void&nbsp;UART0_Exception(void)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;INT8U&nbsp;IIR,i,temp;<br />&nbsp;&nbsp;&nbsp;INT32U&nbsp;Tmp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;OS_ENTER_CRITICAL();<br />&nbsp;&nbsp;&nbsp;VICVectAddr=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(((IIR&nbsp;=&nbsp;U0IIR)&nbsp;&&nbsp;0x01)&nbsp;==&nbsp;0)<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;&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;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(IIR&nbsp;&&nbsp;0x0f)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x02:&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSSemPost(UART0SendEnd);&nbsp;&nbsp;&nbsp;//&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x04:&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=U0IIR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp=(Tmp&lt&lt8)|U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSQPost(ReMsgQeue,(void&nbsp;*)Tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp=(Tmp&lt&lt8)|U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSQPost(ReMsgQeue,(void&nbsp;*)Tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x06:&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;U0LSR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0c:&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=U0IIR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp=(Tmp&lt&lt8)|U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSQPost(ReMsgQeue,(void&nbsp;*)Tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp=(Tmp&lt&lt8)|U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSQPost(ReMsgQeue,(void&nbsp;*)Tmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;OS_EXIT_CRITICAL();<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;<br /><br />/********************************************************************************<br />*<br />*&nbsp;文件名:uart0.h<br />*<br />*&nbsp;功能:基于UC/OS-II操作系统串口驱动<br />*<br />*编写人:overfly<br />*<br />*日期:06/12/29<br />*<br />*版本:V2.0<br />*<br />*说明:由于水鸟水平有限,有些细节尚未考虑<br />********************************************************************************/<br /><br /><br />#ifdef&nbsp;IN_UART0<br />&nbsp;OS_EVENT&nbsp;&nbsp;*UART0SendFree;//发送器空闲信号<br />&nbsp;OS_EVENT&nbsp;&nbsp;*UART0SendEnd;//发送结束信号<br />&nbsp;OS_EVENT&nbsp;&nbsp;*UART0SendContinue;//<br />&nbsp;OS_EVENT&nbsp;&nbsp;*ReMsgQeue;//定义消息队列<br />&nbsp;void&nbsp;&nbsp;*MsgQeueTb[20];//定义消息队列数组<br />&nbsp;#endif<br />&nbsp;<br />&nbsp;#ifndef&nbsp;IN_UART0<br />/********************************************************************************<br />*<br />*&nbsp;名称:UART0Init()<br />*<br />*&nbsp;功能:初始化UART0<br />*<br />*&nbsp;入口参数:bps&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_lengh&nbsp;&nbsp;&nbsp;字符长度<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop_bit_num&nbsp;&nbsp;&nbsp;停止位个数<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_mode&nbsp;&nbsp;奇偶校验类型<br />*<br />*&nbsp;出口参数:&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;初始化失败<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;初始化成功<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemCreate,OSSemPost<br />*<br />********************************************************************************/<br /><br />extern&nbsp;&nbsp;INT8U&nbsp;UART0Init(INT32U&nbsp;bps,INT8U&nbsp;data_lengh,INT8U&nbsp;stop_bit_num,INT8U&nbsp;check_mode);<br />&nbsp;&nbsp;<br />/********************************************************************************<br />*<br />*&nbsp;名称:&nbsp;void&nbsp;UART0SendData(INT8U&nbsp;*dat,INT8U&nbsp;nbyte)<br />*<br />*&nbsp;功能:发送8byte&nbsp;数据<br />*<br />*&nbsp;入口参数:*dat&nbsp;发送的数据存储位置<br />*&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nbyte&nbsp;发送的字节数<br />*<br />*&nbsp;出口参数:&nbsp;无<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemPend,OSSemPost<br />*<br />********************************************************************************/<br /><br />extern&nbsp;&nbsp;&nbsp;void&nbsp;UART0SendData(INT8U&nbsp;*dat,INT8U&nbsp;nbyte);<br />&nbsp;/********************************************************************************<br />*<br />*&nbsp;名称:&nbsp;&nbsp;void&nbsp;UART0_Exception(void)<br />*<br />*&nbsp;功能:IRQ中断<br />*<br />*&nbsp;入口参数:无<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*<br />*&nbsp;出口参数:&nbsp;无<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemPost,OSQPost,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL<br />*<br />********************************************************************************/<br />extern&nbsp;&nbsp;&nbsp;void&nbsp;UART0_Exception(void);<br />/********************************************************************************<br />*<br />*&nbsp;名称:&nbsp;&nbsp;INT8U&nbsp;UART0ReadData(INT8U&nbsp;*ReceDat)<br />*<br />*&nbsp;功能:读取串口数据<br />*<br />*&nbsp;入口参数:*ReceDat&nbsp;接收数据存储位置<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />*<br />*&nbsp;出口参数:&nbsp;1&nbsp;&nbsp;读取成功<br />*<br />*&nbsp;全局变量:&nbsp;无<br />*<br />*&nbsp;调用模块:&nbsp;OSSemPend<br />*<br />********************************************************************************/<br />extern&nbsp;INT8U&nbsp;UART0ReadData(INT8U&nbsp;*ReceDat,INT8U&nbsp;UART0SendByte);<br />#endif<br /><br />main.c<br /><br /><br />#include&nbsp;&quot;config.h&quot;<br />#include&nbsp;&quot;stdlib.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />#define&nbsp;TaskStkLengh&nbsp;64&nbsp;&nbsp;&nbsp;//Define&nbsp;the&nbsp;Task0&nbsp;stack&nbsp;length&nbsp;定义用户任务0的堆栈长度<br /><br />&nbsp;<br />OS_STK&nbsp;Task0Stk&nbsp;[TaskStkLengh];&nbsp;&nbsp;//Define&nbsp;the&nbsp;Task0&nbsp;stack&nbsp;定义用户任务0的堆栈<br />OS_STK&nbsp;Task1Stk&nbsp;[TaskStkLengh];<br /><br />INT8U&nbsp;data_buffer[16];<br />void&nbsp;&nbsp;Task0(void&nbsp;*pdata);&nbsp;&nbsp;&nbsp;//Task0&nbsp;任务0<br />void&nbsp;&nbsp;Task1(void&nbsp;*pdata);&nbsp;<br /><br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;<br />&nbsp;OSInit&nbsp;();&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;OSTaskCreate&nbsp;(Task0,(void&nbsp;*)0,&nbsp;&Task0Stk[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;2);&nbsp;//任务2:UART&nbsp;<br />&nbsp;OSTaskCreate&nbsp;(Task1,(void&nbsp;*)0,&nbsp;&Task1Stk[TaskStkLengh&nbsp;-&nbsp;1],&nbsp;4);&nbsp;<br />&nbsp;OSStart&nbsp;();<br />&nbsp;<br />&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;Task0(void&nbsp;*pdata)<br />{<br />&nbsp;pdata=pdata;<br />&nbsp;TargetInit();<br />&nbsp;UART0Init(115200,8,1,0);<br />&nbsp;while(1)<br />&nbsp;{<br />&nbsp;&nbsp;UART0ReadData(data_buffer,16);<br />&nbsp;&nbsp;UART0SendData(data_buffer,16);<br />&nbsp;&nbsp;OSTimeDly(20);<br />&nbsp;}<br />}<br /><br />void&nbsp;Task1(void&nbsp;*pdata)<br />{<br />&nbsp;pdata=pdata;<br />&nbsp;while(1)<br />&nbsp;{<br />&nbsp;&nbsp;OSTimeDly(20);<br />&nbsp;}<br />}<br />
lshbull 发表于 2007-1-11 14:18 | 显示全部楼层

不错

  
xkleee 发表于 2007-1-12 19:05 | 显示全部楼层

嘿嘿

怎么没人顶呢,我再顶一下.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

20

帖子

0

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