打印

谁来帮忙比较一下

[复制链接]
987|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
langgq|  楼主 | 2022-9-9 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一种情况:
void write_byte(uchar *date)//data指向数据首地址     
{ uchar i,j,a[4],b;
i=*date;
for(i=0;i<8;i++)
   
      {
     for(j=0;j<4;j++)
       {
        a[j]=( ( *(date+j) ) >>i ) & 0x01; //分开存放四字节的位值   
        }
          write_bit(a);  
      }
}

第二种情况:
void write_byte(uchar *date)//data指向数据首地址     
{ uchar i,j,a[4],b;
i=*date;
   
}

使用特权

评论回复
沙发
langgq|  楼主 | 2022-9-9 20:26 | 只看该作者
为什么在keil软件仿真时候第一情况里面i的数值没有变化,第二种情况里i的数值变为*date。

使用特权

评论回复
板凳
chenjunt| | 2022-9-9 20:28 | 只看该作者

keil优化掉了

使用特权

评论回复
地板
stly| | 2022-9-9 20:31 | 只看该作者
可是这违反了哪个规定,才导致被优化。

使用特权

评论回复
5
heweibig| | 2022-9-9 20:32 | 只看该作者
"
i=*date;
for(i=0;i<8;i++)
"
上面的i不是重复赋值了吗i = 0

使用特权

评论回复
6
yszong| | 2022-9-9 20:34 | 只看该作者

i=*date;
for(i=0;i<8;i++)

i被楼主优化了,

使用特权

评论回复
7
yszong| | 2022-9-9 20:38 | 只看该作者
应该把 i放进j的嵌套

使用特权

评论回复
8
langgq|  楼主 | 2022-9-9 20:41 | 只看该作者
我看了keil的优化设置选项,没有发现被优化的理由啊 ,还是麻烦说下这违反了哪个规定,才导致被优化

能说一下

使用特权

评论回复
9
stly| | 2022-9-9 20:43 | 只看该作者

keil会生成不支持的汇编代码?
i=*pt;
for(i=0;i<10;i++);
相当于
i=*pt;
i=0;
while(i++<10)
这里
i=*pt;
i=0;
当然会被编译器优化成
i=0
如果不想被优化,把i定义成volatile变量

使用特权

评论回复
10
langgq|  楼主 | 2022-9-9 20:45 | 只看该作者
keil生成的汇编代码 到i=*date 那几条指令的时候 确实没有执行

使用特权

评论回复
11
ousj| | 2022-9-9 20:50 | 只看该作者
确实是那个i的值有问题,楼主再看看吧。

使用特权

评论回复
12
tpgf| | 2022-10-7 20:34 | 只看该作者
为什么两种情况的代码量相差这么多啊

使用特权

评论回复
13
nawu| | 2022-10-7 20:43 | 只看该作者
第一种情况的部分代码已经被优化掉了

使用特权

评论回复
14
aoyi| | 2022-10-8 08:09 | 只看该作者
第二种情况里边这个变量没有使用 所以被优化掉了

使用特权

评论回复
15
zljiu| | 2022-10-8 10:06 | 只看该作者
在第一种情况中 这个临时变量是有意义的 第二种情况下 这个临时变量定义完全没有任何意义

使用特权

评论回复
16
gwsan| | 2022-10-8 10:49 | 只看该作者
如何能看到优化后的代码呢 楼主是通过什么方式看到的呢

使用特权

评论回复
17
tfqi| | 2022-10-8 11:10 | 只看该作者
第一种情况下的for语句里边的指令应该是执行了的

使用特权

评论回复
18
Henryko| | 2022-11-5 20:03 | 只看该作者
被编译器优化了,可以关掉编译器优化试试

使用特权

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

本版积分规则

932

主题

8762

帖子

1

粉丝