|
【我的 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:……
|
|