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

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

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

图一:代码被优化后无法运行到对应位置

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


1. 全局优化

请添加图片描述
图二:全局优化设置
level 0(-O0) 代表不进行优化,这种方式编译出来的可执行文件比较大,但是因为每一条代码都和汇编代码顺序一一对应,所以定位问题非常方便,非常建议代码调试阶段使用该等级。


2. 整个文件优化

请添加图片描述
图三:在 Project 窗口下右键对应的文件,弹出点击第一个 ''Options For File…
请添加图片描述
图四:设定对应的优化等级,这里选择了 Level 0 (-O0)


3. 单个函数功能优化

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


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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值