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.

[参考译文] CCS/TM4C123GH6PM:调试器失去对程序的控制

Guru**** 2473260 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/675038/ccs-tm4c123gh6pm-debugger-losing-control-on-program

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好!

我正在 TM4C123GH6PM 上运行一个项目。 当我运行程序时、它工作正常。

当我调试程序"分步"时、有一条特定的线路、对我编写的函数进行了调用。 该函数使用 SSI 向外部器件发送数据。

当我尝试交叉这一行代码时、即使我尝试单步执行函数调用、编译器也会跳转到内存上的任意位置:

继续按"step"会使程序在代码段之间跳过任意、并且在某个时候使程序可以自由运行、就像我让它继续一样。

有什么想法吗?

要清除:不会向控制台打印错误消息

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

    您好、Baruch、

     当您处于运行模式(而不是单步执行)时、程序是否正确运行?

     您是在 C 代码还是在汇编代码中单步执行?

     如果您单步执行 C 代码并看到代码类型跳跃、则可能是由于编译器优化。 默认情况下、优化设置为2。 您可以更改为"off"、您应该能够看到单步执行不会跳转。 但是、在更改优化之前、首先回答代码是否在运行模式下正确运行的问题。 此外、在最终开发中、您还应将优化保持在适合您的应用的适当级别。

     如果程序即使在运行模式下也无法正常运行、则需要研究另一个问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代码在运行模式下正确运行、优化级别已在0上。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您将优化设置为"off"而不是"0"、这是否会起作用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    噢、我的错、我意味着优化被关闭。 在反汇编和 c 分步运行中都会发生。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的功能是什么? 您能否在函数内的哪一行显示? 您是在 Thumb2还是 ARM 状态下编译的? 您是在解剖器窗口中以 ARM 模式还是 Thumb2模式查看?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    MCU 读取值并将值写入 显示单元的寄存器、然后在第182行 中、开始出现以下情况:

    关于 Thumb2\arm 模式、我不确定在哪里检查它?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    wr8是您自己的函数。 为什么不使用 TivaWare API? 如果要更改 GPIO 引脚的方向、可以使用以下 API。 请参阅 TivaWare 库和示例。

    GPIODirModeSet (uint32_t ui32端口、
    uint8_t ui8引脚、
    uint32_t ui32PinIO)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    wr8写入显示单元。 它使用 SSI、因此在下面有 API 函数。
    但是、我不认为这是问题的原因、因为它运行了几个月、我没有触摸它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Baruch、
    您仍然有问题吗? 如果您执行清理工程并重新编译工程、是否会有所不同?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉我不可用。 我尝试清理和重建项目、但问题仍然在同一个地方出现、恐怕是这样。

    编辑:

    我在此处添加了两个来自反汇编窗口的屏幕截图、其中显示了汇编视图。 第一个打开是在我进入 wr8函数之前(第179行):

    当我单步执行调试器时、调试器会在这里执行以下操作:

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

    Baruch、

    如果您单步执行相关函数而不是单步执行、代码是否正常工作?

    您可以检查的一个设置是 Debug 选项中的"Disable Interrupts"选项。 如果启用了源步进时禁用中断选项、则可能会影响执行。


    此外、为了进一步调试、您可以尝试单步执行汇编代码、并将指令与寄存器/存储器中的值相关联、以查看哪个指令或哪里发生了错误、从而导致指令进入无效存储器。 这可能会为问题的根源提供一些额外的线索。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不、当我尝试单步执行函数时、会出现问题。 此外、即使我在代码流中的任何位置放置一个断点、也会在该函数之后发生。
    我今天不在办公室、我将在星期日检查"可中断"选项并更新您的信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我选中了它、设置就像您的屏幕截图中所示。 为装配体禁用、为源启用。
    我稍后将按照您的建议、尝试跟踪汇编分步。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢大家付出的时间和努力、问题得到了解决。 非常感谢您的帮助。
    显然,两个端口缩短了,造成了问题。 拔下电线使程序正常工作。