串口接收数据不完整

gongzf111 2017-02-22 02:27:49


如图,自己在QT定义的串口协议,接收到什么就打印什么。但是偶尔有接收不完整的数据,这是什么原因?
是波特率太高了么?我定义的是115200 每秒收发一次
...全文
1107 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
没有办法保证,一次发4个数据,一次就一定能收到4个数据,应该是buffer造成的。 recv是时候自己计算收到了多少个字节,接收完一个包后,再处理。
gongzf111 2017-02-24
  • 打赏
  • 举报
回复
引用 4 楼 q3733353520 的回复:
没有办法保证,一次发4个数据,一次就一定能收到4个数据,应该是buffer造成的。 recv是时候自己计算收到了多少个字节,接收完一个包后,再处理。
好吧!
gongzf111 2017-02-24
  • 打赏
  • 举报
回复
引用 3 楼 ggggyj 的回复:
串口数据是没问题的,串口数据传输基本上是已中断形式实现的,每次传到应用层是字节数不一定。可理解成一个数据流。在接收端要根据组帧通信协议去解析才行。网上很多源码
噢噢 好的 谢谢!
诺水城子 2017-02-23
  • 打赏
  • 举报
回复
串口数据是没问题的,串口数据传输基本上是已中断形式实现的,每次传到应用层是字节数不一定。可理解成一个数据流。在接收端要根据组帧通信协议去解析才行。网上很多源码
gongzf111 2017-02-22
  • 打赏
  • 举报
回复
引用 1 楼 dongjiawei316 的回复:
数据是完整的啊!只是你分了两次显示出来。因为串口的数据就是一个流,没有分帧。所以你感觉数据不完整。如果你需要的话,需要定义一个帧格式,有同步头信息。你先把所接收到的数据保存到一个环形buffer里面,然后固定每次从环形buffer里面读取一帧出来。 而且串口数据确实可能出现错误,如果发现帧不完整,还需要对数据进行同步
怎么定义帧格式?是固定接收的对象么??当接收到这个固定的对象时,然后再打印buffer的值?!
dongjiawei316 2017-02-22
  • 打赏
  • 举报
回复
数据是完整的啊!只是你分了两次显示出来。因为串口的数据就是一个流,没有分帧。所以你感觉数据不完整。如果你需要的话,需要定义一个帧格式,有同步头信息。你先把所接收到的数据保存到一个环形buffer里面,然后固定每次从环形buffer里面读取一帧出来。 而且串口数据确实可能出现错误,如果发现帧不完整,还需要对数据进行同步

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧