打印

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

[复制链接]
6839|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;
}

使用特权

评论回复
5
t-z-sh|  楼主 | 2008-6-24 17:25 | 只看该作者

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

使用特权

评论回复
6
t-z-sh|  楼主 | 2008-6-24 17:28 | 只看该作者

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

使用特权

评论回复
7
computer00| | 2008-6-24 17:30 | 只看该作者

unsigned char才是无符号啊……晕

使用特权

评论回复
8
t-z-sh|  楼主 | 2008-6-24 17:35 | 只看该作者

对,加上signed才保险

使用特权

评论回复
9
t-z-sh|  楼主 | 2008-6-24 17:44 | 只看该作者

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

我原来是默认的8级。能否介绍下?

使用特权

评论回复
10
ayb_ice| | 2008-6-24 19:38 | 只看该作者

看来LZ没有signed,unsigned概念

使用特权

评论回复
11
a601182450| | 2014-10-8 08:43 | 只看该作者
我也遇到过这样的问题不知如何解决,降低优化等级也不行,如图片

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

48

帖子

0

粉丝