1004.串口收发数据集成bug

         最近一个碰到一个串口数据解析的bug,调试了整整7天,从排除问题,优化代码,到真正发现问题所在, 期间经历感觉好像找到了bug,其实是找到的另外一个bug,期间不断排雷, 不断惊喜,不断 失望,以为找到问题所在,其实并没有找到核心问题。

现在对此记录一下。

1 场景描述:

    模块功能:以100ms 速度,对外发送各种不同类型数据,都是接受相同类型的数据。

    测试:

    A1 程序运行在ubuntu上,通过usb转串口,连接无线小模块,进行数据收发。

    A2 程序运行在另外一台ubuntu上,通过usb转串口,连接无线小模块,进行数据收发。

 2 诡异现象描述    

         每次都在 new 一个对象处出现段错误,由于此对象是由google的protobuf 框提供的技术,进行创建 ,由该第3库进行内存管理, new后,框架进行释放。所以 一开始,将问题定在此处,以为是内存不足导致。经实际以top进行观察,发现内存的 使用率,并不高,大概在0.3%左右进行波动,那么排除内存不足 问题。 错误信息提示,memory corruption (fast) . 显示内存溢出,又继续查看所有的线程中使用的new,发现 仍然一无所获 ,实在 调不  下去了。

3 改变调试思路 

    1  只运行A1程序,取消串口上的无线小模块,将串口的收发互联进行测试。代码可以一直跑下去,不出错误。  

    2 使用2台电脑,进行互测取消掉,无线模块,使2个串口,进行有线直连。测试代码3个小时,没有 任何错误。

    3 再次 连上无线模块进行测试,在运行的过程中,时间不固定,出现 错误。和以前现象一致。

 4 分析原因

         无线模块 的加入,导致大量的 出现错误,经过分析是无线模块传输数据,根据无线网络情况,可能出现信息断掉,

重新出现后,大量波峰时刻数据,来得串口缓存区,其中出现了某数据帧,关于长度的数据,错乱,读写时,未进行长度

校验。导致buffer缓存区越界。

 5 解决方案

   串口协议中,接收到的长度数据进行校验。即可解决。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangshui516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值