你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

IAR调试时用到if条件语句执行异常的问题

[复制链接]
watercici 提问时间:2019-9-30 15:09 /
我在用IAR在线调试的时候,发现一个问题,比如:有一个函数是:decode(u8 id)

{
    if(id ==0x01)
   {
       a = 0x01;
    }
   if(id == 0x02)
   {
      b = 0x01
   }
}
我在调试的时候函数是这样的:decode(0x02)
但是单步执行到函数里面发现一下几种情况:1.id 的确是0x02,但是他两个if分支都去执行了;2.函数执行进去之后就不是0x02而是其他任意值,两个分支还是都执行,但是奇怪的是只有调试的时候这样,板子在机子上运行的时候没有任何异常。想问一下这是为什么?谢谢!在线等。。。。。

<
收藏 评论10 发布时间:2019-9-30 15:09

举报

10个回答
watercici 回答时间:2019-9-30 15:25:10
还有一个问题,就是一旦上面的if函数分支执行异常,如果全速运行的话,整个程序就执行异常了,这种异常就是要不进入while(1)死循环,要个板子的网络通信和LED指示灯就都不工作了,因为不方便贴代码?所以想问一下解决问题的大概思路,这种IAR调试中语句执行异常的原因可能是哪些?
wenyangzeng 回答时间:2019-9-30 15:38:13
1、在第一个if函数和第二个if函数之间应该加上else
2、第一个if中应该清零变量b,第二个if 中应该清零变量a,否则只要执行一次,变量a和b就一直是0x01了,
3、其实只要使用变量a来置零或置1就够了,变量b是多余的。
yuxin-366840 回答时间:2019-9-30 16:10:55
11111
watercici 回答时间:2019-10-8 08:47:35
watercici 回答时间:2019-10-8 08:50:15
wenyangzeng 发表于 2019-9-30 15:38
1、在第一个if函数和第二个if函数之间应该加上else
2、第一个if中应该清零变量b,第二个if 中应该清零变量a ...

1.会是没有加else的原因么?
2.我的a和b不需要清零,只要根据id的值赋相应的值即可,现在是主要问题是id的问题,也就是if分支执行异常的问题,明明id==0x01,结果if两个分支都去执行?为什么?
wenyangzeng 回答时间:2019-10-8 10:13:22
watercici 发表于 2019-10-8 08:50
1.会是没有加else的原因么?
2.我的a和b不需要清零,只要根据id的值赋相应的值即可,现在是主要问题是id ...
多个if需要使用else的。
网上剪贴的关于if-else:

无标题.png
myhuman 回答时间:2019-10-8 11:31:56
那是因为你打开了优化,把iar的优化关掉在调试看看。
BG4RFF 回答时间:2019-12-5 11:04:09
这个是用的老版本COSMIC编译的吧,而且优化了
也发现问题,是我师傅对照汇编看出来的
watercici 回答时间:2019-12-14 11:51:12
BG4RFF 发表于 2019-12-5 11:04
这个是用的老版本COSMIC编译的吧,而且优化了
也发现问题,是我师傅对照汇编看出来的 ...

嗯嗯,好的,我回去看看,谢谢
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版