堆栈溢出导致运行数据出错分析

本文分析了一起因堆栈溢出导致仪表PT,CT变比出现错误值的问题。通过故障复现及代码分析,确定是堆栈溢出使参数被覆盖。解决方案是将参数移至远离栈空间的存储区域,避免类似错误。总结中强调了防止堆栈溢出、数组越界和函数重入的重要性。" 135352952,9402175,pandas升级后无法输出Excelxls解决办法,"['python', 'pandas', '开发语言', '数据处理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

故障现象

生产抽检的时候,发现仪表的PT,CT变比会出现错误值,例如PT1会出现65537(正确的应该是400),CT1会出现63(正确的是100)。进一步检查发现,设置参数的有些参数被改动了,如下图红色部分标注的。
在这里插入图片描述

故障分析

  1. 开始时只发现一台仪表出现这个情况,试验了同批次另外10台仪表,均没有出现错误。出问题的仪表在重复操作10次以后,故障复现了。后来将铁电补焊一下以后,重复上下电100次,均没有再出现错误。所以当时判定是虚焊导致的读参数不稳定导致的。
  2. 后来在生产过程中,又发现一台,情况与上次的类似。但是这次无法复现故障,对故障仪表重复上下电几百次,进入设置菜单查看参数,参数均正常。这样的话,前一次分析的原因就可能是错的。需要进一步分析其他原因。
  3. 对错误数据进行进一步分析,并结合代码里出错数据的存储位置,判断可能是堆栈溢出导致参数被覆盖。进行试验验证。对仪表进行快速通讯,100ms发送一帧长数据读写命令01 03 10 00 00 44 41 39,同时用按键进入设置菜单查看参数,这样经过几轮操作以后,参数就会被改动。
  4. 代码里被误改动的数据的存储地址就放在栈空间的上面,这样的话,如果栈空间溢出就会导致与栈相连的空间里的数据被误改动。如下图所示,PT,CT等参数就放在空间M1_PADRam里,紧挨着栈空间,当栈空间溢出后就导致数据错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值