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 不是很熟悉,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>