• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

为什么keil里连着对变量赋值两次直接执行第二次

2cb6f86ee70a1003 2019-10-24 浏览量:603
        for(;ram_address_back <= Ram_address; ram_address_back++)
        {
                if(*ram_address_back==0x00000000)
                {
                        *ram_address_back =0x55555555;
                        back=*ram_address_back;
                        back=0x00000000;
                }
                else {RAM_check_flag=FALSE;break;        }
        }
 按步运行仿真back=*ram_address_back这个语句不运行,直接运行back=0x00000000;但我如果去掉back=0x00000000这条语句的话back=*ram_address_back;可以运行
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:3
  • 编译器优化了,因为你上面那条语句是多余的,下面back还是赋值为0,所以编译器提高执行效率把上面一句屏蔽了,你可以把优化等级设置最低就可以了,这样他每句都会执行

  • 编译器优化了,如果不想被优化,变量初始化时加上volatile。

  • 编译器会优化到无意义的语句,第二句结果覆盖第一句,前面就没用了。 想强制执行, 定义black时前面加 volatile 。

相关问题

问题达人换一批

为什么keil里连着对变量赋值两次直接执行第二次