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.

[参考译文] 编译器/TMS320F28069M:修改变量 wu't 强制调试器进入代码段。

Guru**** 2589280 points
Other Parts Discussed in Thread: AM3359

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/663606/compiler-tms320f28069m-modifying-a-variable-won-t-force-debugger-to-enter-a-code-section

器件型号:TMS320F28069M
主题中讨论的其他器件:AM3359

工具/软件:TI C/C++编译器

您好!

这种情况不时发生,这是不可解释的,想知道是否有人能够让我了解我在这里看到的情况。 编译器是 CCS V7最新版本上的 TI v16.9.6.LTS。

基本问题是、我使用函数的返回值来确定我应该采用 if 语句的哪个分支(下图)

我在观察窗口中有变量(全局变量或局部变量、不会产生任何影响)、并且在 if 语句中设置了一个断点。

下面显示了令人失望的列表。

无论发生什么情况、我都无法更改 u8Test 的值以强制调试器进入 if 语句的第一个分支。  我怀疑编译器会以静默方式删除代码(因为当我在第218行放置断点时会抱怨 AET)、但优化已关闭、并且完全符号调试已打开。

我认为在第215行设置断点时、它实际上会在地址0x3F4e7A 处设置断点(如 dissam 中所示)、 但这会防止寄存器 AL 加载 u8Temp 的值、因为我认为断点应该位于 dissam 中 if 语句之前的行?

有什么建议吗?

谢谢

Stomp

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

    拆卸看起来正确、并且在我所期望的位置发生了损坏。 如果您尝试通过"Expressions"窗口更新该值、则在此处不起作用、因为比较基于累加器(ACC)中的值、因为该值已加载到那里、无需从存储器重新加载 (在表达式窗口中更改时要更新的位置)。 当您到达第一个断点时、在寄存器窗口中、更改 ACC 中的值以强制进入该 IF 条件。

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

    与其他 TI MCU 相比、TMS320调试的实现方式有何不同? 这里有 MSP430、RM48、RM57、AM3359的 TI 器件的整个库、这些器件都不会表现出这种行为。

    我们可以专门做些什么来实现所需的调试功能吗?

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

    C2000是其自身的独特架构、因此它不一定与其他 TI 器件保持一致。 这种行为就是编译时确定的指令。 您可以尝试使 u8Test 变得易失性、这可能会迫使它在执行检查之前再次从内存中读取数据。 如果不想编辑 ACC、在返回函数之前更改函数中的值的另一个选项。

    此致
    Chris