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.

[参考译文] TMDSDOCKH52C1:硬件断点

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/989804/tmdsdockh52c1-hardware-breakpoint

器件型号:TMDSDOCKH52C1
Thread 中讨论的其他器件:controlSUITE

大家好、

你好。

我代表我们的客户发布此问题。 请帮助我们了解您在该部件方面的专业知识。

”我买了一张 F28M35控制卡。 我学习了有关 TI 技术讲座(training.ti.com/c2000-f28m35x-microcontroller-workshop) 、我将代码建立在实验室中、同时还将提供 ControlSuite 中的示例。 在实验课程中、我们添加了存储器映射文件(扩展名为.cmd)。 该存储器文件将代码加载到闪存中。 在实验课程中、我们添加了存储器映射文件(扩展名为.cmd)。 该存储器文件将代码加载到闪存中。 但是、当我在闪存中调试代码时、我仅限于硬件断点。 我想将其加载到 RAM 中。 我在控制套件中加载了 RAM 映射文件。 当代码变大时、它会显示消息、表示代码不能放入可用存储器中。 我更改了存储器映射文件以为文本会话分配更多空间。

它构建良好。 然后、我开始调试 M3 CPU、连接 C28 CPU 并将此代码加载到 C28 CPU 中。 加载此代码时、它不会在 main 中停止它会自动开始运行、但它永远不会进入主函数。 内存映射正常、可以构建、但我认为它可能与问题有关。 最大的问题是 C28 CPU 开始运行、而永远不会进入主函数。"


此致、
卡洛

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

    您好、Carlo、

    在链接器命令(.cmd)文件中需要进行几项更改。

    1.对于.text 段、RAML0L1和 RAMS0之间应存在或

    .text           :> RAML0L1 | RAMS0 | RAMS1,   page = 0

    此外、由于您要加载到 RAM 中、因此无需复制.TI.ramfunc 段。 您可以使用以下语句、而不是从 RAM 加载和运行。

    .TI.ramfunc:{}> RAMM0,     PAGE = 0

    加载程序后、您是否尝试单步执行源代码? 。

    此外,您还可以参考随附的 cmd 文件。 这也包含在 controlSUITE 的文件夹"C:\ti\controlSUITE\device_support\f28m35x\v220\F28M35x_common\cm"中。

    /cfs-file/__key/communityserver-discussions-components-files/171/F28M35x_5F00_generic_5F00_C28_5F00_RAM.cmd

    此致

    Siddharth

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

    您好  Siddharth、

    感谢您的回答。 我们的客户已经实现了您建议的有关链接器命令文件的修改、但他们在正确运行代码方面没有成功。

    随附的是主文件、链接器命令文件和屏幕截图。 根据客户的说法、他们已经启动了与 M3内核的调试会话、连接 C28 CPU、构建 C28代码、然后加载 C28二进制文件。 在 main_C28.c 的第52行中、调用了在另一个源文件中定义的子例程。 当他们注释此行并加载代码时、调试器会按预期在主函数的开头停止。 当他们取消注释此行、构建并加载代码时、似乎它没有进入主函数。 调试器视图显示代码正在运行、如屏幕截图所示。

    e2e.ti.com/.../28M35H52C1_5F00_RAM_5F00_lnk_5F00_c28.cmd

    e2e.ti.com/.../main_5F00_C28.c

    感谢您的进一步帮助。

    此致、
    卡洛

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

    您好、Carlo、

    看起来"equipment_init()"破坏了一些内存、导致了这种行为。 您能否请求客户单步执行代码而不尝试运行 main 函数?  您还可以要求他们查看映射文件、并查看各段的放置是否正确。

    此致

    Siddharth

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

    您好  Siddharth、

    以下是我们从客户处收到的回复:

    我尝试按照建议在不运行 main 函数的情况下单步执行代码、我希望我按照您的预期继续操作。 如果我错了、请告诉我。 以下是我提出的意见:

    当我将调试器配置为运行到_args_main 时:

    如果注释掉了行 EQUIP = DEVICE_INIT();,调试器会按预期在 args_main.c 中的_args_main()函数开始处中断。 恢复代码执行后、控制卡中的 LED 闪烁、表明应用程序正在运行。

    但是,如果没有注释掉这一行,代码将自由运行,而不会在_args_main()或其它任何位置停止。 这是相同的意外行为。 控制卡中的 LED 不闪烁。

    当我将调试器配置为运行到_c_int00时:

    如果注释掉了行 EQUIP = DEVICE_INIT();,则调试器不会在代码中的任何位置中断,但 LED 闪烁,表明应用程序正在运行。 如果我在 ADC1_ISR 函数内设置一个断点、则调试器会运行到其中。 器件的行为符合我的预期。

    但是、如果此类行未注释掉、则 LED 不会闪烁。 如果我在 ADC1_ISR 函数内设置断点、调试器永远不会运行到其中。 当我暂停调试器时、它会显示一条消息"break at address "0x3fefa6"、no debug information available、or outside of program code"。

    我的另一个观察结果:我打开了存储器浏览器、并在程序部分搜索了主符号、如屏幕截图所示。 当注释出有问题的函数调用时、主函数位于地址0x8D1D。 根据存储器映射、它位于 RAML0L1区域内。 但是,当对 DEVICE_INIT()的调用未注释时,主符号位于地址0xD051处,该地址位于 RAMS1区域中。 我想知道这是否与我遇到的问题有关。

    这些信息是否有用? 您是否对我如何解决此问题有任何想法? 我是否可以提供更多信息或运行测试?

    我删除了包含"void equipment_init();"的第17行。 实际上、我调用的函数在另一个源代码中定义并在头文件中声明。 不幸的是、我无法分享这些内容、但我认为它们不包含任何可能损坏存储器的内容。 我在其他平台上执行了这些操作、没有发现任何问题。 它们只是包含标准 C 代码。

    此致、
    卡洛

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

    您好、Carlo、

    感谢您的详细分析。

    您提到,当对 DEVICE_INIT()的调用未注释时,执行甚至不会到达主函数。 这表示在初始化过程中存在一些问题。 DEVICE_INIT()函数是否有任何全局变量? 您能不能弄清楚它在_c_int00函数执行期间被卡住的位置。 我认为它可能会在全局变量的自动初始化期间卡住。

    此致

    Siddharth