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

IAR编译STM8S的if语句错误

[复制链接]
feiguangliuyue 提问时间: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个回答
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++;
stmcu.org.png
悄然林静 回答时间: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

谢谢...我试试
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版