关于QT使用串口收发数据

个人版本:5.4及以上。

【个人总结,接受正确意见,好的建议】

1.问题:接收数据不正确。

a).在串口接收数据接口处打印接收到的数据,若出现每次收到的数据长度与发送的数据长度不一致,则说明串口接收的数据不完整,解决方法可自定义数据缓存池专门接收串口收到的数据,然后进行统一处理。

b).若接收的长度无误,最后解析的数据不正确,记得查看串口是否需要做网络字节序转换(大小端问题),一般针对2个字节(如unsigned short)类型,或者4个字节(如int类型,unsigned int 类型)。

2.若使用缓存池

    如果使用缓存池,则需要去遍历缓存池,以匹配我们需要的数据,一般来说,我们在定义协议时都会定义协议头,头部至少包括头部标识位(标识数据开始),buffer长度(接收数据总长度或者有效数据长度,自己定),校验位(校验接收到的数据是否为发送的数据),有些协议还会有协议尾。因为涉及到一直去遍历,我们可以将这部分代码放入单独的子线程专门去解析数据。关于多线程的使用,网上一搜一大把,如果不会,就从简单的例子开始看效果。我们可以使用qDebug() << QThread::currentThread(); 打印当前线程ID,来查看当前所在线程ID。

    在使用缓存池时涉及到对缓存池的存放与取出,这里自行取舍是否需要加读写锁或者互斥锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值