IAR编译优化

IAREWARM编译器和其他厂家的C编译器相比非常高效,但是当程序里面包含对时序要求比较严格的代码的时候,IAR常常会把这些代码过渡优化,破坏了时序的要求,造成程序错误,在程序代码比较紧的时候又必须优化。

可以在要求比较严格的代码的函数前面,用#pragmaoptimize=none不进行优化或者#pragma optimize=low进行低级优化。要注意的是:设置优化等级要小于初始options默认设置的优化等级。Optimization can only belowered from the default, not raise.

例如,工程中配置了优化级别,代码中可以通过下面方法再次改变优化级别:

#pragmaoptimize=none

void fun()

{

}

不对fun()函数优化

 

下面代码,如果设置了高优化,可能循环部分就给优化掉,直接跳过了循环。

void delay()

{

inti;

for(i = 0; i < 1000; i++);

}

因为什么都不做的循环,是个编译器都该给优化去掉。应该在循环体里面用一个nop之类的。可以有以下解决办法:第一个在工程的option中修改optimize等级,第二种是在函数前面加上#pragma optimize=none,第三种修改循环的变量值定义类型为volatile



  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值