UCOS iii 串口

2019-07-21 05:43发布

void macUSART_INT_FUN(void)
{
OS_ERR   err;
char *   p_mem_blk;

OSIntEnter();                                    
p_mem_blk = OSMemGet((OS_MEM      *)&mem,       (OS_ERR      *)&err);
if ( USART_GetITStatus ( macUSARTx, USART_IT_RXNE ) != RESET )
{
  * p_mem_blk = USART_ReceiveData ( macUSARTx );     
  
  OSTaskQPost ((OS_TCB      *)&AppTaskTestTCB,     
         (void        *)p_mem_blk,            
         (OS_MSG_SIZE  )1,                    
         (OS_OPT       )OS_OPT_POST_FIFO,      
         (OS_ERR      *)&err);               
  
}
  OSIntExit();                                       
}

这是我的串口接收程序  ,每次接收一个直接就发信号出去。我该如何处理 收到一帧数据在发出去呢。我的裸机程序如下:
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
  USART1RxBuff[USART1RxBuffTrail]=(u8)(USART_ReceiveData(USART1));
  USART1RxBuffTrail++;
  USART1RxBuffTrail=USART1RxBuffTrail%MAX_BUSCOM_RX_BUFF;
}
}

void USART1_CheckRx(void)
{
u8 DataTemp;
if(USART1RxBuffHead^USART1RxBuffTrail)
{
  DataTemp=USART1RxBuff[USART1RxBuffHead];
  if (USART1FrameRxIndex == 0)
  {
      if (DataTemp == USART1_FRAME_HEAD)
   {
    USART1FrameRxBuff[USART1FrameRxIndex]=DataTemp;
    USART1FrameRxIndex++;
   }
  }
  else if(USART1FrameRxIndex == 1)
  {
   if(DataTemp<=MAX_BUSCOM_FRAME_RX_LEN)
   {
    USART1FrameRxBuff[USART1FrameRxIndex]=DataTemp;   
    USART1FrameRxIndex++;
   }
   else
   {
    USART1FrameRxIndex=0;
   }
  }
  else
  {
   if(USART1FrameRxIndex == (USART1FrameRxBuff[1]+1))
   {
    if(DataTemp==BusCom_GetCrc(&USART1FrameRxBuff[0],USART1FrameRxBuff[1]+1))
    {  
     USART1CountKey = USART1FrameRxBuff[2];
          USART_KEY_CTRL();
    }
    USART1FrameRxIndex=0;
   }
   else
   {
    USART1FrameRxBuff[USART1FrameRxIndex]=DataTemp;   
    USART1FrameRxIndex++;
   }
  }  
  USART1RxBuffHead++;
  USART1RxBuffHead=USART1RxBuffHead%MAX_BUSCOM_RX_BUFF;
}
}
  现在问题来了, 要是在UCOS 中断里面处理这段程序的话,时间太长, 肯定不行,如果每次都调用的话我又觉得不是是个很好的方案, 请问下有那位可以帮我向各解决方案吗~! 我对UCOS 不是很熟悉,谢谢


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
1208
1楼-- · 2019-07-21 08:04
写成一个任务处理试下看看
零一三南宫南
2楼-- · 2019-07-21 11:06
 精彩回答 2  元偷偷看……
jiangwei2780678
3楼-- · 2019-07-21 12:42
做个状态机
拿着扁担去跳水
4楼-- · 2019-07-21 16:19
使用USART+DMA啊
yklstudent
5楼-- · 2019-07-21 18:53
USART Idel中断+DMA啊

一周热门 更多>