你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

又是一个奇葩问题——stm32 全局变量自己乱变

[复制链接]
eefishing 发布时间:2019-12-20 23:25
呵呵,什么奇葩问题都能遇到。在编写stm32的程序发现一个逻辑判断功能不正常。随机调试,发现自己定义的一个全局变量在确定没有代码操作他的情况下竟然在自己乱跳。
! C8 `9 \% C# W! G7 J: T- c
但是真理告诉我不要怀疑芯片的问题,不要怀疑编译器的问题。但是还是忍不住怀疑了一下。然并卵……

8 S! {" A) D; U2 Y- q
但是呢,当我把代码里面的定时器关闭时,这个现象消失了。在定时器的中断函数中我就执行了一个操作,就是按键的扫描。后来我把按键扫描可能操作这个全局变量的地方都关了,然而,现象一直存在。从调试串口看还是在不停变化。
; m, q- [8 Y2 S. n6 N
这时候突然脑海里闪现一下数组越界,我在按键扫描的时候定义的有数组:keyPressTime,一看原来把这个地方定义成4个,但是下面的代码我却按成6个来操作,少定义了两个。这样就造成操作后面的两个的时候就会操作成其他的内存区域,而从现象来看肯定是正好操作到这个全局的变量。就导致他不停的在变化……

7 d; z' u- G1 M7 r1 z$ d. G1 u6 M' e

' V0 I. i% L/ B4 p' a! w
所以呢当定义的全局变量不按规律变化是,可能会是完全无关的其他数组越界造成的。按变化的下标操作数组的时候要注意,在代码编译的时候是不会报错的,这种现象在运行过程中才会发现。

- P+ @. f$ f: p6 o  P
赞 收藏 评论5 发布时间:2019-12-20 23:25

举报

5个回答
bingsun 回答时间:2019-12-21 11:05:03
假如我们定义一个数组 char test[4];  当使用test[4]=i; 时就已越界了。
pythonworld 回答时间:2019-12-21 14:03:45
谢谢分享!!!
STM1024 回答时间:2019-12-21 14:13:41
自己乱变,绝大部分情况是自己莫名其妙地修改了不该修改的地方。
子曰好人 回答时间:2019-12-21 17:19:32
还有可能是仿真器的原因,我之前遇到过,实际数据是正常的,传回编译器仿真界面的数据乱跳
aiherong 回答时间:2019-12-21 21:36:49
个人认为: 越界而变得随机,这种可能性大一些
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版