调试器对嵌入式应用程序的影响

时间:2016-02-28 21:34:26

标签: c debugging embedded stm32 iar

我目前正在使用IAR来调试STM32f0 micro,我注意到在设备运行时尝试调试时,我的设备功能会产生一些有趣的影响。

在我看来,调试器正在以某种方式减慢或禁止应用程序,这意味着代码中一些更关键的时间部分在正确执行时遇到了问题。

调试器对代码做了什么,以便让我查看源代码中的寄存器/变量/内存/位置,以及这对执行时间有何影响?

注意:优化已经关闭,因为它们往往会削弱IAR正确逐步执行代码并导致它有时会错过断点的能力。

2 个答案:

答案 0 :(得分:2)

STM32F0xx使用的ARM Cortex-M0 CoreSight片上调试单元对于正常执行是非侵入式的。硬件断点实时匹配指令获取地址。如果您的调试器支持在运行时更新内存和变量(而不是在断点处),这可能会产生影响,但在STM32F2xx上我甚至没有看到任何问题,即使是非常时间关键的代码与微秒级别的期限(F2然而,Cortex-M3不是M0)。

如果断点位置经常执行,则应用条件断点会大大降低执行速度,因为必须停止处理器并且主机会测试条件。

调试时遇到的一个常见问题是,当处理器在断点处停止时,on-chop外设和定时器继续运行,然后在处理器重新启动时导致几个待处理中断具有不良影响取决于您的应用程序优雅处理这种异常时间的能力。 DBGMCU外设支持选择性地停止特定定时器和外设,并支持低功耗模式而无需断开调试器的能力。您可能需要使用这些功能来改善调试体验。

答案 1 :(得分:0)

  

调试器对代码做了什么才能让我看一下   源代码中的寄存器/变量/内存/位置,以及如何操作   这会影响执行时间吗?

这取决于您的调试器。通常,调试器会降低应用程序(应用程序性能),无论它是在模拟器中运行还是在设备本身上根据侵入程度运行。

断点,单步执行会对应用程序的执行时间产生巨大影响,因为它们是侵入性的。另请注意,由于这些功能导致的侵入性又取决于供应商提供的产品。

通常,调试器应读取CPU寄存器和存储器,以便可以向用户显示,但是这个过程会消耗内存/时间,从而导致副作用。

调试器使用的一些调试技术涉及将附加信息合并到应用程序代码中,这反过来会增加可能影响执行时间的应用程序的大小。这种侵入式技术可能会因此附加代码而导致副作用。