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
哪位大神知道怎么解决?是我哪里设置的问题么?
实在用不惯IAR,没有代码提示.还有哪位大神知道IAR实时错误检查在哪儿?
或者知道其它比较人性化的开发软件 没遇到过 楼主if的代码风格确实不好。 本帖最后由 moyanming2013 于 2015-9-26 17:52 编辑
你的代码永远不会执行if的语句体:i++,i永远都不会变成1.
另外,在逻辑错误的前提下,while中最后一条语句没用。
请检查执行逻辑(你的思维是什么),整个都有问题。
在这些错误的逻辑情况下,代码被编译器优化,最后可能也就那么2~3条汇编指令了.
你的代码永远不会执行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;
} 效果如j++; 删掉第5行“i=1;” LIUBEIHUA 发表于 2015-9-28 07:59
你的代码永远不会执行if的语句体:i++,i永远都不会变成1.
int main( void )
j++应该执行吧可视反汇编里没有:( 悄然林静 发表于 2015-10-14 15:29
删掉第5行“i=1;”
谢谢...我试试
页:
[1]
2