您好!
我在将结构从 CPU2复制到 CLA (控制律加速器)时遇到问题、我想了解如何解决该问题。
以下是该问题的简要概述:
我在 CPU2上定义了一个结构、位于 CPU2和 CLA 之间的共享存储器中。 此结构包含一个由3个轴组成的数组,每个轴都有index
和active
的变量。
我将在 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
为:
- 11.0
- 20.0
- 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位的变量。