feiguangliuyue 发表于 2015-9-26 11:18:18

IAR编译STM8S的if语句错误

以前都是用的Keil,这次为了学习STM8S,开始使用IAR.结果今天写程序的时候发现IAR编译的if语句有问题.

我在主程序的代码如下:
int main( void )
{
u8 i,j;
i=0;
j=0;
//HSIClock_Set(0x18,0);
while(1)
{
    // i=HSEClock_Set(0);   
   if(i==1)
      i++;
   else
       j++;

   j=i+j;
};

return 0;
}

编译后的main程序如下:
main:
                            JRA            main
此时的CC寄存器值为0x2a sp值为0x17FD
哪位大神知道怎么解决?是我哪里设置的问题么?

feiguangliuyue 发表于 2015-9-26 11:20:48

实在用不惯IAR,没有代码提示.还有哪位大神知道IAR实时错误检查在哪儿?
或者知道其它比较人性化的开发软件

你好我好大家好! 发表于 2015-9-26 13:59:19

没遇到过

yanhaijian 发表于 2015-9-26 14:20:29

楼主if的代码风格确实不好。

moyanming2013 发表于 2015-9-26 17:51:09

本帖最后由 moyanming2013 于 2015-9-26 17:52 编辑

你的代码永远不会执行if的语句体:i++,i永远都不会变成1.
另外,在逻辑错误的前提下,while中最后一条语句没用。
请检查执行逻辑(你的思维是什么),整个都有问题。
在这些错误的逻辑情况下,代码被编译器优化,最后可能也就那么2~3条汇编指令了.

LIUBEIHUA 发表于 2015-9-28 07:59:09

你的代码永远不会执行if的语句体:i++,i永远都不会变成1.

int main( void )
{
u8 i,j;
i=0;                        //因为在这里 i=0
j=0;
//HSIClock_Set(0x18,0);
while(1)
{
    // i=HSEClock_Set(0);   
   if(i==1)                //所以这里if(i==1)永远不成立
      i++;                //这条语句永远不执行
   else
       j++;

   j=i+j;
};

return 0;
}

JackieLaura 发表于 2015-9-29 09:05:49

效果如j++;

悄然林静 发表于 2015-10-14 15:29:03

删掉第5行“i=1;”

feiguangliuyue 发表于 2015-10-15 08:04:31

LIUBEIHUA 发表于 2015-9-28 07:59
你的代码永远不会执行if的语句体:i++,i永远都不会变成1.

int main( void )


j++应该执行吧可视反汇编里没有:(

feiguangliuyue 发表于 2015-10-15 08:05:07

悄然林静 发表于 2015-10-14 15:29
删掉第5行“i=1;”

谢谢...我试试
页: [1] 2
查看完整版本: IAR编译STM8S的if语句错误