打印

变量被优化了

[复制链接]
2050|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1、在MPALB 中,用的是PICC编绎器。
void main(void)
{
   unsigned char y;
   y = 89;
   while(1);
}
经过编绎,提示说y变量没被用到。打开仿真也找不到y变量。
若在定义y前加 volatile,就不会提示这种。

这种情况,要是在程序中某个变量被这样优化了,那程序就不会按自己的意思走?

2、void main (void)
{
volatile ushort yy;
uchar b[] = {0x63,0x05,0x00,0x30,0xff,0x00};
//yy = 0;
yy = CRC_gen(&b, 6);
asm("clrwdt");
}
yy是取b数组的校验。在仿真时,前提CRC_gen这个校验函数是对的,发现仿真结果也对。当改变下b数组中的内容,编绎后再仿真,查看yy变量的值,是上次的值,而非此次数组校验值。而当加上yy = 0;后,每次校验结果yy的值都是当前数组的校验的结果。

这是为什么呢?
沙发
zbx1981| | 2013-2-1 11:31 | 只看该作者
优化了

使用特权

评论回复
板凳
airwill| | 2013-2-1 11:59 | 只看该作者
校验算法里, yy 就应该要先初始化.
你把 yy 定义成局部变量. 从编译的角度看, 初值是个不确定的值.
这里跟优化没有关系

使用特权

评论回复
地板
kvdong| | 2013-2-1 12:58 | 只看该作者
降低优化等级即可

使用特权

评论回复
5
hjs1618|  楼主 | 2013-2-1 13:21 | 只看该作者
优化等级如何更改,更改后会造成什么结果?

使用特权

评论回复
6
yklstudent| | 2013-2-1 14:04 | 只看该作者
这个界面下可以更改

未命名.jpg (59.88 KB )

未命名.jpg

使用特权

评论回复
7
flyinginred| | 2013-2-3 16:10 | 只看该作者
表示看不明白

使用特权

评论回复
8
hjs1618|  楼主 | 2013-2-5 21:39 | 只看该作者
改这个好象不好

使用特权

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

本版积分规则

个人签名:单片机学习交流群:19131564  欢迎加入

13

主题

515

帖子

1

粉丝