STM32/STM8技术论坛
直播中

张英

8年用户 1443经验值
私信 关注
[问答]

用局部int型静态变量运行过程中出现了乱变的情况

用的是IAR FOR STM编译器,一个涵数中定义了int型静态变量
static unsigned int T20min,T1hour;//20,60分钟
T20min,T1hour都是加1的,在运行过程中可以看到会从几十突然变到几千或几万的,但换成两个static unsigned char静态变量就正常了,或者换成数组形变量也没事。为什么会这样?这个静态变量只是局部的,只有这个涵数才用到的。



回帖(11)

王涛

2018-9-14 10:13:00
检查下 T20min,T1hour到达60 和24后的判断条件是否正常
举报

李萍

2018-9-14 10:13:15
有可能存在越界其他数据把他们破坏了
举报

李斌

2018-9-14 10:13:31
静态局部变量固定占用了一个内存坑。
举报

张英

2018-9-14 10:13:45
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

张鹏

2018-9-14 10:13:58
那很有可能别的数据把他破坏了,可以这样去验证,你将这2个静态局部变量定义成一个长度为6的数组,数组前2个和后面2个初始化为0,中间2个给T20min和T1hour用,运行一段时间后,检查下数组的前面2个和后面2是个是不是还是为0
举报

王杰

2018-9-14 10:14:21
换成两个static unsigned char静态变量就正常了,或者换成数组形变量也没事,这个涵数用的都是静态变量
举报

陈秀英

2018-9-14 10:15:06
if(T20min>1999)  你变成uchar后 那么这个条件永远不可能满足了,0~255
举报

陈伟

2018-9-14 10:15:19
建议从根本上找原因,而不是稀里糊涂的把它避开
举报

陈敏

2018-9-14 10:15:40
两个uchar后,就不是这个if(T20min>1999) 判断了
举报

王超

2018-9-14 10:16:02
嗯,好好好排查下这个原因,肯定能学到不少知识
举报

chli

2018-9-14 11:04:10
用没有用到指针或者数组的地方贴出来看看?估计是数据越界了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分