前言
最近好像和BUG杠上了,一直在忙着找bug,上个礼拜修了一个礼拜的电路板,前天又开始找程序的BUG,直到今天才结束。在本次找程序BUG中自己学会了数据对齐和串口通信注意的地方。本次主要记录找BUG和解决BUG的过程。不喜勿喷。

背景
本次刚来公司几个月,接收了别人之前做过的产品,那我就负责产品维护,另外就是研发新产品。本次的BUG就是stm32下位机存储在DGUS屏中的数据,不能正常被上位机所读出(上位机是老大用C#写的)。
BUG one:
记录头不能正常显示,而是显示为 已用:1000,剩余:20301,总量85。正常上位机会显示为已用:50, 剩余:950, 总量1000。
就开始在下位机上找BUG,找啊找,发现另外一个串口能够读出数据,并用printf发到SecureCRT,那就是发送上位机的程序问题。然后去找问题。如图

然后单独用这个函数发送数据。没有问题。慢慢发现,记录头的结构体的第一个参数出了问题,他是16位的整形数据,而上位机是32位整形接收。后修改为16位接收就能够正常显示记录头。
如图,结构体


BUG Two
读取下位机测试记录时,没有数据显示。

然后也是用同样的方法测试,发到表中去,结果能够显示。说明下位机的收发函数和存储数据都是没有问题。然后想到是不是浮点数发送会出错,结果还真是碰到浮点数就发现问题。老大提醒是不是数据对齐问题,然后就在数据读取结构体声明就加了按四字节对齐,
__IO __align(4) LCDCOM_STRUCT LCDCOM_mcb; 结果发现还是不行。

然后就直接打印结构体第一个参数的地址和浮点数的地址,结果发现相差12,而上位机接收浮点数数据是从位10开始的。这样接收数据肯定错了,因为数据存储是按连续的物理地址存储的,又因为结构体是按四个字节对齐,那么浮点数存储数据的位是从12位开始。
所以上位机接收这个浮点数数据要从第12位开始。(开始是从第10位开始的)。故修改从第12位开始接收。这样表中的数据就能够正常显示。


总结:
从以上找BUG的过程学到,串口通信过程中数据不对,可能是数据位数的问题或者收发过程的问题,可以一个个排除;另外就是上位机接收数据时,接收的数据位一定要对,要考虑数据对齐的问题,这样就不会产生BUG了。记录就到这里。

#串口通信接收数据位和数据对齐的BUG相关推荐

  1. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  2. java串口发送16进制数据_MFC串口通信发送16进制数据的方法

    本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件. 发送数据一般是在edit control 里输入自己想发送的内容,然 ...

  3. STM32串口通信中使用printf发送数据配置方法 开发环境 Keil

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...

  4. java 采用串口通信实现LED屏发送数据中文乱码问题

    java 采用串口通信实现LED屏发送数据中文乱码问题 1.定义:Pointer p = new Pointer(MemoryBlockFactory.createMemoryBlock(1024)) ...

  5. 串口通信——接收串口数据并处理(C语言)

    本文主要内容包含:  1.接收串口数据程序的编程逻辑示意图:  2.接收串口数据程序要用到的通用函数模块(可直接引用,无需更改):  3.接收串口数据程序的示例. 1.接收串口数据程序的编程逻辑示意图 ...

  6. 多串口接收数据并显示-自定义串口通信类-调用委托显示数据-保存数据-实例:10串口接收数据并显示加保存

    当时搜了很久,没咋都到合适的思路,就自己整理一份吧 大致实现的功能: 通过串口接收数据,进行解析,然后显示,或者保存数据: 主要:多个串口接收显示都能用: 大致思路: 1.新建一个类SerialPor ...

  7. Proteus的串口通信仿真实例(八路数据采集系统)

    用proteus和虚拟串口调试助手进行串口通信仿真 实例是一个八路数字电压表,将采集到的八路数字电压经过RS232串口发送至接收上位机.进行串口通信仿真首先要安装一个虚拟串口软件,创建一对虚拟串口.用 ...

  8. c51单片机串口通信电脑向单片机发送数据

    main.c #include <REGX52.H> #include "UART.H"void Delay(int t) { while(--t); }void ma ...

  9. uart中:起始位,停止位,就校验位,数据位,数据位的位数,波特率,数据通讯的接口定义

    UART简介  通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.UART通信在工作中相当常见,项目中需要生成uart信号 ...

最新文章

  1. shell基础(自己看视频写的,不是特别全)
  2. Solaris10之SVM简析
  3. linux 用户和权限管理
  4. 计算字符串相似度算法—Levenshtein
  5. java 画砖块,钢笔画入门:教你画砖块
  6. python训练聊天机器人_一个可以进行训练的聊天机器人,一次chat的源码
  7. Hello,World!的大小(信息学奥赛一本通-T1023)
  8. (27)FPGA译码器设计(第6天)
  9. mac 系统下 刻录centos 系统到 U盘中
  10. Atitit 运维之道 v2 s09.docx Atitit 运维之道 目录 1. 概念 2 1.1. devops算是最低门槛了。什么运维平台,搞来搞去也就那些东西。无外乎cmdb、部署、监
  11. Solr Dataimporthandler 导入MySQL 内存溢出。
  12. 使用 Ajax 上传文件
  13. 关于信号处理中的复信号
  14. 利用计算机绘出圆柱面,工程制图与计算机绘图
  15. 将excel中的列转置成行
  16. 【历史上的今天】4 月 23 日:YouTube 上传第一个视频;网易云音乐正式上线;数字音频播放器的发明者出生
  17. aardio java_图形界面Aardio
  18. HTML和CSS隐藏元素的四种方法
  19. C语言报告书学生信息管理系统,C语言实训 学生信息管理系统
  20. Office激活了提示非正版!

热门文章

  1. 替换法(代入法)求解递归式
  2. RabbitMQ教程 3.发布/订阅(Publish/Subscribe)
  3. Go 性能优化之pprof 实战
  4. 【信管11.5】合同、采购、招投标相关法规
  5. 紫越移动校园建设方案
  6. Galera replication for MySQL(包括Galera replication原理)
  7. div-css计算器制作
  8. 【Kaggle学习】Intro to Deep Learning
  9. 基于Opencv的口罩佩戴识别系统
  10. 今年做开发面试太难了!面试面到我心态爆炸!