打印
[STM32F0]

程序中全局变量值异常改变

[复制链接]
5041|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 有着强劲的调试功能, 可以给这个变量地址加个数据断点, 捕捉这个变量的写操作.
赶快请调试器帮忙吧

使用特权

评论回复
5
huangxz| | 2015-4-17 06:49 | 只看该作者
最好看下MAP表,你那几个变化的变量跟哪个数组地址比较接近。

使用特权

评论回复
6
戈卫东| | 2015-4-17 07:36 | 只看该作者
airwill 发表于 2015-4-17 05:24
这是不应该的发生的事情, 如果变量会自己改变, 那我们的世界...
当然, 也有可以变化的可能:
1. 你这个变量 ...

还有可能是栈溢出

使用特权

评论回复
7
lei129210| | 2015-4-17 10:03 | 只看该作者
越界。

使用特权

评论回复
8
wqx0532| | 2015-4-17 10:08 | 只看该作者
溢出  很有可能

使用特权

评论回复
9
jinling14|  楼主 | 2015-4-17 10:12 | 只看该作者
Landway 发表于 2015-4-16 22:43
变量加前缀volatile

试过volatile不行

使用特权

评论回复
10
jinling14|  楼主 | 2015-4-17 10:15 | 只看该作者
戈卫东 发表于 2015-4-17 07:36
还有可能是栈溢出

我在startup**.s文件里面把堆栈空间加大了还是不行

使用特权

评论回复
11
jinling14|  楼主 | 2015-4-17 10:15 | 只看该作者
wqx0532 发表于 2015-4-17 10:08
溢出  很有可能

有什么办法可以解决

使用特权

评论回复
12
jinling14|  楼主 | 2015-4-17 10:16 | 只看该作者
airwill 发表于 2015-4-17 05:24
这是不应该的发生的事情, 如果变量会自己改变, 那我们的世界...
当然, 也有可以变化的可能:
1. 你这个变量 ...

听上去很高级,但是不知道在MDK5.0上如何调试

使用特权

评论回复
13
aaron96031| | 2015-4-17 10:23 | 只看该作者
也许是变量没有那标准C的方式声明,或你是重复使用了这个变量的地址了

使用特权

评论回复
14
ayl439| | 2015-4-17 10:46 | 只看该作者
有没有可能是这个情况,假设变量名为A,并没有直接对A赋值的操作,但是有这类操作:
指针变量B指向A的地址,然后做了类似*B=X这样的操作

使用特权

评论回复
15
Landway| | 2015-4-17 11:05 | 只看该作者

数组或指针越界?
其它没有遇到过了。

使用特权

评论回复
16
dami| | 2015-4-17 11:19 | 只看该作者
堆栈溢出? 数组或指针越界?

使用特权

评论回复
17
戈卫东| | 2015-4-17 11:44 | 只看该作者
jinling14 发表于 2015-4-17 10:15
我在startup**.s文件里面把堆栈空间加大了还是不行

实际上RAM并没有加大,所以没有用

使用特权

评论回复
18
jinling14|  楼主 | 2015-4-17 11:51 | 只看该作者
终于搞定了,是数组定义太小,溢出了!

使用特权

评论回复
评论
NE5532 2015-4-19 17:15 回复TA
事实再一次证明,越奇怪的现象,原因越低级。 
19
qbasicljx| | 2015-4-17 11:57 | 只看该作者
一般书数组越界,
看一下变量附近有那个数组吧

使用特权

评论回复
20
疯小子| | 2015-4-17 16:19 | 只看该作者
恭喜楼主解决了问题,全局变量最好少用,一旦定义内存空间始终占用,不好把控。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

111

帖子

1

粉丝