[STM32F0] 程序中全局变量值异常改变

[复制链接]
 楼主| jinling14 发表于 2015-4-16 22:12 | 显示全部楼层 |阅读模式
最近在写一个程序,用MDK5.0 开发STM32F0的,里面全局变量用的挺多,在调试程序的发现有几个变量值会发生异常,这几个变量有的只是程序开始的时候赋值了,后面都是使用的,没有再赋值过,很奇怪。
戈卫东 发表于 2015-4-16 22:14 | 显示全部楼层
然后呢?
Landway 发表于 2015-4-16 22:43 | 显示全部楼层
变量加前缀volatile
airwill 发表于 2015-4-17 05:24 | 显示全部楼层
这是不应该的发生的事情, 如果变量会自己改变, 那我们的世界...
当然, 也有可以变化的可能:
1. 你这个变量定义在了 外设的地址上了.
2. DMA 导致的.
好在我们的 ARM 有着强劲的调试功能, 可以给这个变量地址加个数据断点, 捕捉这个变量的写操作.
赶快请调试器帮忙吧
huangxz 发表于 2015-4-17 06:49 | 显示全部楼层
最好看下MAP表,你那几个变化的变量跟哪个数组地址比较接近。
戈卫东 发表于 2015-4-17 07:36 | 显示全部楼层
airwill 发表于 2015-4-17 05:24
这是不应该的发生的事情, 如果变量会自己改变, 那我们的世界...
当然, 也有可以变化的可能:
1. 你这个变量 ...

还有可能是栈溢出
lei129210 发表于 2015-4-17 10:03 | 显示全部楼层
越界。
wqx0532 发表于 2015-4-17 10:08 | 显示全部楼层
溢出  很有可能
 楼主| jinling14 发表于 2015-4-17 10:12 | 显示全部楼层
Landway 发表于 2015-4-16 22:43
变量加前缀volatile

试过volatile不行
 楼主| jinling14 发表于 2015-4-17 10:15 | 显示全部楼层
戈卫东 发表于 2015-4-17 07:36
还有可能是栈溢出

我在startup**.s文件里面把堆栈空间加大了还是不行
 楼主| jinling14 发表于 2015-4-17 10:15 | 显示全部楼层
wqx0532 发表于 2015-4-17 10:08
溢出  很有可能

有什么办法可以解决
 楼主| jinling14 发表于 2015-4-17 10:16 | 显示全部楼层
airwill 发表于 2015-4-17 05:24
这是不应该的发生的事情, 如果变量会自己改变, 那我们的世界...
当然, 也有可以变化的可能:
1. 你这个变量 ...

听上去很高级,但是不知道在MDK5.0上如何调试
aaron96031 发表于 2015-4-17 10:23 | 显示全部楼层
也许是变量没有那标准C的方式声明,或你是重复使用了这个变量的地址了
ayl439 发表于 2015-4-17 10:46 | 显示全部楼层
有没有可能是这个情况,假设变量名为A,并没有直接对A赋值的操作,但是有这类操作:
指针变量B指向A的地址,然后做了类似*B=X这样的操作
Landway 发表于 2015-4-17 11:05 | 显示全部楼层

数组或指针越界?
其它没有遇到过了。
dami 发表于 2015-4-17 11:19 | 显示全部楼层
堆栈溢出? 数组或指针越界?
戈卫东 发表于 2015-4-17 11:44 | 显示全部楼层
jinling14 发表于 2015-4-17 10:15
我在startup**.s文件里面把堆栈空间加大了还是不行

实际上RAM并没有加大,所以没有用
 楼主| jinling14 发表于 2015-4-17 11:51 | 显示全部楼层
终于搞定了,是数组定义太小,溢出了!

评论

事实再一次证明,越奇怪的现象,原因越低级。  发表于 2015-4-19 17:15
qbasicljx 发表于 2015-4-17 11:57 | 显示全部楼层
一般书数组越界,
看一下变量附近有那个数组吧
疯小子 发表于 2015-4-17 16:19 | 显示全部楼层
恭喜楼主解决了问题,全局变量最好少用,一旦定义内存空间始终占用,不好把控。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

111

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部