c51为什么变量观察窗口出错

zldzjzldh   2009-10-28 16:04 楼主
请教大家了,大家帮帮我吧。我刚学单片机C51,用的是keil,测试小程序时发现keil观察变量的Watches窗口老是出错不知什么原因。比如:
void main()
{
int a;
int b;
a=12;
b=a*100;
}
执行程序时看显示变量值的窗口Watches发觉显示a的值是1200,b的值是1200;
再比如:
void main()
{
int a,b,c;
a=12;
b=a*100;
c=a;
}
执行程序时看显示变量值的窗口Watches发觉显示a的值是0,b的值是1200;c的值是12,这倒底是怎么回事啊,真的把我搞晕了。
还有程序执行到主函数main的结束符" }"时就会报出错。说是某个内存地址不允许执行,但那都是空地址啊,真的想不通。

回复评论 (7)

优化了

用volatile声明一下,不让编译器这么干就成了
点赞  2009-10-28 16:10
用 volatile 声明确实正常了,这是编译器有问题还是我用的keil版本不好????在keil上能设置来避免这个问题吗,请教了。
点赞  2009-10-28 17:21
引用: 引用 2 楼 jiangandlijie 的回复:
用 volatile 声明确实正常了,这是编译器有问题还是我用的keil版本不好????在keil上能设置来避免这个问题吗,请教了。


都不是

是你不了解编译器还有编译器的优化策略

IDE上应该会有不优化的编译选项,你找找试试

点赞  2009-10-28 19:51
谢谢楼上的:)
点赞  2009-10-29 11:51
是程序飞了吧
最后“}”前加while(1);
点赞  2009-10-29 11:58
就这么几句最简单的赋值不可能跑飞的
点赞  2009-10-29 13:55
void main()
{
int a,b,c;
a=12;
b=a*100;
c=a;
}
这种句子你都用窗口来看啊,汗
单步简单多了
点赞  2009-10-29 14:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复