首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPLAB + XC8断线错误

MPLAB + XC8断线错误
EN

Stack Overflow用户
提问于 2018-03-28 14:29:26
回答 2查看 1.2K关注 0票数 2

我遇到了一个非常烦人的问题,已经花了好几个月的时间。

我在MPLAB X中有一个项目。当我使用一个行断点时,它在调试我的项目时根本不会在正确的行上中断。

I使用MPLAB v4.15

这就是实际发生的事情:

无论断点在哪里,调试器都不会在正确的位置中断。

  • 如果我把一个断点放在某个地方,它总是在错误的位置断裂。
  • 如果我重新启动调试,它会在相同的错误位置中断
  • 如果更改断点位置,则程序实际中断的位置不同,但在重新启动程序时保持不变。

更多信息:

这一切为什么要发生?

还有更多的人有这个问题吗?

我该怎么解决这个问题?

编辑

遗憾的是,K_Trenholm提出的解决方案对我没有用。我把3个"NOPs“放在一个函数中,但是它没有像你建议的那样起作用。见下图:

但我得到的是:

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

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

EN

回答 2

Stack Overflow用户

发布于 2018-03-28 14:55:04

我想到了两件事:

1)编译器优化在调试时会导致断点位置/值的问题。在调试时,关闭优化(如果可能的话,在您的示例中,您的代码大小可能会出现在上限上)。

2)断点“打滑”。请参阅http://microchipdeveloper.com/tls0201:skid-effect#top-of-page

根据我所看到的,一种解决这个问题的方法是在您计划放置断点的行之后添加一些NOP指令。这将确保任何“打滑”都不会执行更多的代码。

票数 1
EN

Stack Overflow用户

发布于 2018-06-07 08:06:58

中断发生的指令将始终完全执行,管道中的任何挂起的内容也将执行。对于单个循环指令,这增加了一个指令打滑。对于多个循环指令和分支,它会添加多个循环。因此,如果要避免将调试器跳转到子例程中,就必须在断点后面包含一些Nop

示例:

代码语言:javascript
复制
void main (void)
{
    int x = 0;

    x++1;                  //put Breakpoint here
    Nop();
    Nop();
    Nop();                 //Debugger will stop here
    foo(x);                //so foo() is not called
}

根据所使用的MCU,调试器在命中断点时会产生“打滑效应”。在停止之前,调试会话将执行最多两个额外的指令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49537240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档