MDK 编译器优化

USE MicroLIB

MicroLIB C函数库用于对微控制器以及其他嵌入式应用的优化,如果 MicrolIB选项没有使能,则默认使用ISO C函数库。。MicroLIB中的程序占用较少的存储器空间,不过同时它性能也降低了,并且在使用上还有一些局限性。

USE Cross-Module Optimization

通过跨模块优化这项技术,利用之前在建立过程中获取的信息,未使用的函数会被放到编译好的目标文件的单独ELF段中,这样链接器就可以去除这些未使用的函数以减小代码体积。 此选项也称为链接器反馈,需要多次编译和链接步骤以利用它来减少代码大小。

Link-Time Code Generation(V5.0.0之前)

编译生成的目标代码为一种中间格式,链接器可以利用这种格式在链接阶段进一步优化代码。这样既降低了代码量,同时也提高了程序的运行速度。

Optimization Levels

-O0 使用最低优化

多数优化都被关闭,生成的代码具有最多的调试信息。

-O1 使用有限优化

未使用的内联函数、未使用的静态函数以及冗余代码都会被移除,指令会被重新排序以避免互锁的情况。生成的会被适度优化,并且比较适合调试。

-O2 使用高度优化

根据处理器的特定行为优化程序代码,生成的代码为高度优化的,并且具有有限的调试信息。

-O3使用极端优化

根据时间/空间选项进行优化,默认为多文件编译,它可以提供最高等级的优化,但编译时间会稍微长些,软件调试信息也较少。

Optimize for Time

“优化时间”复选框使编译器进行优化,更加注重实现最佳效果检查时的性能(-Otime)或未选中时的最小代码大小(-Ospace)。取消选中Optimize for Time就意味着选择-Ospace选项,该选项指示编译器执行优化以可能增加的执行时间为代价来减小Image文件大小。例如,使用非内联函数调用而不是大型结构副本的内联代码。 这是默认选项。从中运行编译器时命令行,使用'-Ospace'调用此选项选中Optimize for -Otime选项,该选项指示编译器以最快的速度优化代码执行时间,有可能增加image文件大小。建议编译时间关键部分您的代码使用-Otime,其余使用-Ospace指令。

Split Load and Store Multiple

指示编译器将涉及大量寄存器的LDM和STM指令拆分为一系列较少多个寄存器的加载/存储。这意味着16个寄存器的LDM可以分成4个独立的LDM,每个LDM由4个寄存器组成。此选项有助于减少没有缓存或写缓冲区的ARM系统上的中断延迟,以及使用零等待状态32位内存的系统。

例如,ARM7和ARM9处理器只能在指令边界上执行异常。如果在无缓存的ARM7和ARM9系统中的16个寄存器的LDM开始时发生异常,则系统将在获取异常之前完成对存储器的16次访问。根据存储器仲裁系统,这可能导致非常高的中断延迟。将LDM拆分为4个寄存器的4个独立LDM意味着处理器在加载最多4个寄存器后将采用异常,从而大大减少中断延迟。选择此选项可提高系统的整体性能。

One ELF Section per Function

选项告诉编译器将所有函数放入它们各自的ELF部分,这允许链接器删除未使用的函数。ELF代码部分通常包含许多函数的代码。 链接器通常只能删除未使用的ELF部分,而不是未使用的函数。 只有当所有内容都未使用时,才能删除ELF部分。因此,将每个函数拆分为自己的ELF部分允许编译器轻松识别哪些未使用,并将其删除。选择此选项会增加编译代码所需的时间,但可以提高性能。

常见优化目标选项

最小的目标代码:

选中
• The MicroLIB C library
• Cross-module optimization
• Optimization level 2 (-O2)

最好的代码表现性能:

选中
• Cross-module optimization
• Optimization level 3 (-O3)
• Optimize for time

最后总结一句话,只要代码逻辑够严密,无论是多高的编译优化等级都是不会出问题的,所以在资源不是出现了必须要优化的时候不建议优化代码,自己增加实现难度而已;反之如果你追求功能的稳定,可以在优化等级下发现0级优化下存在的问题进行完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值