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的值都是当前数组的校验的结果。
这是为什么呢?
|