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.

[参考译文] TMS320F28388D:将结构从 CPU2复制到 CLA 时出现问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1348496/tms320f28388d-issue-with-copying-struct-from-cpu2-to-cla

器件型号:TMS320F28388D

您好!

我在将结构从 CPU2复制到 CLA (控制律加速器)时遇到问题、我想了解如何解决该问题。

以下是该问题的简要概述:

我在 CPU2上定义了一个结构、位于 CPU2和 CLA 之间的共享存储器中。 此结构包含一个由3个轴组成的数组,每个轴都有indexactive的变量。

我将在 CPU2中设置此结构的值、然后尝试将它们复制到我的 CLA 以进行进一步处理。

下面是我的 CLA 代码示例代码片段、其中包含用于调试的修改:

 for (axis = (NUMBER_OF_AXIS-1); axis >= 0; axis--)
    {
     output->debugCLA1[axis] = (axis + 1) * 10.0f + (float32)myStruct.axis[axis].active;
     
     }

执行此代码后、中的结果值output->debugCLA1为:

  1. 11.0
  2. 20.0
  3. 31.0

但是、正确的结果应该是第二个值应为21、而不是20。

我已经验证myStruct.axis[axis].active在 CPU2侧有正确的值。 此外、我已经确认这些值在 CLA 和 CPU2中的同一位置正确保存(如表达式窗口中所示)。

由于我已经确保了 CPU2端上的值的正确性并确认了的正确值axis(中的值10、20、30可明显看出output->debugCLA1)、我怀疑结构的保存方式可能存在问题、 从而使 CLA 的访问受限。

此结构使用以下配置保存在 LSRAM 中:

MemCfgRegs.LSxMSEL.bit.MSEL_LS0     =  0x01;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0x0;

MemCfgRegs.LSxMSEL.bit.MSEL_LS1     =  0x01;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0x0;

/*RAMLS0          :origin = 0x008000,length = 0x000800
  RAMLS1          :origin = 0x008800,length = 0x000800*/
  cla_cpu_shared  :origin = 0x008000、length = 0x001000

我非常感谢您对此问题的任何见解、建议或潜在解决方案。

提前感谢您投入宝贵的时间给予大力支持。

此致、

维尔科

感谢您发送编修。 我最初认为寻址正确的存储器存在问题、但我填充了所有指针、正如您所指出的、编译器可以正确处理小于32位的变量。  

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

    尊敬的 Wilko:

    我很高兴听到我之前的说明对您有所帮助  

    此处 LSRAM 存储器配置正确。 我假设您也将 CLA 程序存储器放置在另一个 LSRAM 中、并让 CLA 访问存储器的这一部分? 轴、索引和活动变量使用哪些数据类型? 你是否曾尝试过在 CLA 一侧单步执行代码并在调试器观察窗口中验证计算? 出于调试目的、它还有助于将每个操作分成不同的行、以便您查看哪一个(如果有)出现了问题。

    此致、

    德拉尼

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

    尊敬的 Delaney:

    我认为我已经确定了这个问题。

    在剖析结构时、我发现了一个枚举。

    由于枚举被解释为 int、因此 CPU 和 CLA 之间的通信会出现不匹配。 为了 修复、我已经为枚举成员定义了宏。

    您是否会建议一个更有效的解决方案、或者这种方法是否合适?

    此致、

    维尔科

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

    尊敬的 Wilko:

    这种方法应该是合适的、最好能听到您找到问题的根源。 如果您有任何其他问题、请告诉我。

    此致、

    德拉尼