搜索
bottom↓
回复: 19

【请教】STM8程序运行一段时间后变量莫名变化是哪里问题?

[复制链接]

出75入90汤圆

发表于 2019-5-22 22:28:02 | 显示全部楼层 |阅读模式
本帖最后由 zpywz 于 2019-5-23 10:45 编辑

前段时间用IAR写了个STM8S003的程序,用于一个输出开关量的遥控器。

现在问题是接收部分后每次上电放置一会儿,或几个小时在去操作就失控了。

IAR仿真观察了两天,发现是运行过程中有一部分变量的值会莫名改变所导致的。
我测试方法是在程序中设置了if判断,如果该变量 莫名改变就进入设置了断点语句。

进行仿真,有时几分钟,有时几个小时 就会进入设置了断点的语句,没个准。
同时还发现其它一堆的变量也都会 无故改变了。

//------------------------
程序正常运行过程中是不会去操作这些变量的, 我有也在操作这些变量的语句处加了断点测试过,出错前没有去操作过它们。

板子供电很稳定,用电钻、对讲机在边上干扰也没出问题。

我PCB上做了一个重新赋值的按钮,给几个关键变量重新赋值后,程序还是能继续正常跑的。所以这应该不是所谓的跑飞吧?

//------------------------
排查了几天也看不出有什么问题,特上来请教下各位坛友 ,问题可能会在哪里?

//------------------------
程序里没有操作变量、数组。没有串口、中断、DAM等等,就一个遥控接收板,主动执行的只有if去判断有没有收到RF模块IO口的信号

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入362汤圆

发表于 2019-5-22 22:28:50 | 显示全部楼层
一般就是内存越界了呗。。

出75入90汤圆

 楼主| 发表于 2019-5-22 23:48:00 | 显示全部楼层
本帖最后由 zpywz 于 2019-5-23 00:41 编辑
tomzbj 发表于 2019-5-22 22:28
一般就是内存越界了呗。。


根据你的提示,我查到一个 每隔1mS 累加一次的 取伪随机数的函数,不知道有没有可能是它造成的。
晚上我删除掉,待机一夜看看,明早就有结果了。

代码如下,里面有3个变量,不断累加。
if(RAND3<12)
       RAND3++;
else
       RAND3=0;
RAND1++;
RAND2+=3;

出75入90汤圆

 楼主| 发表于 2019-5-23 07:31:16 | 显示全部楼层
早上看了还老问题,现在程序里就剩一些if判断,没有操作变量。
没辙了,我设一个if判断变量如果被改变就自动改回来。

出0入4汤圆

发表于 2019-5-23 07:51:10 来自手机 | 显示全部楼层
溢出了吧。

出0入4汤圆

发表于 2019-5-23 07:57:48 来自手机 | 显示全部楼层
把所有数组,指针检查下,多半溢出了

出75入90汤圆

 楼主| 发表于 2019-5-23 08:17:28 | 显示全部楼层

请问,没去操作变量和数组也会溢出吗?我仿真一步步的看过明确是没有操作变量和数组的。

出75入90汤圆

 楼主| 发表于 2019-5-23 08:17:44 | 显示全部楼层
qinxg 发表于 2019-5-23 07:57
把所有数组,指针检查下,多半溢出了


请问,没去操作变量和数组也会溢出吗?我仿真一步步的看过明确是没有操作变量和数组的。

出0入0汤圆

发表于 2019-5-23 08:19:52 | 显示全部楼层
栈是不是溢出了

出0入0汤圆

发表于 2019-5-23 08:35:21 | 显示全部楼层
zpywz 发表于 2019-5-23 08:17
请问,没去操作变量和数组也会溢出吗?我仿真一步步的看过明确是没有操作变量和数组的。 ...

变量就是保存在内存里的,无缘无故改变,肯定是别的地方的指针越界,跑到这里来了。仔细查查吧,不光是各种变量,数组,指针,不光是主动操作的,也有硬件操作的内存,比如串口接收中断是否有地址累加接收,DMA接收的数据等。

出0入0汤圆

发表于 2019-5-23 08:36:02 | 显示全部楼层
变量声明为static

出0入0汤圆

发表于 2019-5-23 08:53:40 | 显示全部楼层
这现象 十有八九就是溢出了,指针的使用、中断程序的处理 都好好查一下吧

出0入0汤圆

发表于 2019-5-23 09:52:24 | 显示全部楼层
先看下改变的变量是不是连续的,挨着的,再查查附近有没有数组,如果是分IAPAPP的,IAP的也查一查

出0入0汤圆

发表于 2019-5-23 09:57:23 | 显示全部楼层
有可能是原子操作的问题,变量值有在中断里面修改吗?

出0入0汤圆

发表于 2019-5-23 10:13:44 | 显示全部楼层
大半是数组

出75入90汤圆

 楼主| 发表于 2019-5-24 08:39:38 | 显示全部楼层
tomzbj 发表于 2019-5-22 22:28
一般就是内存越界了呗。。

谢谢各位,问题已解决,确实是数组越界的问题。
我是用的RF模块例程。其中有个函数是根据接收到的数据长度去写数组,然而并没有限定数据长度。
正常情况下数据不会太长问题反映不出来,当收到过长的杂讯,数组就立马越界了。

出75入90汤圆

 楼主| 发表于 2019-5-24 08:40:06 | 显示全部楼层
qinxg 发表于 2019-5-23 07:57
把所有数组,指针检查下,多半溢出了

谢谢各位,问题已解决,确实是数组越界的问题。
我是用的RF模块例程。其中有个函数是根据接收到的数据长度去写数组,然而并没有限定数据长度。
正常情况下数据不会太长问题反映不出来,当收到过长的杂讯,数组就立马越界了。

出75入90汤圆

 楼主| 发表于 2019-5-24 09:58:02 | 显示全部楼层
richie550 发表于 2019-5-23 08:53
这现象 十有八九就是溢出了,指针的使用、中断程序的处理 都好好查一下吧 ...

谢谢各位,问题已解决,确实是数组越界的问题。
我是用的RF模块例程。其中有个函数是根据接收到的数据长度去写数组,然而并没有限定数据长度。
正常情况下数据不会太长问题反映不出来,当收到过长的杂讯,数组就立马越界了。

出0入0汤圆

发表于 2019-5-24 10:02:29 | 显示全部楼层
哈哈,接受数组越界的问题,我之前也遇到过,人肉调试两天复现

出0入0汤圆

发表于 2019-5-24 10:05:35 | 显示全部楼层
zpywz 发表于 2019-5-24 09:58
谢谢各位,问题已解决,确实是数组越界的问题。
我是用的RF模块例程。其中有个函数是根据接收到的数据长 ...

查到就好,解决了这一个下一个就不远了,加油!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 23:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表