一个bug,导致公司被索赔
来源:玩转单片机与嵌入式 发布时间:2022-02-16 分享至微信
欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。

回复【加群】,限时免费进入知识共享、技术交流群;

回复【3D封装库】,常用元器件的3D封装库;

回复【电容】,获取电容、元器件选型相关的内容;

回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料

回复【资料】,获取全部电子设计、单片机开发相关的资料

回复【终端电阻】,获取CAN终端电阻相关的资料

回复【单片机】,获取单片机全套视频教程和参考设计

回复【STM32】,获取STM32相关设计和视频教程

回复【PCB】,获取PCB设计相关的资料

回复【硬件知识】、【硬件设计】,获取硬件开发工程必备手册

回复【经典电路】,获取5000个经典电路

回复【论文】,获取毕业设计、电子竞赛、学术专业等相关论文资料

回复【华为】,获取华为的硬件设计资料

…………

欢迎关注【玩转单片机与嵌入式】公众号,本公众号会每天输出高质量的技术干文章,欢迎持续关注。









一:流程及问题


之前开发的一款产品,大致的工作流程如下图:


此处及下文中,为方便讲解,将我们的设备称为主设备,将其他设备称为从设备

这款产品,已经给客户批量供货很多台,一直没有收到客户的不良反馈。突然有天售后服务的同事说:客户反馈设备偶尔会一直初始化不成功,不能执行主任务流程。


二:问题排查


收到客户的反馈后,从软硬件各个方面进行了积极的排查:


01

排查硬件及使用环境


对出现问题的设备,烧写专门的硬件测试程序,检查各项硬件功能正常。排查出问题设备的各物料供应商批次等都没有发现有任何异常。


在主设备软件初始化时,会等待接收从设备的数据,怀疑从设备对主设备产生的影响,通过对比验证、排他性验证等各种排查方式,排除了从设备对主设备的影响。


在现场对设备间通信的数据进行数据监听发现,受干扰较大时,主设备与从设备通信时会受到随机的乱码。怀疑是干扰的乱码导致的初始化不成功。


02

排查软件


软件实现的大致方式如下代码所示。


    #define MAX_LEN             64      //串口接收数据的最大个数#define STATE_INIT          0       //初始化状态#define STATE_OPERATING     0       //操作状态uint8_t ucRxBuf[MAX_LEN];           //串口接收的数据void function(void){switch (MainState){case STATE_INIT:            //初始化{if(makeCRC(ucRxBuf) == ucRxBuf[MAX_LEN-1]){MainState = STATE_OPERATING;}}break;
case STATE_OPERATING: //运行状态{
}      break;
default:break;}}

对数据监听发现,主设备与从设备通信时,初始化的握手仅进行一次。若首次握手成功,则主设备与从设备都进入到正常运行状态。


从代码中发现唯一可能出现初始化不跳转的情况是:主设备一直等待从设备握手不成功。如下图所示


问题随之而来:若从设备与主设备握手不成功时,从设备是否会再次发送握手信息?


三:问题根源


从设备上电后,发送一次握手信息,若主设备有握手成功的信息返回,从设备在本次上电周期不再发送第二次握手信息。

检查主设备的握手的返回信息发现:仅仅对数据长度进行了判断,判断接收到正确的数据长度就认为握手成功,即给从设备发送了握手成功的信息,没有实际按照CRC校验成功作为握手成功的标志。

但是,在主任务中通过CRC校验成功作为初始化成功的标志。


多么低级的bug啊。因为工程师的这个bug,导致公司被客户索赔并勒令进行立即整改。


End


限时免费扫码进群,交流更多行业技术


往期推荐

三个字让你记住大小端模式,超全面讲解单片机的大小端模式。

通过一张表区分I2C和SPI通信协议(都是串行通信,两者有什么区别)

电子元器件失效原因都有哪些?

别人都说51单片机很容易学,为什么我学起来那么难,学了很久还没入门?

MCU国产替代选型合集来了,干货不容错过!

拆解了一个某夕夕上1元买的LED灯泡,电源驱动竟是这样的?

与晶振并联的1M电阻是什么用?为何有的有用,有的没有用?应该如何选择?

选型 | MCU选型的9个注意事项!



[ 新闻来源:玩转单片机与嵌入式,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!