将接受的数据发送出去,有丢失

2019-08-16 23:18发布

1、接收到三个数据包,但用串口打印出来只能显示两个。
2、添加后不可以连续接受多个数据包,但可以连续接受单个数据包
void USART3_IRQHandler(void)
{
        u8 inbyte;
        inbyte = USART_ReceiveData(USART3);
       
        if ( sio_rx_buf.len  >= (SIO_BYTE_BUF_MAX - 1) )
        {
                sio_rx_buf.len = 0;
                sio_byte_buf_flush(&sio_rx_buf);
        }
       
        if ( (sio_rx_buf.len == 0 ) && (inbyte != RCP_PKT_PRAMBL)  )
        {
                return;
        }

        sio_byte_buf_enqueue(&sio_rx_buf, inbyte);

        if(sio_rx_buf.len >= (sio_rx_buf.data[4] + RCP_HEADEND_CRC_LEN))
        {
                if(        sio_rx_buf.data[sio_rx_buf.data[4] + RCP_PRAMBL_LEN + RCP_HEADER_LEN] == RCP_PKT_ENDMRK)
                {                       
                        sio_post_received_data(&sio_rx_buf.data[0],sio_rx_buf.len);
                }

        }
}

void sio_post_received_data(u8* data, u8 len)
{

        while(len--)
        {
    while((USART1->SR&0x40)==0);       
        USART_SendData(USART1,*data++);                                                //将接收到的数据发送出去

        }       
        sio_byte_buf_flush(&sio_rx_buf);
}

0条回答

一周热门 更多>