2853|3

1万

帖子

25

TA的资源

裸片初长成(高级)

楼主
 

【我的 Nucleo 】优化 ---- 要慎用! [复制链接]

编的程序,在不优化时运行很正常,优化一下就不正常了。

可能大家都有体会吧。

好则我对特别关注的函数都要看看它编译后所产生的汇编代码。所以很快发现了问题所在。

下面举例看看编译器是怎么优化的:(IAR编译器

在编译器的优化选项中,只选择 “ LOOP UNROLLING ”, 这样对某些循环作优化,
函数原型:
inline void Delay(unsigned int DelayCnt)
{
        while ( DelayCnt-- );
}

优化后的结果:
Delay:
        BX       LR               ;; return


由此可见,这个延时函数并没有起到延时的作用,

对于程序的优化问题,编译也是有控制命令的。使用控制命令可以对某一个函数作控制。而设置选项中,设置的结果会对全局起作用。


控制命令:
#pragma optimize=[goal][level][no_optimization...]Parameters


goal :它可以选择size ----  对代码大小作优化,可以选择以下参数:
balanced: 优化时在速度和代码大小作平衡
speed: 速度第一
no_size_constraints,:优化速度,放宽对代码大小的约束
level :S指定优化级别,可选择以下参数:

none:不优化:
low:……
medium:……
high:……
no_optimization :禁止一个或多个优化选项,可以选择以下参数:
no_code_motion:……
no_cse,:……
no_inline:……
no_tbaa:……
no_unroll:……
no_vectorize:……
no_scheduling:……

vectorize:……



此帖出自stm32/stm8论坛

最新回复

应该不属于“ LOOP UNROLLING ” 控制的优化,这函数对外界没影响,外界也不会影响函数,cc会认为这个函数没用而整体消除掉,DelayCnt 声明加个 volatile 就好了。  详情 回复 发表于 2015-1-10 23:56
点赞 关注
 

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
#pragma optimize命令只对紧跟在它后面的一个函数起作用,用于 “ 降低 ” 编译设定的优化等级


参数size、 balanced、speed、以及no_size_constraints 只有在最高优化级别时有效。并且不能同时优化速度和代码大小

再者,使用此命令后,会影响其它预处理命令的作用,如宏的正常展开


----------用些命令时,如果命令的优化等级高于编译设定的优化等级,命令将无效
此帖出自stm32/stm8论坛
 
 

回复

7618

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 
应该不属于“ LOOP UNROLLING ” 控制的优化,这函数对外界没影响,外界也不会影响函数,cc会认为这个函数没用而整体消除掉,DelayCnt 声明加个 volatile 就好了。
此帖出自stm32/stm8论坛

点评

嗯,好象不属于LOOP UNROLLING,[/backcolor]  详情 回复 发表于 2015-1-11 09:53
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

4
 
freebsder 发表于 2015-1-10 23:56
应该不属于“ LOOP UNROLLING ” 控制的优化,这函数对外界没影响,外界也不会影响函数,cc会认为这个函数没用而整体消除掉,DelayCnt 声明加个 volatile 就好了。

嗯,好象不属于LOOP UNROLLING,


此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表