keil编译无报错,但有些语句不执行啊!

[复制链接]
8546|10
 楼主| t-z-sh 发表于 2008-6-24 16:43 | 显示全部楼层 |阅读模式
#include "intrins.h"

int main(void)
{
  static char R=129;
  int temp=0;              //keil仿真发现temp被赋值0x0100!
  char R_offset=34;
  temp=0;                  //本句没有执行,象被编译忽略了。
  if(R>=128)               /*此处执行错!明明条件成立却跳出到else去了!*/
  {

  temp=R-256;
//  temp=0;
  _nop_();
  temp=temp/2;
  temp=((int)(R-256)/2)-R_offset;
  }
  else          
  temp=(R)/2-R_offset;
  return temp;
}
zealane 发表于 2008-6-24 17:01 | 显示全部楼层

编译优化了吧

试着降低优化等级
computer00 发表于 2008-6-24 17:05 | 显示全部楼层

你的R是有符号的啊,最大只能到127,怎么可能会大于等于128

当然不会执行if了。

另外,temp=0;,后面根本没有谁使用temp的值,编译器认为给它赋值没有意义,所以被优化掉了。
 楼主| t-z-sh 发表于 2008-6-24 17:23 | 显示全部楼层

改了还不行

菜鸟不知道如何降低优化等级。
我把R改成char(应该无符号了吧),后面用了一下temp的值,还是有后两个问题。temp初值是0了。
void main(void)
{
  char R=129;
  char temp=0;
  char R_offset=74;
  temp=0;
  if(R>=128) 
  {
  temp=0;
  temp=R-257;
//  temp=0;
  _nop_();
  temp=temp/2;
//  temp=((int)(R-256)/2)-R_offset;
  }
  else          
  temp=(R)/2-R_offset;
  R=temp;
//  return temp;
}
 楼主| t-z-sh 发表于 2008-6-24 17:25 | 显示全部楼层

我在仿真看到的R初值0x81是大于128的呀

 楼主| t-z-sh 发表于 2008-6-24 17:28 | 显示全部楼层

优化等级降为0后果然好了,但为什么呢?

computer00 发表于 2008-6-24 17:30 | 显示全部楼层

unsigned char才是无符号啊……晕

 楼主| t-z-sh 发表于 2008-6-24 17:35 | 显示全部楼层

对,加上signed才保险

 楼主| t-z-sh 发表于 2008-6-24 17:44 | 显示全部楼层

优化等级一般要设成多少?

我原来是默认的8级。能否介绍下?
ayb_ice 发表于 2008-6-24 19:38 | 显示全部楼层

看来LZ没有signed,unsigned概念

a601182450 发表于 2014-10-8 08:43 | 显示全部楼层
我也遇到过这样的问题不知如何解决,降低优化等级也不行,如图片

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

48

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部