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/EVMK2H:代码部分会使 DSP 进入无限循环

Guru**** 2434370 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/793372/ccs-evmk2h-code-section-causes-dsp-to-run-into-endless-loop

器件型号:EVMK2H

工具/软件:Code Composer Studio

您好!

最近、我更新了我的 DSP 代码以添加一些变量到调试观察、但我发现当 DSP 运行 新代码时、它将进入汇编代码中的死循环

我用 C 编写代码,在  EVMK2H 的66AK2H14上工作。  使用 CCS 7.3。

它不应 进入死区环路。 但我使用 XDS Pro Emulator 进行调试,并找到运行到汇编代码死循环中的代码。

这是  我在 CCS 中看到的内容

死区环路所在的函数

代码会导致死循环

DSP 将 在 执行 这一行代码时保持,我 检查汇编代码 并发现它进入死循环

它始终在那里执行汇编代码、DSP 将保持该状态。

当我 更改代码段的名称时、代码 不会进入死循环、DSP 保持运行。

汇编代码更改

但是"ramisr"和"runfastram"代码段位于同一内存、defferent 名称中。

存储器{

………….

DSP_L2_RAM:      O = 0x00800C00 l = 0x0006F400

三、会议的报告

runfastram:> DSP_L2_ram

ramisr:> DSP_L2_ram

问题:

1、我不知道为什么汇编代码会创建死循环。我不在 C 代码中创建任何循环。

2、为什么代码段的不同名称会导致不同的汇编代码?

如果有人 知道什么 ,请告诉我。非常感谢

此致

 

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

    图片没有显示,所以我再放这些。抱歉

    这是 我在 CCS 中看到的内容

    死区环路所在的函数

    代码会导致死循环

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

    DSP 将 在 执行 这一行代码时保持,我 检查汇编代码 并发现它进入死循环

    它始终在那里执行汇编代码、DSP 将保持该状态。

    当我 更改代码段的名称时、代码 不会进入死循环、DSP 保持运行。

    汇编代码更改

    但是"ramisr"和"runfastram"代码段位于同一内存、defferent 名称中。

    存储器{

    ………….

    DSP_L2_RAM:      O = 0x00800C00 l = 0x0006F400

    三、会议的报告

    runfastram:> DSP_L2_ram

    ramisr:> DSP_L2_ram

    问题:

    1、我不知道为什么汇编代码会创建死循环。我不在 C 代码中创建任何循环。

    2、为什么代码段的不同名称会导致不同的汇编代码?

    如果有人 知道什么 ,请告诉我。非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 CCS 8.3中尝试代码。它仍然有相同的问题。DSP 将进入死循环。
    当我更改代码段的名称时。没错
    我在一周内对此非常困惑,所以任何人都有任何建议或建议,请告诉我。
    非常感谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您运行的是什么 Processor SDK RTOS 示例(是否更改?)?
    您还可以在项目中共享 linker.cmd 和.cfg 文件吗? 您的项目的配置可能有问题。

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

    您好、Yordan

    我不更改 Procesor SDK.我始终使用  ti-processor-sdk-rtos-k2hk evm-04.01.00.06

    这是我的链接器.cmd

    e2e.ti.com/.../Jacky_5F00_Linker.zip

    我在项目中没有看到.cfg 文件。 我以前在 CCS 中更改了配置、也许您能告诉我如何获取.cfg 文件吗?

    再次感谢您的回复。

    此致、

    Jacky

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

    您好、Jacky、

    cfg 文件应是项目的一部分(如 Processor SDK RTOS 示例中所示)、请参阅下面的屏幕截图:

    此致、
    Yordan

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

    您好,Yordan

    我再次搜索我的项目。以及 EVMK2H 的其他示例。 我找不到.cfg 文件。

    我看到您的示例正在运行 SYSBIOS。 是否只有 SYSBIOS 创建.cfg 文件?

    我的项目没有在 DSP 上运行操作系统。 但是、如果您需要 CCS 的其他配置、我会尽可能与您分享。

    此致

    Jacky

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

    对迟交的答复表示歉意。

    [引用]我看到您的示例正在运行 SYSBIOS。只有 SYSBIOS 创建.cfg 文件吗?

    我的项目没有在 DSP 上运行操作系统。 但是、如果您需要 CCS 的其他配置、我会尽可能与您分享。 [/报价]

    没关系。

    我已检查 linker.cmd 文件、但看不到任何奇怪的东西。 例如,您曾尝试将 ramisr 放置在不同的存储器中(不是 DSP_L2_ram,而是外部 RAM。

    另请注意、ARM 在 DDR3B 的存储器空间中不能正常工作(DDR3B 主要用于 DSP)、因此请注意这一点。

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

    您好、Yordan

    感谢您的回复。我将尝试在 external_ram memrory 中放置"ramisr"。

    我只是不知道为什么会导致不同的汇编代码。

    我担心下次添加其他代码时会产生其他死循环。

    您是否知道 一些方法或工具来了解 CCS 如何创建汇编执行代码?因此我可以跟踪为什么会发生这种情况。

    此致

    Jacky

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

    让我就这个问题咨询设计团队。

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

    您好、Yordan

    感谢你的帮助。 我将等待您的回复。

    此致

    Jacky

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

    我们已让 DSP 编译器专家对使用编译器生成的代码观察到的这种行为进行评论。 同时、您能否提供编译器版本和用于编译此代码的标志。 此外、代码段是您唯一修改以观察生成的汇编代码差异的东西吗?

    我们的编译器倒角可能还对工作用例和非工作用例中的两个.asm 文件感兴趣、以分析此问题。

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

    您好、Rahul

    我在 v8.1.3编译器版本中尝试使用代码

    代码部分是我唯一修改的内容

    感谢您为我分析此问题。我很长时间内对此感到困惑

    如果您对 我的设置有任何建议或需要其他建议、请告诉我。

    此致

    Jacky

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

    [引用 user="JackyXiaodong"] DSP 将 在 执行 这一行代码时保留,我 检查汇编代码 并发现它进入死循环[/quot]

    在所引用的帖子中,这一行后面是一张图片,显示了与此类似的反汇编...

    00828aa2:CMPGT.L2 0、B4、B0
    00828aa4:BNOP.S1 0x828aa2、4. 

    请注意、BNOP 的目的是前一条指令。  因此、程序控制永远不会留下此代码。   

    我想知道这个错误的 BNOP 指令何时出现。  请将项目置于发生此无限循环的状态。  然后反汇编最终的可执行.out 文件。  在文本文件中将其捕获、并将其附加到您的下一篇文章中。

    反汇编器是一个名为 dis6x 的命令行实用程序。  它与编译器 cl6x 位于同一目录中。  一个典型的位置是...

    C:\ti\ccsv8\tools\compiler\ti-cgt-C6000_8.3.3\bin\dis6x.exe

    在命令行 shell 中,转至包含最终可执行.out 文件的目录,然后运行类似于...的命令。

    C:\my\project>dis6x file.out > disassembly.txt 

    然后将文件 disassembly.txt 附加到您的下一个帖子。

    我需要讨论一个不相关的主题。  我很少在这些帖子中指出英文错误。  我很欣赏那些努力用一种奇怪的英语来描述他们的问题的客户。  但是、你犯了一个错误、使我感到困惑。  希望您不介意我指出这一点。  我们说这种情况是一个无止境的循环。  而不是死循环或死循环。  (有时您可能会看到无限循环。  但无限循环更常见。)   

    谢谢、此致、

    乔治

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

    [引用 user="George mock]我们说这种情况是一个无止境的循环。  不是死循环、也不是死循环。为了与原始海报相比较、我看到了一些 TI 文档中使用的术语"死循环"。 例如 、在 AM572x TRM 的"通过 ROM 代码进行器件初始化"部分中:

    [引用 user="George mock]我想知道这条错误的 BNOP 指令何时首次出现。如果目标内存中的代码已被覆盖、也值得将 CCS 调试器中报告的反汇编与.out 文件的反汇编进行比较 (与之相反、编译器生成错误的指令)。

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

    你好、George

    我得到了反汇编文件、并捕获了循环发生的位置。

    这是 txt 文件

    e2e.ti.com/.../AssemblyCode.txt

    00828aa0  0014ca7a          CMPEQ.L2     B6、B5、B0
    00828aa4  2006a120   [B0] BNOP.S1      $C$L302 (PC+12 = 0x00828aac)、5.
    00828aa8  0200a35a          MVK.L2       0、B4

    看起来还可以。 但我再次使用 XDS pro 进行跟踪。 无限循环仍然会发生

    这是我从"Disassembly"窗口获取的部分

    e2e.ti.com/.../Disassembly_5F00_window.txt

    此外,我再次编译了我的代码,但没有更改任何代码。 我不知道为什么

    00828aa2:   CMPGT.L2   0、B4、B0

    更改为

    00828aa0:   CMPEQ.L2    B6、B5、B0

    但它 仍会进入无限循环

    你在我的英语中指出我的错误并不重要。 最好使用常用的方法来描述

    如果您有任何疑虑、请告诉我

    感谢您的回复 和致以最诚挚的问候

    Jacky  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您指出 TI 文档的描述。 我之前不知道文档中的术语"死循环"。
    我还捕获了调试器 XDS Pro 拆解窗口的一部分
    Disassembly_window.txt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="JackyXiaodong"]我还捕获了调试器 XDS Pro 拆解窗口的一部分
    Disassembly_window.txt 在我之前的帖子 中、反汇编可执行文件中的 AssemblyCode.txt 内容包含以下内容、这看起来很明智:

    00828aa0 0014ca7a CMPEQ.L2 B6、B5、B0
    00828aa4 2006a120 [B0] BNOP.S1 $C$L302 (PC+12 = 0x00828aac)、5
    00828aa8 0200a35a MVK.L2 0、B4
    00828aac $C$L302:
    00828aac 0281926e LDW/D2T2 *+B14[402]、B5 

    而 调试器的 Disassembly_window.txt 输出显示了地址 00828aa4处的指令不同:

    00828aa0:0014CA7A CMPEQ.L2 B6、B5、B0
    00828aa4:0001A120 BNOP.S1 0x828aa2、5
    00828aa8:0200A35A MVK.L2 0、B4
    $C$L302:
    00828aac:0281926E LDW/D2T2 *+B14[402]、B5 

    也就是说、虽然地址00828aa4应该具有 可执行文件中的内容2006a120、但目标上该地址的实际值为0001A120。  程序中的某个内容可能会覆盖地址00828aa4。 您能否尝试:

    a.下载程序。

    b. 下载程序后、在调试器反汇编视图中检查00828aa4的内容、以查看程序下载后是否正确。

    c.设置一个观察点、以便在写入地址 00828aa4时触发。

    d.运行程序。 如果程序中的某个内容覆盖了地址 00828aa4、则观察点应捕获覆盖的来源。

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

    大家好、切斯特

           感谢您的回复、这是一个好建议。但我的反汇编窗口中有一些奇怪的东西

    我尝试用您的方法来调试我的程序。

    我设置断点、下载程序后在"Disassembly"窗口中检查00828aa4。看起来是正确的。

    但是、当我运行代码时 、程序再次在 00828aa4处停止。我检查了反汇编视图。00828aa4的内容 未更改。

    真是太奇怪了。 我的程序仍然在00828aa4中停止。

    您  以前看到过这个奇怪的问题吗?

    我感到困惑、我尝试了几次。我仍然有一些问题

    可能是什么原因导致我的混乱视图无法实时显示消息?

    此致

    Jacky

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

    [引用 user="JackyXiaodong"]我的程序仍然在00828aa4处停止。断点视图的屏幕截图、该屏幕截图指出已在地址0x00828aa4处设置断点、该断点在尝试在该地址执行时会停止程序。

    由于问题可能是由该地址上被正在运行的程序覆盖的指令引起的、因此需要为写入该地址设置一个硬件观察点。 为此、在下载程序后、右键点击 Breakpoints 视图并选择 Breakpoint (Code Composer Studio)-> Hardware Watchpoint。 在硬件观察点对话框中:

    a.将位置设置 为0x00828aa4

    b.将存储器设置为写入。

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

    大家好、切斯特

    我会像您说的那样尝试。 但是 、当我设置硬件观察点并找到0x00828aa4的存储器时、有两种情况

    首先、0x00828aa4的内容正确。 但它似乎会进入同一 个无限循环

    我尝试一些汇编指令进入。 CCS 打印错误消息并停止

    其次,当我运行代码时,我的程序无法启动。 程序会停止我不知道的区域。

    我认为 有些内容可能会跨越内存边界、造成损坏和修改。

    CCS 是否可以有一些工具来捕获溢出? 或者 您 对此有什么想法吗 ?

    此致

    Jacky  

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

    你好、George

    您是否有方法在"不可装配体"窗口中获取所有装配体代码?

    我只能发挥一点作用。

    因此、我可以将其与从.out 文件生成的不可溶代码进行比较。  

    在   运行我的程序时、是否有其他地址内容也被更改。

    谢谢、致以诚挚的问候

    Jacky

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

    大家好、切斯特

    感谢您的建议。正确的是、我 的程序中的某个地址正在覆盖地址00828aa4。

     在使用硬件观察点时、我找不到地址00828aa4的更改内容。

    但我会监控 Memory Brower 上的地址00828aa4,并逐步运行程序。

    我发现  数组的指针确实更改  了地址00828aa4的内容

    谢谢

    此致

    Jacky

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

    你好、 George

    感谢您的帮助。

    我发现  数组的指针确实覆盖 了地址00828aa4的内容。

    谢谢

    此致

    Jacky