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.

[参考译文] TMS320F28P650DK:CLA 功能未正确执行

Guru**** 2472980 points
Other Parts Discussed in Thread: TIDA-010936

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1474248/tms320f28p650dk-cla-function-not-executing-properly

器件型号:TMS320F28P650DK
Thread 中讨论的其他器件:TIDA-010936

工具与软件:

您好、TI 专家!

希望大家表现得不错。 我需要有关 CLA 和链接器命令文件的帮助。

  1. 当暂存区用作堆栈时、CLA 暂存区和堆栈之间有何区别?

  2. 我正在尝试将一个函数从主 CPU 移植到 CLA、而构建成功完成。 然而、当我运行代码时、只有部分函数会执行。 为了进行调试、我将一个测试变量放置在函数内的不同位置、并且观察到它只更新到特定点。

    为简单起见、该函数包含10个静态内联函数调用。 为了诊断这个问题、我随机注释掉了不同的函数调用并进行了多次测试。 每次、整个代码都运行良好、这表明各个函数的功能完好无损。 这可能是与尺寸相关的问题吗? 如果是、是否有方法可以检查函数是否超过任何存储器限制?

  3. 为了适合中的代码、在链接器 cmd 文件中、我将两个部分-两个部分分为一个、构建后的内存分配显示没有段占用超过50%。  

此处、test_var_1是我放置的测试变量、该变量在注释部分代码时更新到末尾、在放置整个代码时卡住。 我怀疑这可能是尺寸问题。 请多多指教

如果有任何见解、将不胜感激。

谢谢!

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

    尊敬的 Raghu:

    若要检查是否超过了某个存储器部分、用户可以在 CCS 中打开"Memory Allocation"窗口("View"->"Memory Allocation")。

    请查看本文档、了解有关将主代码移植到 CLA /cfs-file/__key/communityserver-discussions-components-files/171/CLAProjectStructureUG.pdf 时需要考虑的不同步骤的更多信息 

    请确保正确组合存储器各段。 本文档介绍如何正确组合存储器段: https://software-dl.ti.com/ccs/esd/documents/c2000_c28x-compiler-understanding-linking.html 

    有关 CLA 暂存与 CPU 堆栈的说明、请参阅此文档: /cfs-file/__key/communityserver-discussions-components-files/171/scratchpad-link.pdf 

    此致、

    Ozino  

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

    尊敬的 Ozino:

    感谢您的答复。 这些参考资料非常有用、不过我已经有了这些。

    1. 所有在 CPU 中进行初始化并在 CLA ISR 文件中使用#pragma 和 extern 共享给 CLA 的变量(没有静态变量)-check
    2. 所有功能静态内联-检查
    3. 只有 RAM 的 LS 部分被分配给 CLA (来自 TRM 的参考)-检查




    4. 内存分配正确、构建后附加内存分配窗口(保留所有代码时)

    注释部分代码时、表明代码工作正常

    在上面的快照中、两个测试变量 task3_cnt 和 task4_cnt 按预期递增。

    但当一切都保留并运行时、这些变量永远不会递增。

    提前感谢、

    Raghu

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

    您好!

    更新: 该问题得到解决、 被分配给 CLA 作为程序存储器和程序数据的 RAM 部分被授予从主 CPU 访问 CLA 的权限。

    谢谢!

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

    尊敬的 Ozino:

    继我们之前的讨论之后、我不再有尺寸限制、因此我将尝试更清楚地解释我的问题。

    我使用 FOC 算法实现 BLDC 电机的位置控制、请参考 TIDA-010936_GANHFMD MCSDK 提供。 最初、CPU1上的一切都运行正常。 然后,我想将整个 FOC 处理转移到之前在 CPU1上运行的 CLA 上,这样 我就可以 将主 CPU 用于其他应用程序相关的任务。

    我使用 TI 的参考、将整个 FOC 逻辑作为静态内联函数移植到 CLA 中。 我可以成功从 ADC 和其他参数中读取电压和电流、但没有输出、电机停止并消耗高电流。 从主 CPU 执行时相同的内联函数可以正常运行、这使我相信功能完好无损。  

    问题和疑问:

    1. 当 CLA 任务运行时、在 CPU1上执行后运行良好的几个变量在 CLA 中的行为不同。 例如、 CUR_LOOP_BAN带宽 在 CPU1中是3500、在 CLA 中不起作用;相反、值10起作用。 该问题延伸到其他几个变量。
    2. 应执行的操作 枚举 在 CLA 中无法正常工作? 我不得不替换它们 即可使它们正常工作。
    3. 消息流 uint16_t 、我发现变量值不正确。 为了避免这种情况、我目前仅使用 uint32_t float32_t . 是否存在已知问题 uint16_t 添加新成员?

    非常感谢任何见解或建议。

    谢谢、此致、
    Raghu

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

    尊敬的 Raghu:

    请确保您已经更新了链接器命令文件、以便为 ClaProg 和暂存区分配一个段。

    此外、更多有关数据类型差异的信息、请查看 CLA 用户指南: https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/faq.html 

    您将找到有关受限数据类型的更多信息。

    此致、

    Ozino