找回密码
 立即注册
收起左侧

串口接收数据不完整

1
回复
7949
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2017-5-3 22:12:00 显示全部楼层 |阅读模式
2Qter豆
void CObject1::serialReceived(){    QByteArray serialdata;    serialdata = serial->readAll();    char *data = serialdata.data();    int length = serialdata.size();    int i;
    if(data[0] == '\x88')    {        switch(data[1])        {        case('\xA1'):        {            numData = (unsigned char)data[2] / 4;            break;        }        case('\xA2'):        {            numData = (unsigned char)data[2] / 4;            break;        }        default:        {            return;        }        }    }    else if(!finished)    {
    }    else    {        return;    }传输的是一个16位的数据包,帧头0x88,指令位0xA1,数据长度位0x0C,之前用有线传输可以工作。换成无线传输之后可能由于不能一次读取完整的数据包,只有偶尔能显示一个数。想把串口接收写成有限状态机的形式不知能否解决。求大神支招。

回复

使用道具 举报

累计签到:104 天
连续签到:1 天
2017-5-4 15:31:47 显示全部楼层
不是数据不完整,是数据分包了,在数据接收的地方加断点,你会发现数据分几次传来。
原因就是信号响应的是有数据可接收,并不是数据都到了缓冲区,等你接收。
解决方法可以是写个定时器,收到数据后延迟100ms接收。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了