用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.希望高手给我解答一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
sdu168_2
2020-01-22 18:11
问题解决了,2楼同学说的很对呀,表面上单步执行不经过这两句并不代表不执行,这是因为在IAR option选项的c/c++ complier中的optimizatio level (这里是设置的是优化水平),我这里设置成high,所以程序在执行时在表面上是跳过了这两句没有执行。可以设置为none看一下就可以了。。谢谢高手给我的解答

一周热门 更多>