最近一个碰到一个串口数据解析的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 解决方案

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

1004.串口收发数据集成bug相关推荐

  1. MTK:UART串口收发数据

    MTK之UART串口收发数据 转:https://blog.csdn.net/ivy_reny/article/details/51192110 寄存器 UARTn_RBR: Rx Buffer Re ...

  2. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  3. c语言接收串口数据信息,C51通用串口收发数据C语言程序

    #include //C51通用串口收发数据C语言程序模块 #define  uchar unsigned char #define uint unsigned int uchar shu; bit ...

  4. c8051f020C语言程序,C8051F020编程UART串口收发数据

    C8051F020编程UART串口收发数据 我编了一个 老是编译不过去 求高手改正 我用的是UART0端口 方式2 程序如下 //>>UART0串口编程--向PC发送和接受字符串<& ...

  5. STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是:单片机给传感器发送一帧数据,然后传感器返回单片机一帧有用数据,所以串口的收发功能十分重要. STM32cubeMX的配置 时钟和下载方式就不讲 ...

  6. QT5实现串口收发数据(上位机与下位机通信)

    最近帮老师做一个应用程序,通过上位机与下位机进行串口通信,最后实现实时绘图,通过几天努力,成功实现蓝牙串口通信. 参考博客1 注意:代码中一些与串口无关代码,可以忽略掉 一.QT5串口基础知识 1. ...

  7. MTK之UART串口收发数据

    寄存器 UARTn_RBR: Rx Buffer Register,通过读取该寄存器接收数据.要求LCR[7]=0.  UARTn_THR: Tx Holding Register,数据先写入该寄存器 ...

  8. Linux命令行操作串口收发数据(stty命令)

    一.设置串口参数(stty) stty命令man手册:https://man7.org/linux/man-pages/man1/stty.1.html. stty命令作用:change and pr ...

  9. linux下串口多线程通信 ,多串口收发数据错乱问题解决办法

    最近在写AM335x平台的串口测试工具,最开始的时候写的第一版本,测试一直很ok,但是存在一些缺陷,于是就想改进一下,没想到后面在新的板子测试,竟然发现了以个很致命的问题,在旧系统旧内核测试一切正常, ...

最新文章

  1. jittor和pytorch生成网络对比之softmax_gan
  2. 9月份个人:windows系统的DNS服务器配置
  3. 上海市互联网数据中心建设导则(2019版)
  4. unity shader 变种(多重编译 multi_compile)
  5. 猴子排圈求最后编号问题
  6. Google发布文档数据库Firestore
  7. eq相等 ne、neq不相等 EL表达式
  8. ACM-树重心的性质及动态维护
  9. L1-008 求整数段和 (10 分)—团体程序设计天梯赛
  10. TV TimeShift和PVR的区别
  11. 《python核心编程》学习笔记
  12. IntelliJ IDEA搭建Hadoop开发环境(下)
  13. linux sed替换行,shell - 使用Sed替换包含字符串的整行
  14. navicat使用和测试
  15. Excel生成随机32、36位ID
  16. @Transient 实体类临时变量
  17. 2.14情人节还是情人劫?海南大宗开户有返佣吗
  18. 银联在线支付5.0.0版-仿真端
  19. pythonpost四种方式自杀未遂_自测练习十二
  20. libVLC 添加图片和文本水印

热门文章

  1. Endnote自定义参考文献格式锦集
  2. 素数筛选法(埃氏筛 欧拉筛)
  3. VS2017新建HTML项目,VS2017创建项目模板和项模板(方便实用)
  4. python操作时间加减与格式输出
  5. sklearn GridSearchCV网格搜索案例与代码
  6. django新建utils文件夹与导入方法
  7. Mac os更新系统后安装scrapy报错error: command ‘xcrun‘ failed with exit status 1
  8. vant 上传附件后回显_Vue + VantUI Uploader 上传组件, 实现上传功能, 但 手机实时上传照片只回显, 上传不上去 。...
  9. 进入hbase shell速度很慢_HBase——大数据平台之分布式NoSQL数据库教程
  10. linux识别科学计数法,Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]...