MplabX + XC8在错误的线路上断裂 我遇到了一个非常烦人的问题,几个月来已经花了很多时间。 我在Mplab X中有一个项目。当我使用线路断点时,它根本不会在正确的行上破裂...

问题描述 投票:0回答:1

这是实际发生的事情:

没有问题在哪里,调试器永远不会在正确的位置中断。 This is where I have the breakpoint, I even added the __nop() operation, but also tried it without it

如果我在某个地方放了一个断点,它总是在错误的位置上断裂。

如果我重新启动调试会破裂在同一错误的位置The debugger breaks at the very, very wrong place. This happens every time, no matter where the actual breakpoint is.

如果我更改断点位置,则程序实际断裂的位置是不同的,但是当我重新启动程序时再次保持不变。

有更多信息:
  • 为什么这是发生的?
  • 有更多的人有这个问题吗?

我如何解决?

eDitproject information aadly,K_Trenholm建议的解决方案对我不起作用。我将3个“ NOP”放在一个功能中,但它没有您建议的工作。请参阅下图:

但我得到的:

我想补充一点,我尝试了各种分支的组合。无论我做什么,该程序总是在同一情况下停在同一情况下,如上图所示。

感谢您的答复,甚至对如何解决它有任何想法非常有帮助。 如果您还有其他想法,如果您会分享它们,我将非常感谢!

3 NOPs inserted in a function想到两个事情:

1)编译器优化会导致调试时断点位置/值的问题。 调试时,请关闭优化(如果可能的话,在您的示例中,您在代码大小方面在天花板上抬起)。

2)断点“打滑”。 请参阅

Http://microchipdeveloper.com/tls0201:Skid-Effect#top-of-page

wrong breakpoint从我所看到的,一种解决这个问题的方法是在您打算放置断点的行之后放置几个NOP说明。 这将确保任何“打滑”不会执行更多代码。

断裂的指令将始终完全执行,并且管道中未决的任何内容也将执行。对于单个周期说明,这增加了一个指令。对于多个周期说明和分支,它增加了多个周期。因此,如果您想避免 要将调试器跳入子例程中,您必须在断点后面包括一些。

示例:

pic microchip mplab 8-bit xc8
1个回答
1
投票

对使用的MCU进行取决于调试器将在击中断点时引入“打滑效果”。在停止之前,调试会议最多将执行两个额外的说明。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.