这个原因较多,具体到调试环境,很可能跟你编译环境的优化等级配置有关。
我们在MCU调试过程中,往往会用到编译器的优化功能来提升芯片的性能和精简代码空间。不过,经过代码优化,往往可能给我们调试带来些影响,主要体现在下面几个方面:
a、设置断点方面出现障碍,有些代码行没法做断点的设置;
b、无法对某些变量进行观察:
c、单步调试时出现代码运行“不连续”的情形,即执行到的地方和我看到的地方不一致;
因此,为了实现有效调试,我们在通过编译器做优化时要选择合适的优化等级。基本原则是不影响调试体验的前提下保障编译效率。一般来讲,在调试时建议将优化等级设置在较低水平。比方KEIL MDK 推荐调试时将优化等级设置在-01,IAR 推荐调试时将优化等级设置在-None,GCC推荐调试是将优化等级设置在-0g.其实,编译器的优化等级设置越高,对代码的规范性要求以及我们对编译器的了解程度也越高。经常有人代码优化前程序运行得好好的,代码优化等级调高好程序功能变得面目全非了。
|