用C语言在IAR中编写stm32程序,有个别语句不执行

2020-01-22 12:04发布

char exchange(char source)
{
  char high=source<<4;  /*将source右移取高四位,低四位补0赋值给high,*/  
  char low=source>>4;   /*将source右移取高四位,低四位补0赋值给high,*/
  return high+low;     /*两者相加即得经过交换的数,return将其返回给调用函数*/
}


主函数调用如下所示
main
{
char a=0;
a=exchange(0x36);
}
问题:在主函数中执行到 a=exchange(0x36);时,进入子函数后,程序直接跳到 return high+low;而不执行char high=source<<4; char low=source>>4;这两句,这是怎么回事???
我用的是IAR 芯片是stm32107vct7.希望高手给我解答一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
error_dan
1楼-- · 2020-01-22 12:13
未必是你看到的那样,建议单步跟一下汇编。
bencsj1
2楼-- · 2020-01-22 14:49
不懂,求解!
lcofjp
3楼-- · 2020-01-22 15:17
只要结果正确就行,给你省了两条语句的时间,你就偷着乐吧。
sdu168_2
4楼-- · 2020-01-22 18:11
问题解决了,2楼同学说的很对呀,表面上单步执行不经过这两句并不代表不执行,这是因为在IAR option选项的c/c++ complier中的optimizatio level (这里是设置的是优化水平),我这里设置成high,所以程序在执行时在表面上是跳过了这两句没有执行。可以设置为none看一下就可以了。。谢谢高手给我的解答
nome
5楼-- · 2020-01-22 23:22
 精彩回答 2  元偷偷看……
zchong
6楼-- · 2020-01-23 01:47
编译器还是比较智能的,

一周热门 更多>