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.

[参考译文] TMS320F280049:DCL 触发 ITRAP

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/985659/tms320f280049-dcl-triggering-itrap

器件型号:TMS320F280049
主题中讨论的其他器件:C2000WARE

您好!

我 一直在研究一个希望使用数字控制器库(DCL)的项目。 我已经按照用户指南 SPRUI31的指示 进行了操作、工程会编译、但调用 DCL 函数时、程序会崩溃。

我一直使用 C2000Ware 中的 PSFB 项目作为参考、以帮助我了解正在发生的情况、在查看反汇编时、我注意到一些有趣的事情。 在参考工程中、反汇编与 DCL 的.asm 文件匹配。 但是、在我的项目中、每一行之间都存在一条 ITRAP0指令。 下面是两种情况的屏幕截图。 是否有什么想法会导致差异?

我在具有相同 XDS200的 F280049上的同一硬件中运行这两个项目。 我使用的是相同版本的 CCS (10.1.1.00004)编译器(TI v20.2.1.LTS)。  

如果有任何帮助或建议可以指明正确的方向、我们将不胜感激。

此致、

Luccas  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是~,在我的项目中,/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/985659/tms320f280049-dcl-triggering-itrap 每一行都有一条 ITRAP0指令。 [/报价]

    显示的地址表示 DCL 函数正在 RAM 中运行。

     《C2000数字控制库版本3.3用户指南》包含:

    [引述]

    在 FPU32或 C28x 内核上运行的 DCL 函数可以分配给链接器命令文件中的特定存储器块。 通常将控制器功能置于零等待状态内部 RAM 中、因为这允许控制器功能以器件的最高速度运行。 请注意、所有 CLA 函数都必须从内部零等待状态 RAM 运行。

    所有 DCL 库函数都放置在用户定义的代码段.dclfuncs 中。 下面显示了一个示例、展示了如何将此部分映射到内部 L4 RAM 存储器块中。

    dclfuncs:>RAML4,page = 0

    另请参阅项目示例(第5章)中的链接器命令文件 F28069_DCL.cmd。 在独立应用中、代码必须存储在非易失性存储器(例如内部闪存)中、并在运行时复制到 RAM 中。 有关如何执行此操作的信息,请参阅应用手册“从 I 运行应用程序”

    [/报价]

    [引用 userid="224716" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/985659/tms320f280049-dcl-triggering-itrap "]在参考项目中,反汇编与 DCL 的.asm 文件匹配。[/quot]

    我希望参考工程具有将 DCL 函数从闪存复制到 RAM 的代码、但这在您的工程中是缺失的。

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

    您好、Luccas、

    正如 Chester 指出的、您在项目(RAM)中显示的存储器范围全部为0x0000、紫色措辞仅显示参考/预期程序、蓝色指令为实际反汇编。

    如果您要构建闪存程序(加载到闪存并在 RAM 中运行)、则需要将 DCL 汇编函数放入要在启动时从闪存复制到 RAM 的组中。 DCL 库将所有 asm 函数放入一个名为"dclfuncs"的段中。 您应该添加程序来复制它、也许可以与".TI.ramfunc"一起使用、如下所示。 请确保将加载和运行部分替换为您选择的部分。 谢谢。

         组
      {
          .TI.ramfunc
          Dclfuncs

      }LOAD = FLASH_BANK0_SEC6、
            运行= RAMGS0GS1、
            Load_start (RamfuncsLoadStart)、
            load_size (RamfuncsLoadSize)、
            Load_End (RamfuncsLoadEnd)、
            RUN_START (RamfuncsRunStart)、
            run_size (RamfuncsRunSize)、
            RUN_END (RamfuncsRunEnd)、
            PAGE = 0、ALIGN (4)

    韩文

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

    切斯特、您好!

    感谢你的帮助。 我的链接器已在链接器中正确映射、但我没有从闪存复制到 RAM。 我向器件初始化例程添加了以下 memcpy、现在 DCL 函数按预期工作。  

    memcpy (&isrcodefuncsRunStart、&isrcodefuncsLoadStart、
    (size_t)&isrcodefuncsLoadSize);

    再次感谢您的帮助!

    Luccas

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

    您好、Han、

    实际上、我正在构建一个闪存程序。 我已将 dclfuncs 添加到我的链接器文件中、但在初始化期间我没有将其从闪存复制到 RAM。 在我解决这个问题后、DCL 函数按预期工作。

    感谢你的帮助!

    Luccas

x 出现错误。请重试或与管理员联系。