JACK847070222 发表于 2013-11-14 09:09:17

CodeWarrior 10.4 单步仿真是SWITCH语句不正常(已解决)

本帖最后由 FSL_TICS_ZJJ 于 2014-1-27 16:42 编辑

先上部分代码
void VoltageChannelChoose(unsigned char chIndex)    //电压索引
{
      HC138_BCS = 1;//
      switch(chIndex)
      {
                case 0://第一节电池,SEL0,SEL1导通
                  AQY210_SEL0 = 0;
                  HC138_ACS = 0;
                  HC138_B0 = 0;
                  HC138_B1 = 0;
                  HC138_B2 = 0;               
                        break;
                case 1://第二节电池,SEL1,SEL2导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 0;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 0;
                  HC138_A2 = 0;
                        break;
                case 2: //第三节电池,SEL2,SEL3导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 0;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 0;
                  HC138_A2 = 0;
                        break;
                case 3://第四节电池,SEL3,SEL4导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 0;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 0;
                  HC138_A2 = 0;
                        break;
                case 4://第五节电池,SEL4,SEL5导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 1;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 0;
                  HC138_A2 = 0;
                        break;
                case 5://第六节电池,SEL5,SEL6导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 1;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 1;
                  HC138_A2 = 0;
                        break;
                case 6://第七节电池,SEL6,SEL7导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 1;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 1;
                  HC138_A2 = 0;
                        break;
                case 7://第八节电池,SEL7,SEL8导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 1;
                  HC138_B2 = 0;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 1;
                  HC138_A2 = 0;
                        break;
                case 8://第九节电池,SEL8,SEL9导通
                  AQY210_SEL0 = 1;                  
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 0;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 1;
                  HC138_A2 = 0;
                        break;
                case 9://第十节电池,SEL9,SEL10导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 0;
                  HC138_B2 = 1;
                  HC138_A0 = 0;
                  HC138_A1 = 0;
                  HC138_A2 = 1;
                        break;
                case 10://第十一节电池,SEL10,SEL11导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 0;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 0;
                  HC138_A2 = 1;
                        break;
                case 11://第十二节电池,SEL11,SEL12导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 0;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 0;
                  HC138_A2 = 1;
                        break;
                case 12://第十三节电池,SEL12,SEL13导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 1;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 0;
                  HC138_A2 = 1;
                        break;
                case 13://第十四节电池,SEL13,SEL14导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 0;
                  HC138_B1 = 1;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 1;
                  HC138_A2 = 1;
                        break;
                case 14://第十五节电池,SEL14,SEL15导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 1;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 0;
                  HC138_A1 = 1;
                  HC138_A2 = 1;
                        break;
                case 15://第十六节电池,SEL15,SEL16导通
                  AQY210_SEL0 = 1;
                  HC138_ACS = 1;
                  HC138_B0 = 1;
                  HC138_B1 = 1;
                  HC138_B2 = 1;
                  
                  HC138_A0 = 1;
                  HC138_A1 = 1;
                  HC138_A2 = 1;
                        break;
                default:
                        break;                                                                        
      }
}
程序很简单,但是单步仿真时可以看到switch的索引值是不变的,但是执行完一个分支会跳到别的分支,该执行的分支有的语句也没执行到,用示波器看执行的有现象,不执行的无现象,但是这不是想要的结果啊,网上有人说可能是优化造成的,但是10.4没找到哪里优化啊,希望了解的帮一下。

JACK847070222 发表于 2013-11-14 09:31:29

{:dizzy:}自己顶一下

mikal 发表于 2013-11-14 10:51:12

单步,没有跳转到你指定的case,但是现象正确。那肯定是优化!
不过,lz我想说的是,你的程序写的有些不正规,以后会吃亏的。
1、魔鬼数字漫天飞;
2、全局变量漫天飞;

让我想起来黄浦江数万的白花花的死猪。

JACK847070222 发表于 2013-11-14 13:15:13

mikal 发表于 2013-11-14 10:51 static/image/common/back.gif
单步,没有跳转到你指定的case,但是现象正确。那肯定是优化!
不过,lz我想说的是,你的程序写的有些不正 ...

你说的不太明白,还请明示

tarzar 发表于 2013-11-14 13:26:02

在要查看的分支里,添加打印函数,这样就可以避免被优化掉,我都是这样干的

JACK847070222 发表于 2013-11-14 18:18:22

tarzar 发表于 2013-11-14 13:26 static/image/common/back.gif
在要查看的分支里,添加打印函数,这样就可以避免被优化掉,我都是这样干的 ...

这。。。好吗

FSL_FAE_River 发表于 2013-11-15 12:06:05

在CW里,优化设置可以这么寻找
Project>Properties>C Build>Setting>ARM Ltd GCC C Compiler>Optimization>Optimization Level
具体的描述可以在CW的help里有描述

JACK847070222 发表于 2013-11-15 16:23:29

FSL_FAE_River 发表于 2013-11-15 12:06 static/image/common/back.gif
在CW里,优化设置可以这么寻找
Project>Properties>C Build>Setting>ARM Ltd GCC C Compiler>Optimization> ...

谢谢,还得请教一下,下面这个图,加了一部分代码后,每次仿真就跑到这里,是不是内存溢出了

JACK847070222 发表于 2013-11-16 08:46:07

求解答,顶一下

hgy_tom 发表于 2013-11-19 13:08:49

是被优化掉了?空间足够的话建议不优化!

FSL_TICS_ZHJUN 发表于 2014-1-3 10:28:04

hgy_tom 发表于 2013-11-19 13:08
是被优化掉了?空间足够的话建议不优化!

把相关变量用valoatile 声明一下, 可以避免变量优化

jinyi7016 发表于 2015-2-25 14:09:04

mikal 发表于 2013-11-14 10:51
单步,没有跳转到你指定的case,但是现象正确。那肯定是优化!
不过,lz我想说的是,你的程序写的有些不正 ...

也没太多吧
页: [1]
查看完整版本: CodeWarrior 10.4 单步仿真是SWITCH语句不正常(已解决)