This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCSTUDIO3:断点间歇性

Guru**** 657500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1201163/ccstudio3-breakpoints-intermittent

器件型号:CCSTUDIO3

最近我的断点经常被跳过。

它们可能位于具有不同加载和运行地址的代码中。 但它们通常在重定位代码中工作。

我得到了几层深的非法操作错误、我需要将断点设置到接近该点的位置。 我无法单步分层、否则会丢失与其他器件的通信信息。 此外、它还会硬中断、因此复位/重新启动/ GO 不起作用。 必须重新加载闪存。

有什么建议吗?

谢谢。

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:

    请查看此 主题中的同一主题。 请浏览该主题、它应该会解决您的断点问题。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/908898/ccs-tms320f28379d-break-point-problem

    此致、Santosh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢发帖。

    首先、是否有办法强制断点为 SW 而不是 HW? 我看不到任何属性。 这并不是什么大问题,因为可以在 main ()中设置2个移走断点,因此下一个必须是 SW。

    我的前2个断点位于闪存位置、它们工作正常。 然后我有几个 RAM 不能正常工作。 我重建了项目、一直等到调试器停止加载并定位在 main 的开始位置。 此时、我创建了 RAM 断点。 它们都被忽略。

    断点不起作用的代码具有不同的加载地址和运行地址。 在 Device_init()中,代码的开头不会被复制,但以后会有条件地加载。 它会在需要时被复制、因为我可以在这些区域单步执行或运行到光标。 复制完成后、我可以像一个混合的树篱爬行动物一样戳、并按照与我执行的相同功能设置软件断点、然后他们就可以工作了。 有时可能会打一个电话或2个更深的电话。

    因此、我必须找到一种权变措施。 我想出了一组像这样的函数,它们与闪存中的 main ()在同一个文件中。 因此、在我忽略断点的 RAM 函数中、我会插入对如下函数的调用、并且我可以根据需要设置和禁用其中的断点。

    void bp1()
    {
        GPIO_writePin(myGPIO15, 0);     // A line the !@#$%&* optimizer won't delete.
    }

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:

    您是否检查了映射文件,Bp1()函数的地址是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有检查 bp()的地址,因为它可以从任何地方到达。 我使用它作为权变措施、因为其他断点不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:

    您能否检查一下这指向的位置?

    您是否说当您使用此函数 bp()时它有效,但当您直接调用时它不起作用?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我会尽量更清楚地解释。

    我的 main()在闪存中运行,它会调用一个函数来获取用户选择。 当用户进行选择时、这段代码将从闪存复制到存储器中、然后执行。

    main 中的断点和闪存中的其他函数中的断点似乎有效。 对于具有不同加载地址和运行地址的代码、断点通常不起作用。 我将小函数 bp 放在与 main()相同的文件中,这样它就位于闪存中。 重定位后的代码可以找到并调用 BP 函数。 所以我尝试在 bp()中放置一个断点。 由于 bp()位于闪存中,main()旁边的断点在 bp()中起作用。

    一些附加信息。 RAM 中的代码开始运行后、命令"Run to Line"即可正常运行。 如果我开始单步执行 ram 代码、有时我可以在相同函数的前面设置一个断点、它会起作用。

    因此,我使用 bp()让我看到我的代码在崩溃之前在它中所处的位置。 实际上我已经结束了从我正在调试的 RAM 函数中调用的几个函数,如 Bp1()、BP2()、bpEnd()等。 但这是一个尴尬的权变措施、因为生成和加载代码需要很长的时间。

    谢谢。

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:

    我正在研究它,并将在星期一返回给你。

    此致、Santosh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John:

    我没有机会去看它。 如果您已经解决问题、只需与您核实一下?

    此致、Santosh