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.

[参考译文] TMS320F28388S:缺少 CLA 任务代码

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1439284/tms320f28388s-cla-task-code-missing

器件型号:TMS320F28388S
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我在构建 CLA 代码时没有出现任何错误或警告。  项目的 cmd 文件将代码存储在闪存中、并从 RAM 运行。  但当我查看工程的映射文件时、它会将代码存储在 RAM 中、并从相同的地址执行。  长度为0。  cmd 文件中的加载值与我们用于其余代码的加载值相同。  那么、有两个问题:

为什么它同时为加载地址和运行地址使用 RAM 值?

长度为什么为0?

谢谢!

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

    尊敬的 Ed:

    您是否正在使用 C2000ware 中的2838x_flash_cla_lnk_cpu1.cmd 文件(未进行修改)?  此外、为了进行验证、您已将项目切换到闪存构建、对吗? 要执行此操作、请右键点击工程>> Build Configurations >> Set Active >> CPU1_FLASH。  

    它在映射文件中的哪个位置显示了该内容? 当您使用闪存构建编译 CLA 工程时、Cla1ProgLoadStart 应该是闪存中的位置、Cla1ProgRunStart 应该是 LSRAM 位置、如下所示:

    此致、

    Delaney

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

    尊敬的 Delaney:

    这发生在我们的产品项目中、而不是示例项目中。  我已经使用示例项目作为我们的参考、并将适当的 cmd 文件项复制到我们的 cmd 文件中。  我认为无关紧要、但我们使用 COFF 输出。  因此、对于 Cla1Prog、在 cla_ex1_asin 示例项目中、我们使用的是:

     

      Cla1Prog        :  LOAD = FLASH4、

                           RUN = RAMLS5、

                           Load_start (_Cla1funcsLoadStart)、

                           Load_End (_Cla1funcsLoadEnd)、

                           RUN_START (_Cla1funcsRunStart)、

                           Load_Size (_Cla1funcsLoadSize)、

                           对齐(8)

    并将其修改为:

     

      Cla1Prog        :  负载= 、

                           Run = RAMLS6、

                           Load_start (_Cla1funcsLoadStart)、

                           Load_End (_Cla1funcsLoadEnd)、

                           RUN_START (_Cla1funcsRunStart)、

                           Load_Size (_Cla1funcsLoadSize)、

                           对齐(8)

    其中 our_code_area 位于包含其余代码的闪存空间。

    在示例工程中、我在.cla 文件中没有看到 Cla1Prog 段语句。  因此、除了编译器用户指南之外、我不知道 CLA 代码如何与 Cla1Prog 部分关联、因为编译器用户指南表明它会自动给定 Cla1Prog 部分。

    谢谢!

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

    尊敬的 Ed:

    仅供参考、C2000ware 中针对每个器件的所有给出/建议的链接器 cmd 文件都位于以下文件路径中:[C2000ware install]/device_support/f2838x/common/cmd/。

    DATA_SECTION pragma 只应在 C 文件中定义、并且只适用于要放置在共享内存中的特定变量(这必须由主 CPU 来完成)。 如果您已在链接器 cmd 文件中包含 Cla1Prog 语句、那么您 无需添加 DATA_SECTION pragma 即可将 CLA 程序分配到正确的存储器。 CLA 编译器知道要在链接器 cmd 文件中查找 Cla1Prog 段、因此不需要在其他任何位置定义它。

    要具有 CLA 支持的链接器 cmd 文件、您还需要在 BSS_CLA、CONST_CLA、暂存区段的段定义中添加。 您可能会感兴趣。 如果您已经有这些、请在此处发送链接器 cmd 文件(作为文件)、然后我将看看是否需要添加任何其他内容。

    还要验证您的项目属性中是否启用了 CLA_support。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的参考。  我一直在使用该区域的 cla_ex1_asin 项目作为我的参考。

    我感觉 Cla1Prog 段是自动创建的、就像.text 段那样、但在文档中找不到任何可验证的内容。

    我有除.const_cla 之外的所有这些项、因为我还没有需要它。  (在代码开发过程中、稍后会用到它。)  我已附加了一个版本的 cmd 文件,我们的 IP 已被删除。  我将其扩展名为.txt。

    cla_support 设置为 cla2。

    谢谢!

    e2e.ti.com/.../CLA-cmd-file.txt

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

    尊敬的 Delaney:

    一些可能有用的附加信息。

    主工程位于 C++中、C 文件被视为 C++。  CLA 文件的属性发生了更改、使其在编译器中看起来像一个 C 文件。  此外、我们还使用 COFF 输出。  我不知道二者的混合体是否导致 CLA 代码不出现在输出中。

    谢谢!

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

    尊敬的 Ed:

    Delaney  目前不在办公室,直到节假日结束。 请预计响应会有延迟。 感谢您的耐心。

    此致、

    Aishwarya.

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

    好的。  感谢大家的参与。

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

    尊敬的 Delaney:

    希望您有一个美好的假期。

    三个方面:

    我已将该项目缩减至非常小的项目、并且不包含我们的 IP、但仍与问题重复。  如果需要帮助、我可以将其压缩并发送给您。

    作为一个实验、我为 CLA 创建了一个汇编文件、并把一个带有指令的函数放在其中。  该问题在映射文件中显示、包含预期的大小以及用于加载和运行的合理地址。  因此、我还需要在 CLA 文件或 CLA 文件的选项中执行其他操作、以便编译器/链接器将代码放入输出中。

    作为额外的实验、在汇编文件中、我还创建了一个名为_Cla1Task1的函数、并将其设置为全局函数。  这导致了链接错误、这意味着链接器可以在 CLA 文件中看到该例程。  但某种因素会阻止它放置在最终代码中。

    谢谢!

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

    尊敬的 Ed:

    很抱歉耽误你的时间。 您可以将项目发送过来、我来看一下。

    需要验证的另一点是、您是否在运行时将 CLA 程序从闪存复制到 RAM? 对于闪存构建、您将需要主 CPU 初始化代码中的代码、如下所示。

    此致、

    Delaney

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

    尊敬的 Delaney:

    我已附加该文件。  您需要重命名它以为其提供 zip 扩展名。

    我尚未编写代码以将其复制到 LS RAM、因为映射文件中的长度为零。  但这里有两件事是令人感兴趣的。  第一个是 lst 文件显示非零长度的代码。

    第二种是当我用汇编语言编写一些 CLA 代码时、它确实会显示在映射文件的长度字段中。

    谢谢!

    e2e.ti.com/.../CLA.txt

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

    尊敬的 Ed:

    下载.txt 并重命名为 zip 后、我遇到了解压 zip 的问题。 E2E 应该允许您使用 Insert >> Image/video/file> Upload 将 zip 文件附加到响应中、可以尝试一下吗?

    此外、详细查看链接器 cmd 文件后、我认为您仍然想添加 SECTIONS 指令 CONST_CLA、以防链接器将您的 CLA 代码的一部分视为属于这些段之一。 如果链接器不知道将其放置在何处、则可能会导致一些奇怪的行为。  

    此外、我想我之前提到过这一点、但只是想确保您在构建之前切换到 Build Configurations >> Set Active >> CPU1_FLASH、是正确的吗?

    此致、

    Delaney

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

    好的。  这是第二次尝试发送 zip file.e2e.ti.com/.../CLA.zip

    似乎已经做到了。

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

    抱歉。  未涉及其他项目。

    我将 cmd 文件减少到只使用当时所需的那些东西。  还不需要 CONST_CLA、因为我尚未实现该部分。

    我不理解构建配置问题。  我们的项目仅具有默认(调试)配置。

    谢谢!

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

    尊敬的 Ed:

    在您发送的链接器 cmd 文件中、 Cla1Prog 的运行设置使用了 APP_CODEAREA、但我看不到它在文件中的定义位置。 您需要 改用 my_flash_space 内存范围、以便将其加载到闪存中并从 LSRAM6运行。

    此致、

    Delaney

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

    尊敬的 Delaney:

    有。  你是对的。  我错过了,当我降下来的项目发送给你。  但是、即使进行了该更改、 Cla1funcsLoadSize 仍为0。

    谢谢!

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

    尊敬的 Ed:

    编译器优化似乎设置为4级。 我想编译器可能会优化您的 CLA 代码-您能否尝试关闭优化、看看这样是否可以解决问题? 要执行此操作、请右键单击项目>> Properties >> Build >> C2000 Compiler >> Optimization。

    此致、

    Delaney

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

    尊敬的 Delaney:

    我尝试了所有优化设置、并按照您的建议将其关闭。  结果是相同的。  代码长度为0。

    谢谢!

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

    您好!

    Delaney 在下周不在办公室、请期待延迟回复。

    此致、

    Ben Collier

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

    尊敬的 Ed:

    只是更新一下、我目前正在研究这个问题。 我仍然无法准确地缩小导致  代码中 Cla1funcsLoadSize 为零的范围。 出于好奇心、如果你没有遇到任何构建错误、 当你连接至调试器(用于你的完整代码)时、你的 CLA 任务是否能够执行? 因为初始化 CLA 并且没有权限(也没有 driverlib 支持等)的 C28x 代码、所以我很难用削减项目来尝试这一点。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的参与。

    我们未遇到构建错误。  我没有尝试执行 C 语言代码、因为长度是0 (没有要复制到 CLA RAM 中的内容)。

    但在这种情况下、我编写了一些具有长度和合理值的汇编代码。  几分钟前、我能够使用任务的软件启动来执行我的第一条指令。  该指令只是 MSTOP、因此我还没有在执行方面做很多事情。

    很抱歉、我没有更多可提供的。

    谢谢!

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

    尊敬的 Ed:

    此时是否已解决此问题? 如果是、我将关闭该主题。

    此致、

    Delaney

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

    尊敬的 Delaney:

    还没有。  但我一直在 CLA 汇编中编写代码、该代码会如预期的那样显示在输出中。  最好弄清楚这一点、以便稍后我可以将其移回 C。

    谢谢!

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

    尊敬的 Ed:

    我仍在研究这个问题。 为了验证、您是否在此项目中使用了本线程中为编译器选项提供的解决方案: (+) TMS320F28388S:CLA 文件可以在 C++项目中编译? - C2000微控制器论坛- C2000 ︎ 微控制器- 用于为 CLA 编译 C++代码的 TI E2E 支持论坛?

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的支持!

    为了进一步工作、我 一直使用 CLA 汇编语言开发代码。  出于性能方面的考虑、我相信我会继续使用该语言。

    不过、在将来、我们可能还想在 CLA 上运行其他项目、而不必以汇编语言编写这些项目会很好。

    但回到您的问题、我为您提供的项目不会有这种变化。  它 会导致我们的内部版本中出现其他问题。  但我认为在需要修复时、我们可以修改相应的文件、从而不再需要该选项。

    很抱歉、我无法为您提供更多帮助。

    此致、

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

    尊敬的 Ed:

    好的、我看到了。 如果 C++编译器选项是问题的根源、我曾尝试缩小范围。 在常规 C 中编译时、您仍然会看到空映射文件吗? 如果不是、我建议进一步询问有关其他线程的问题、以便编译器专家能够回答、因为我不熟悉该权变措施(或它可能导致的任何问题)。

    此致、

    Delaney

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

    尊敬的 Delaney:

    我无法使用 C 语言编译、因为我们的代码是用 C++编写的。  我试图引入较旧的代码、其中 CLA 代码是用 C 语言编写的、但与 CLA 汇编中的新代码有太多冲突。  很遗憾、用我们最新的代码构建代码并不是目前可行的。  但我预计仍然会失败。  我发送给您的这个小项目确实复制了这个问题。

    您提到了另一个主题。  那是什么线程?

    抱歉、我没有为您提供的更多信息、

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

    尊敬的 Ed:

    我在这里讨论了这个线程: (+) TMS320F28388S:CLA 文件可以在 C++工程中编译吗? - C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛 。 再次查看后,我意识到我误解了这个线程。 编译器专家的指令允许您使用 C++编译 CLA 文件之外的所有内容、CLA 文件可以 用 C 语言编写(和编译)

    我仍然怀疑这些编译器配置可能是空 CLA 代码的原因。 您能否询问此问题/链接该线程上的示例代码、以便编译器专家进行加权?

    此致、

    Delaney

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

    尊敬的 Delaney:

    该主题似乎已锁定、因为我无法添加到该主题。

    但我已将简化的工程附加到该线程中。  我希望有一种方法可以将其连接到另一线程。

    谢谢!

    e2e.ti.com/.../CLA-Code-Has-Lenght-0.zip

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

    尊敬的 Ed:

    接下来看看我是否可以在编译器专家中直接循环到该线程。

    此致、

    Delaney

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

    尊敬的 Ed:

    为了进行更新、我一直与编译器专家合作、我能够在您发送的缩减项目中修复该问题。 由于 main.cpp 文件中没有引用 CLA 任务符号、因此链接器本质上是在丢弃函数定义。 要解决削减项目中的问题、您可以执行以下操作:

    • 添加一个包含 CLA 任务函数原型的头文件、并 在 main.cpp 和 cla_project.cla 文件中包含该头文件。

    • 引用 main.cpp 文件中的 CLA 任务名称。 例如、我在 main.cpp 中执行了以下操作:

    您的常规项目的 main.cpp 中是否有这些参考资料? 为了正确设置 CLA、你必须以这种方式引用符号、所以如果这样做、这不是你的问题。 但是、如果你还没有将所有 CLA 配置添加到 main.cpp 文件中、这就是映射文件缺少你的 CLA 程序代码的原因。

    此致、

    Delaney

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

    尊敬的 Delaney:

                   我对反应迟缓表示歉意。

                   我找到了一个旧版本的项目,我已经存档和忘记。  很抱歉、我没早点找到它。  其中包含.cla 文件、以及我为 CLA 创建的 asm 文件的开头。  构建中包含 asm 文件后、我可以看到代码大小。  如果我排除它、以便 CLA 文件是唯一生成的文件、那么大小为0。

                   因此、我已排除 asm 文件并修改了系统、以便代码将 Cla1Task1分配给 MVECT1。  我还尝试了像您一样将其分配给临时变量。  结果与之前相同、长度为0。  我以前没有注意到的是 LoadStart 和 LoadEnd 的值位于 RAM 中、而不是闪存中。  使用汇编文件时、LoadStart 和 LoadEnd 位于闪存中、RunStart 位于 RAM 中。  这可能是一个线索。

    谢谢!

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

    尊敬的 Ed:

    我相信、如果 CLA 程序大小被认为是0、则链接器会将  LoadStart 和 LoadEnd 放在  默认位置、即使您指定 CLA 代码加载到闪存中、该位置也可能在 RAM 中。 如果您在映射文件中搜索"Cla1Task"符号、它会显示吗? 否则、问题仍然可能是编译器出于某种原因而丢弃符号。  

    对于已归档项目中使用的编译器标志是否有任何差异? 您是否能够通过 E2E Messenger 向我发送项目? 或新存档项目的精简版本?

    此致、

    Delaney

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

    尊敬的 Delaney:

                   我已经把我找到的项目放到最低限度、它使用您建议的主代码复制了问题。  但它仍然没有在映射文件中放入 Cla1Task1。

                   因此、在编译器优化掉了一条主指令的假设下、我更改了 main、以返回 Cla1Task1的地址。  这会导致链接错误、因为它无法找到 Cla1Task1。  但 Cla1Task1现在显示在映射文件中、但作为 UNDEFED。  我已附上一个新工程的 zip 文件。  我希望这对您有所帮助。

    谢谢!

    e2e.ti.com/.../Missing_5F00_Task1.zip

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

    尊敬的 Ed:

    Delaney 目前不在办公室、但她回来后会尽快给您回复。

    此致、

    Allison