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

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编译的吧,而且优化了
也发现问题,是我师傅对照汇编看出来的 ...

嗯嗯,好的,我回去看看,谢谢
watercici 回答时间:2019-12-14 11:51:28
myhuman 发表于 2019-10-8 11:31
那是因为你打开了优化,把iar的优化关掉在调试看看。

嗯嗯,有时间了试试看

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版