外部变量 无故被清零原因
本帖最后由 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
没有无源无故的爱,也没有无源无故的恨,一种情况操作数组越界,一种情况那里不小心给改变了。 ...
无故是因为自己找不到原因啊,关键是它不是数组,出来while(1)之前有个赋值等于1的,其他地方没有任何赋值语句,换到另一个文件里声明就不会这样... 不说那个清0的变量是数组,指针指的地址错误这个知道吧 有高级断点可以检测这个变量是在哪里清零的。 曾经为这种问题搞得头都破了,发现两个变量定义顺序不同,输出结果也不同, 咦 我发现了编译器一个BUG? 一直凑合写了很多代码后,恍然大悟原来数组定义长度才是王道。 肯定是个人原因,不要怀疑编译器。
单步调试下,肯定能找出原因 楼上正解 同楼上,也遇到过,是数组长度问题。再也可以用AVR studio 仿真一下,看看具体什么时候出错 仿真不靠谱,建议用串口打印
页:
[1]