"); //-->
我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
但是开启了优化,即意味着调试不方便。因为实际汇编代码执行顺序和源代码不一定保持一致。在遇到复杂的问题下,就比较难定位了。
此时掌握多种编译优化设置的方法,就显得尤为重要了,可以让你进行正宗源码级别的调试。
全局优化(整个工程所有源文件)这种优化是大部分人最新了解、也是最新使用的一种方式,相信大家都知道。
level 0(-O0) 代表不进行优化,原汁原味,这种方式编译出来的可执行文件比较大,但是因为每一条代码都和汇编代码顺序一一对应,所以定位问题非常方便,非常建议代码调试阶段使用该等级。
组优化上面的方式,将所有的源文件都进行了优化配置。有一棍子打死的感觉。虽然大部分的时候没有问题,但有些情况可能是个麻烦。
比如你的工程代码,只有开启最高优化级别(level 3(-O3))尺寸才足够放入 FLASH 中,否则编译出来的目标文件太大,放不进去,也就无法定位问题了。
此时,你可以使用该优化方式,将部分文件优化(需要定位问题的代码),而保持其它文件的优化级别不变。
这里的 default 意味着和这里的优化级别和全局优化级别保持一致(即全局优化级别是啥,这里也是啥),但是我们可以通过这里差异化定制我们这个组里面的优化选项(这个组里有 app.c app_cfg.c 两个文件,意味着这两个文件的优化级别受这里控制)。
单个文件优化可能你的空间已经到极限了,不允许把组里的文件都进行优化,那么单个文件优化是个不错的选择。
这个界面(Options for File main.c)就是针对 man.c 这个文件进行优化的,在这里可以选择你希望优化的级别,调试时设置 level 0(-O0)就好。
这么多差异性,我们怎么知道我们对哪些文件做了特殊配置呢,不可能一个个查看吧。
别怕,MDK 贴心的为我们做了区分标志。
这里的雪花标志,即代表有特殊配置,但是不是仅仅优化级别改变了就不一定了。
单个函数优化如果单个文件由于某种原因不能修改优化级别(比如改成 O0 直接不能运行,编译不通过等,这些都有可能),那么可以试试单个函数优化这个方法。
不过不同的编译器,可能方法不同(MDK 支持不同的编译器,比如 AC5、AC6、GCC),所以如果真有必要,可以尝试把需要优化的函数提取出来单独作为一个源文件进行设置。
AC5 设置方法(O0 代表 0 优化级别):
#pragma push#pragma O0void function(void)
{
... // Optimized at O0}#pragma pop这里的 push、pop 主要是为了保留、恢复之前的优化等级,这样操作只对当前函数有效。
AC6设置方法
void function(void) __attribute__((optnone))
{
... // Optimized none
}专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
GD32E230F6V6实用指南:为下一个项目选择合适单片机
Microchip推出集成高性能模拟外设的32位PIC32A单片机
瑞萨单片机技术概述
用单片机制作的纯正弦波逆变电源电路
创维数码5000系列彩电开关电源(AN单片机)电路
超低功率高性能新一代产品MSP430F5xx
[转帖]从Cygnal C8051F看8位单片机发展之路
AVR 单片机专栏,资料下载!之二
利用PIC12C508单片机来实现加密狗技术[转帖]
语音合成芯片T6668和单片机8031的接口电路图
AVR 单片机专栏,资料下载!
MSP430 电表解决方案
双芯智控革命:IGBT与单片机如何重塑智能微波炉
长虹R2118A型彩电开关电源(LA单片机)电路
功率监测与控制系统DIY——搭建环境,定时器翻转LED
瑞萨RA0单片机连载——面向对象编程之SHT31温度计
介绍采用 nanoWatt XLP技术的超低功耗系列单片机
《ATmega8原理及应用手册》
用AT89C2051单片机实验合弦乐
车规级MCU介绍
倾情奉献:MSP430汇编指令集(中文),详解带实例!
《AVR单片机C语言库》
瑞萨RA0单片机连载——PWM实现呼吸灯
单片机语言C51应用实战集锦
MSP430x2xx4xx系列
5V 单片机与5V 耐压单片机有何区别,为什么至关重要
新手必看的单片机知识
MSP430单片机TIMER_A在产品设计中的应用
16位语言函数工具库
Microchip发布PIC16F17576单片机(MCU)系列,简化模拟传感器设计