Doci 发表于 2014-5-14 10:17:31

外部变量 无故被清零原因

本帖最后由 Doci 于 2014-5-14 10:18 编辑

ICC编译器

工程中System.c和System.h文件中定义外部变量Self_State; 用extern在头文件中声明的。 main中初始化问1,除了此处没有任何赋值语句。
Uart.c中接收中断中调用第一调用值为1,以后调用后一直为0。
如果在uart.c中声明次变量就没有问题,真是费解啊。

配置中没有选择压缩优化代码。

另外问个问题,单片机中能定义多少个变量和什么有关系?

smartmeter 发表于 2014-5-14 10:44:59

没有无源无故的爱,也没有无源无故的恨,一种情况操作数组越界,一种情况那里不小心给改变了。

Doci 发表于 2014-5-14 11:01:08

smartmeter 发表于 2014-5-14 10:44
没有无源无故的爱,也没有无源无故的恨,一种情况操作数组越界,一种情况那里不小心给改变了。 ...

无故是因为自己找不到原因啊,关键是它不是数组,出来while(1)之前有个赋值等于1的,其他地方没有任何赋值语句,换到另一个文件里声明就不会这样...

smartmeter 发表于 2014-5-14 11:22:13

不说那个清0的变量是数组,指针指的地址错误这个知道吧

kebaojun305 发表于 2014-5-14 11:27:27

有高级断点可以检测这个变量是在哪里清零的。

street 发表于 2014-5-14 11:35:37

曾经为这种问题搞得头都破了,发现两个变量定义顺序不同,输出结果也不同, 咦 我发现了编译器一个BUG?   一直凑合写了很多代码后,恍然大悟原来数组定义长度才是王道。

laujc 发表于 2014-5-14 12:19:39

肯定是个人原因,不要怀疑编译器。

单步调试下,肯定能找出原因

zhangpisces 发表于 2014-5-14 12:24:59

楼上正解

xzhiwei 发表于 2014-5-14 12:25:36

同楼上,也遇到过,是数组长度问题。再也可以用AVR studio 仿真一下,看看具体什么时候出错

study_hardware 发表于 2014-5-14 12:45:56

仿真不靠谱,建议用串口打印
页: [1]
查看完整版本: 外部变量 无故被清零原因