在ucos下建立的一个任务处理串口中断的数据,将串口中断的数据通过串口发回给电脑。
串口中断主要接受电脑发来的数据,数据长度在40个字节以下,波特率为115200。
在app.c中定义了一个全局数组DataBuffer[40],串口中断中外部引用这个数组,将串口接收到的数据拷贝到DataBuffer中,然后置位Data_Flag说明接收到全部数据。
然后在任务中循环查询Data_Flag这个标识,如果置位了就将数据放入放松缓冲区,开始发送。
void USART1_IRQHandler(void)
{
u8 tmp;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
tmp = USART_ReceiveData(USART1);
Rxbuffer[Rxcount++]=tmp;
}
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_TXE);
}
if(Rxcount>0x20)
{
for(int i=0;i<40;i++)
{
DataBuffer=Rxbuffer;
}
DataCount=Rxcount;
Data_Flag=1;
if(Rxbuffer[0]==0xFF)
{
switch(Rxbuffer[1])
{
case 0xEE:
if(Rxbuffer[2]==0x55)
{
AutoRun_Flag=1;
}
default: break;
}
}
}
for(tmp=0;tmp<40;tmp++) //清空数据缓冲区,等待下一次接收
Rxbuffer[tmp]=0x00;
Rxcount=0x00;
}
}
static void AppTaskKbd (void *p_arg)
{
INT8U tmp=0;
(void)p_arg;
while(DEF_TRUE)
{
if(Data_Flag==1)
{
Data_Flag=0;
USART1_Printf(Data_Buffer,DataCount);
}
}
}
现在的问题是串口中断接收到数据后,任务里面发送不了数据。
试了在串口中断里面手动填充8个数据,任务里面还是发送不了。如果在任务里面手动填充数据,就能发送。感觉好像是Data_Buffer这个全局数组不能由串口填充,两边不能共享。
求大神解答
|