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.

[参考译文] MSP430FR5964:调试器在负载上不会断点

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1378344/msp430fr5964-debugger-not-breakpointing-on-load

器件型号:MSP430FR5964

工具与软件:

在离开 CCS 一段时间后、我回到那里、虽然有一些现有的代码、但在加载 一些测试硬件时我会看到一些奇怪的事情。 我希望这不仅仅是因为我生锈了!

在某些情况下、加载后、逻辑在 main()处被正确断点。 但是、只需对底层代码进行一些极小的更改、逻辑就不会在进入时断点、"Debug"窗口会将逻辑显示为正在运行。 更糟糕的是、无法暂停代码-唯一有效的按钮是终止代码。 即使是尝试在早期逻辑中添加显式断点也会被忽略。

我正在运行 CCS 12.2.0.00007 -这是之前构建和运行代码的版本。

这感觉就像代码中的某个东西正在设法破坏初始化元数据中的某些东西。 我甚至不知道从哪里开始寻找,所以任何帮助隔离这种赞赏.

Andrew

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

    这种症状表明 CPU 在初始化过程中重置(重复)、这样它就不会到达 main()的第一行。 当我遇到这个问题时、我尝试在复位入口点设置一个断点、然后逐步执行。 入口点名称类似于"_c_int00_" "但在夹我用"硬复位"(工具栏按钮看起来像 SOIC 芯片)把我带到那里。

    出现这种情况的一个常见原因是有"过多"数据、从而使得 C 语言初始化花费的时间过长并且安全装置被触发。 您正在进行何种"最小的更改"? 您还可以通过定义"void _system_pre_init (void){WDTCTL = WDTPW | WDTHOLD;return (1);}"等函数来避免这种情况(抢占)。

    MPU 也可以使这种情况发生,如果你不是很正确(经验的声音在这里)。 您是否正在使用(重新配置) MPU?

    您是指"测试硬件";您能说明这一点吗? 有些定制电路板异常可能会导致这种症状(也是如此)、但我不确定是否可以枚举所有异常。

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

    Bruce。

    感谢这一点-听起来确实是可行的、而添加额外代码和底层初始化可以解释公开的代码为何会影响加载/启动。 需要更多的研究,因为我不是完全相信,但最糟糕的是,它给了我一个地方开始。 代码更改肯定涉及大量数据、并且在我获得控制权之前并未考虑对运行的标准初始化代码产生任何影响。  现在来回答您的其他问题;

    测试硬件是定制电路板、支持我升级到的代码。 此电路板设计基本持续运行了大约3年、在有或没有 JTAG 支持的情况下都没有出现问题。 要更改的代码是 此硬件上运行的正常逻辑、因此捕获另一个电路板实例是开始测试的逻辑位置。 我认为问题不存在。

    在我们的"微小的变化",这是我必须承认我所有的罪!

    大约12个月前、我努力了解以前从未使用过的外设。 我只是抓取了这个现有的项目,并在正常初始化后立即将一小段代码放入 main()中,而不是在 CCS 中设置一个新项目来玩游戏。 其结构为一个无限循环,字面上是"while (1 ){}",测试逻辑嵌套在循环中。 这意味着从不触发正常逻辑。 但是我忽略了删除这个测试循环、因此当我添加新功能时、这个测试循环仍然存在。 将新代码加载到 MSP 后、它便可以正常启动、但当然会在这个循环中挂起。 因此,我支持这个测试循环,并且启动立即从未到达 main ()断点。 我甚至离开了测试代码,但抑制循环(将"while true"更改为"while false")-当为 true 时,代码启动正常,当为 false 时,代码从不会到达 main ()的断点。

    奇怪…… 开始想知道与优化相关的某些操作是否会影响加载/启动行为。 优化应该关闭(-O0)、但 GCC 中的优化在最好的时候会变成黑盒。 我不会认为任何优化都可以识别不需要初始化的无法访问的数据、但发生了一些奇怪的事情。 但我猜这与我添加的内容有关。 新逻辑很容易隔离和删除、所以我的初始策略是将其移出、恢复到有效的配置、然后从该配置继续。

    谢谢你的想法-我会让你保持张贴!

    Andrew