tian_zi 发表于 2014-12-16 14:24:27

求教ucos官方的例程开任务接收串口数据为什么没有丢失

官网的例程是在接收中断发送一个接收数据的信号量,然后在任务等待信号量。信号量来临开始接收数据到缓存,直到接收到0x0d或0x0a结束。我现在在接收任务后加延时100毫秒OSTimeDlyHSM(0,0,0,100);但是串口依然可以连续接收到以0x0d 0x0a的字符串数据。实际上接收任务中接收数据后已经关掉串口接收中断,应该等下次任务调度再次开启串口接收中断然后等待串口中断发送过来的信号量,但是这样子的100ms串口数据早就丢掉了,怎么还能接收正常?

//串口单字节接收数据函数
CPU_INT08U BSP_Ser_RdByteUnlocked(void)
{
        CPU_INT08U rx_byte;
        USART_ITConfig(USART3, USART_IT_RXNE,ENABLE);
        BSP_OS_SemWait(&BSP_SerRxWait,0);
        USART_ITConfig(USART3, USART_IT_RXNE,DISABLE);
        rx_byte = BSP_SerRxData;
}

//串口字符串接收数据函数
CPU_INT08U BSP_Ser_Rdstr(INT8U *p_str, INT16U len)
{
//连续接收到0x0d 0x0a接收的字符串数据
}

//串口接收中断
void BSP_Ser_ISR_Handler(void)
{
        if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET)
        {
                BSP_SerRxData=USART_ReceiveData(USART3)&0xFF;
                USART_ClearITPendingBit(USAR3,USART_IT_RXNE);
                BSP_OS_SemPost(&BSP_SerRxWait);
        }
}

//ucos任务
void apptask(void *p_arg)
{
        BSP_Ser_Rdstr(rev, 1000);//接收字符串
        OSTimeDlyHSM(0,0,0,100);
}
页: [1]
查看完整版本: 求教ucos官方的例程开任务接收串口数据为什么没有丢失