你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

IAR编译STM8S的if语句错误

[复制链接]
YETOB 提问时间:2015-9-26 11:18 /
2ST金币
以前都是用的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
哪位大神知道怎么解决?是我哪里设置的问题么?

IAR编译if语句.jpg
收藏 评论12 发布时间:2015-9-26 11:18

举报

12个回答
YETOB 回答时间: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条汇编指令了.
愚民点子 回答时间: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++;
stmcu.org.png
悄然林静 回答时间:2015-10-14 15:29:03
删掉第5行“i=1;”
YETOB 回答时间:2015-10-15 08:04:31
LIUBEIHUA 发表于 2015-9-28 07:59
你的代码永远不会执行if的语句体:i++,i永远都不会变成1.

int main( void )

j++应该执行吧  可视反汇编里没有
YETOB 回答时间:2015-10-15 08:05:07

谢谢...我试试
YETOB 回答时间:2015-10-15 08:06:12
yanhaijian 发表于 2015-9-26 14:20
楼主if的代码风格确实不好。

求指导.我一般都是这么写的
小小超 回答时间:2015-10-15 08:33:48
学习一下!
yanhaijian 回答时间:2015-10-15 09:10:05
feiguangliuyue 发表于 2015-10-15 08:06
求指导.我一般都是这么写的

if(i==1)
{
        i++;
}
else
{
       j++;
}
还是加个{}吧,不容易出错,比较清晰。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版