IAR调试时用到if条件语句执行异常的问题
我在用IAR在线调试的时候,发现一个问题,比如:有一个函数是:decode(u8 id){
if(id ==0x01)
{
a = 0x01;
}
if(id == 0x02)
{
b = 0x01
}
}
我在调试的时候函数是这样的:decode(0x02)
但是单步执行到函数里面发现一下几种情况:1.id 的确是0x02,但是他两个if分支都去执行了;2.函数执行进去之后就不是0x02而是其他任意值,两个分支还是都执行,但是奇怪的是只有调试的时候这样,板子在机子上运行的时候没有任何异常。想问一下这是为什么?谢谢!在线等。。。。。
还有一个问题,就是一旦上面的if函数分支执行异常,如果全速运行的话,整个程序就执行异常了,这种异常就是要不进入while(1)死循环,要个板子的网络通信和LED指示灯就都不工作了,因为不方便贴代码?所以想问一下解决问题的大概思路,这种IAR调试中语句执行异常的原因可能是哪些? 1、在第一个if函数和第二个if函数之间应该加上else
2、第一个if中应该清零变量b,第二个if 中应该清零变量a,否则只要执行一次,变量a和b就一直是0x01了,
3、其实只要使用变量a来置零或置1就够了,变量b是多余的。
11111 yuxin-366840 发表于 2019-9-30 16:10
11111
??? 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两个分支都去执行?为什么? watercici 发表于 2019-10-8 08:50
1.会是没有加else的原因么?
2.我的a和b不需要清零,只要根据id的值赋相应的值即可,现在是主要问题是id ...多个if需要使用else的。
网上剪贴的关于if-else:
那是因为你打开了优化,把iar的优化关掉在调试看看。 这个是用的老版本COSMIC编译的吧,而且优化了
也发现问题,是我师傅对照汇编看出来的 BG4RFF 发表于 2019-12-5 11:04
这个是用的老版本COSMIC编译的吧,而且优化了
也发现问题,是我师傅对照汇编看出来的 ...
嗯嗯,好的,我回去看看,谢谢
页:
[1]
2