串口数据接收过快时,检查包头校验位的代码就会报错,发慢一地就不会

2019-07-21 00:39发布

可能两条数据间隔太短,串口一次把多条当一条处理了,轻问各位大佬有什么办法解决 检验的 检验的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
28条回答
yun1003
1楼-- · 2019-07-24 08:30
开两个缓存接收数据,只要有1个缓冲区接收到了一帧数据,就换另一个去缓存,把已经接收到的数据及时处理掉,然后等待数据接收
余怡帆℡
2楼-- · 2019-07-24 12:21
[mw_shl_code=c,true]void Uart2Process(void)
{
        u8 buff[512];                        /*Need Modify*/
        int buffLen  = 0;
        int frameLen = 0;
        int i;

        buffLen = UART_Read(DEV_UART2, &buff[frameLen], sizeof(buff));
               
        //printf("zzzzzzzzzzzzz");
        if(buffLen != 0)
        {
                frameLen += buffLen;
                if( frameLen > sizeof( buff ))
                {       
                        buffLen  = 0;
                        frameLen = 0;
                        printf("VVVVVVVVVVVVVV");
                }

                for(i = 0;i < frameLen;i++)
                {
                               
                        if((buff== FRAME_COMM_START) && (buff[i+8] == FRAME_COMM_START))
                                {
                                        if(0 != appCommRevDataCheck(&buff,frameLen-i))
                                        {
                                                printf("QQQQQQQQQQQQ");
                                                continue;
                                        }
                                        else
                                        {
                                                appCommRevDataDeal(buff[1],&buff,frameLen-i);
                                                buffLen  = 0;
                                                frameLen = 0;
                                        }
                                }
                }
        }[/mw_shl_code]
余怡帆℡
3楼-- · 2019-07-24 12:48
余怡帆℡ 发表于 2019-5-28 17:29
[mw_shl_code=c,true]void Uart2Process(void)
{
        u8 buff[512];                        /*Need Modify*/

改成这样解析不报错了,但是还是会卡顿,就是收几条才会有应答
余怡帆℡
4楼-- · 2019-07-24 15:10
谢谢各位的帮助,不是一次处理了多条数据。是处理的一条不完整数据报的错,

一周热门 更多>