使用 Keil MDK 的时候仿真无法定点到对应位置的问题

使用 Keil MDK 的时候仿真无法定点到对应位置的问题

在使用 Keil MDK 时候,会出现无法定点到对应的位置,我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
但是开启了优化,即意味着调试不方便。因为实际汇编代码执行顺序和源代码不一定保持一致。在遇到复杂的问题下,就比较难定位了,如下图所示:
使用 Keil MDK 的时候仿真无法定点到对应位置的问题_第1张图片
图一:代码被优化后无法运行到对应位置

此时掌握多种编译优化设置的方法,就显得尤为重要了,可以让你进行正宗源码级别的调试,下面主要介绍 3 种设置优化代码的方法:


1. 全局优化

使用 Keil MDK 的时候仿真无法定点到对应位置的问题_第2张图片
图二:全局优化设置
level 0(-O0) 代表不进行优化,这种方式编译出来的可执行文件比较大,但是因为每一条代码都和汇编代码顺序一一对应,所以定位问题非常方便,非常建议代码调试阶段使用该等级。


2. 整个文件优化

使用 Keil MDK 的时候仿真无法定点到对应位置的问题_第3张图片
图三:在 Project 窗口下右键对应的文件,弹出点击第一个 ''Options For File…
使用 Keil MDK 的时候仿真无法定点到对应位置的问题_第4张图片
图四:设定对应的优化等级,这里选择了 Level 0 (-O0)


3. 单个函数功能优化

使用 #pragma O0代码,在函数前增加如上代码即可设置当前的函数不被优化;不过不同的编译器,可能方法不同(MDK 支持不同的编译器,比如 AC5、AC6、GCC),所以如果真有必要,可以尝试把需要优化的函数提取出来单独作为一个源文件进行设置。


提醒:编译优化的代码和不优化的代码仅仅影响了仿真,不影响运行的结果

你可能感兴趣的:(Keil,keil,MDK,Keil)