您好!
我正在尝试在 TMS320F28374D 的 CPU1和 CPU2之间交换大量数据、这超出了 MSG RAM 的处理能力。 以进行测试
我创建了两个数组、每个 CPU 一个。
我最初希望归档的是、两个 CPU 都有一个阵列、其中一个 CPU 可以存储数据、另一个 CPU 只能读取
来自数组的相同数据、他可以访问这些数据、因为它的名称与其他 CPU 上的名称相同、并且具有相同的起始地址和长度。
我所做的是:
使用 GSRAM8和 GSRAM9进行传输。 对于 CPU1、GSRAM8为 R/W;对于 CPU2、GSRAM9为 R/W。
我在两个 CPU 的存储器映射中创建并分配了数据段:
部分
{
(笑声)
CPU1_TO_CPU2_GS:> RAMGS8 PAGE = 1.
CPU2_TO_CPU1_GS:> RAMGS9 PAGE = 1.
(笑声)
}
然后、我创建了两个数组并使用 pragma 将它们分配到正确的存储器区域。 我在 CPU 的两个代码中都执行了此操作
相同的名称、因此两者看起来都与以下内容完全相同:
uint32 CPU1_TO_CPU2_Array[256]= 0;
uint32 CPU2_TO_CPU1_Array[256]= 0;
#pragma DATA_SECTION (CPU1_TO_CPU2_Array、"CPU1_TO_CPU2_Gs");
#pragma DATA_SECTION (CPU2_TO_CPU1_Array、"CPU2_TO_CPU1_Gs");
此外、我将 GSRAM8的主角色分配给 CPU1、将 GSRAM9分配给 CPU2。 我还一直等到所有权
相应地分配;这两个都发生在 CPU1的代码中:
EALLOW;
MemCfgRegs.GSxMSEL.bit.MSEL_GS8 = 0;// CPU1可以读取/写入;CPU2只能读取
MemCfgRegs.GSxMSEL.bit.MSEL_GS9 = 1;// CPU2可以读取/写入;CPU1只能读取
EDIS;
while (!((MemCfgRegs.GSxMSEL.bit.MSEL_GS9 = 1 && MemCfgRegs.GSxMSEL.bit.MSEL_GS8 = 0));
当我现在使用调试时、它可以工作、但前提是我仅将这两个数组用于测试目的。 当我以这种方式创建更多数组时、它们将是
映射到两个 CPU 上指定区域中的不同存储器空间。 然后、CPU1和 CPU2上的相同数组之间没有匹配、
因此它不再工作。
是否可以在两个具有相同内存起始地址的 CPU 上创建数组,而无需手动将它们分配给该地址? 或者是否存在其他问题
在两个 CPU 之间实现大量数据交换的方法?
提前感谢您!