watercici 发表于 2019-9-30 15:09:48

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

我在用IAR在线调试的时候,发现一个问题,比如:有一个函数是:decode(u8 id)

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

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

yuxin-366840 发表于 2019-9-30 16:10
11111

???

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:


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

嗯嗯,好的,我回去看看,谢谢
页: [1] 2
查看完整版本: IAR调试时用到if条件语句执行异常的问题