变量被优化了

[复制链接]
2660|7
 楼主| hjs1618 发表于 2013-2-1 11:23 | 显示全部楼层 |阅读模式
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 | 显示全部楼层
降低优化等级即可
 楼主| hjs1618 发表于 2013-2-1 13:21 | 显示全部楼层
优化等级如何更改,更改后会造成什么结果?
yklstudent 发表于 2013-2-1 14:04 | 显示全部楼层
这个界面下可以更改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
flyinginred 发表于 2013-2-3 16:10 | 显示全部楼层
表示看不明白
 楼主| hjs1618 发表于 2013-2-5 21:39 | 显示全部楼层
改这个好象不好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

13

主题

515

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部