keil的switch问题

[复制链接]
7506|16
 楼主| laosong 发表于 2007-5-31 16:25 | 显示全部楼层 |阅读模式
我用 keil7.50 调试下面代码,模拟时竟然乱选择,请各位神仙驻足过目:#include <reg51.h>
unsigned char W;
OPSE(unsigned char t)
{ switch(t)
   {    case 1:
             W=0x26;
             break;   //不执行上一句,会跳到这里!!奇怪。
        case 2:
             W=0x4c;
             break;
        case 3:
             W=0x98;
             break;
        case 4:
             W=0x98;
             break;
        case 5:
             W=0x26;
             break;
        case 6:
             W=0x26;
             break;
        default:break; 
  }
}
main()
{
  OPSE(1);
  while(1);
}
xzhenggen 发表于 2007-5-31 16:40 | 显示全部楼层

用OPSE(0x01);试一下。

 楼主| laosong 发表于 2007-5-31 16:59 | 显示全部楼层

不行的

不行的,我用keil7.20 7.50 8.02 版本都试了。
望各位将这段代码拖到你的keil中试一下就感觉到奇怪了。
Autine 发表于 2007-5-31 17:20 | 显示全部楼层

确实是哦 怎么回事

除了你说的那行  我的下面还有几行也是这样
 楼主| laosong 发表于 2007-5-31 17:32 | 显示全部楼层

1、3、5不行,2、4、6可以;

1、3、5不行,2、4、6可以;
Explor 发表于 2007-5-31 19:29 | 显示全部楼层

回复

没遇到这种问题,是不是执行到while中,程序飞了,
改为:while(1)
      {OPSE(1);} 试试
lele1511 发表于 2007-5-31 19:56 | 显示全部楼层

试了不行

lbx_00 发表于 2007-5-31 21:04 | 显示全部楼层

插入无用码

例如这样插入:

case 1: 
       w =0x26;
       w =0x26;
       break;
awey 发表于 2007-5-31 21:52 | 显示全部楼层

W在main中没使用,可能被编译器优化掉了

王紫豪 发表于 2007-5-31 22:55 | 显示全部楼层

编译器优化。。。。你这个不如用if else

Autine 发表于 2007-6-1 08:09 | 显示全部楼层

不是 编译器优化 吧 我2个都选

 楼主| laosong 发表于 2007-6-1 08:29 | 显示全部楼层

是被编译器优化掉了!

经过反复查看编译结果,发现keil优化的强大!
因为选择结构中 1、5、6执行内容一样,3、4执行内容也一样,实际只有3个选择,keil就直接将重复的代码给去掉编译了。
大家可以看见最终的结果是正确的。
这就提醒我们,用keil调试或仿真时,很多地方不会按你原程序一句一句走的!
gyt 发表于 2007-6-1 09:45 | 显示全部楼层

厉害

果然有优化的效果
Autine 发表于 2007-6-1 10:15 | 显示全部楼层

那里能设置不让它优化掉代码吗???

emailli 发表于 2007-6-1 10:22 | 显示全部楼层

定义用关键字volatile

比如:
volatile  unsigned char W;

这样定义以后就不会被优化了。

我以前也遇到过。有时优化结果是对的。有时又不是。

所以,后来我很多参数定义都用了关键字volatile定义。

结果是牺牲了一些空间。
zxq1234508 发表于 2007-6-1 11:04 | 显示全部楼层

是被编译器优化掉了

调试的时候编译级别选择低一点的,不要过高了,不然会出问题的,我试了一下,选择级别2就可以了。选择8就不行
nevsayno 发表于 2007-6-1 13:17 | 显示全部楼层

编译器优化的问题。。。

在优化一栏勾选 0级优化。。。
当仿真完没有问题后,再改成8级优化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

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