搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2013-11-14 09:09:17 | 显示全部楼层 |阅读模式
本帖最后由 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没找到哪里优化啊,希望了解的帮一下。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2013-11-14 09:31:29 | 显示全部楼层
自己顶一下

出0入0汤圆

发表于 2013-11-14 10:51:12 | 显示全部楼层
单步,没有跳转到你指定的case,但是现象正确。那肯定是优化!
不过,lz我想说的是,你的程序写的有些不正规,以后会吃亏的。
1、魔鬼数字漫天飞;
2、全局变量漫天飞;

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

出0入0汤圆

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

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

出0入4汤圆

发表于 2013-11-14 13:26:02 | 显示全部楼层
在要查看的分支里,添加打印函数,这样就可以避免被优化掉,我都是这样干的

出0入0汤圆

 楼主| 发表于 2013-11-14 18:18:22 | 显示全部楼层
tarzar 发表于 2013-11-14 13:26
在要查看的分支里,添加打印函数,这样就可以避免被优化掉,我都是这样干的 ...

这。。。好吗

出0入0汤圆

发表于 2013-11-15 12:06:05 | 显示全部楼层
在CW里,优化设置可以这么寻找
Project>Properties>C Build>Setting>ARM Ltd GCC C Compiler>Optimization>Optimization Level
具体的描述可以在CW的help里有描述

出0入0汤圆

 楼主| 发表于 2013-11-15 16:23:29 | 显示全部楼层
FSL_FAE_River 发表于 2013-11-15 12:06
在CW里,优化设置可以这么寻找
Project>Properties>C Build>Setting>ARM Ltd GCC C Compiler>Optimization> ...

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

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-11-16 08:46:07 | 显示全部楼层
求解答,顶一下

出0入0汤圆

发表于 2013-11-19 13:08:49 | 显示全部楼层
是被优化掉了?空间足够的话建议不优化!

出0入0汤圆

发表于 2014-1-3 10:28:04 | 显示全部楼层
hgy_tom 发表于 2013-11-19 13:08
是被优化掉了?空间足够的话建议不优化!

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

出0入0汤圆

发表于 2015-2-25 14:09:04 | 显示全部楼层
mikal 发表于 2013-11-14 10:51
单步,没有跳转到你指定的case,但是现象正确。那肯定是优化!
不过,lz我想说的是,你的程序写的有些不正 ...

也没太多吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 20:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表