主题中讨论的其他器件:C2000WARE
尊敬的专家:
我正在执行测试以验证 CPU 中是否由于另一个 CPU 执行的读取/写入操作而产生任何干扰。
在这两种场景中、我都在使用不同的 IPC 计数器来捕获时间差(gf32TimeU)。 在这两种情况下、我都用两个部分
根据系统控制器模块中的 gu16CpuId 在已加载内核中执行的代码的描述。
在所有情况下、我已经在 CPU1中加载了启用以下函数的输出(.out)文件、并在 CPU2中加载了.out 文件以禁用相同功能、而且我得到了以下时序。
#1. 场景:
----------------
结果/输出:
观察到的时序方面为:
CPU1读取-> 430.125微秒
CPU1写入-> 430.125微秒
CPU2读取-> 409.64微秒
CPU2写入-> 430.125微秒
- 代码片段:
void ReadIntinCPU1due2CPU2Read_SameBlock()
{
UINT16 i = 0;
while (1)
{
i = 0;
if( CPUID_1 == gu16CpuId )
{
start = guniIpcRegs.gstrCpu1IpcRegs.IPCCOUNTERL;
for (i = 0; i < u16size; i++)
{
gu16GS0_Array[i]; // For write, replacing this line to "gu16GS0_Array[i] = 6;"
}
end = guniIpcRegs.gstrCpu1IpcRegs.IPCCOUNTERL;
gf32TimeUs = (FLOAT32)(end - start)*0.005f;
}
i = 0;
if( CPUID_2 == gu16CpuId )
{
start = guniIpcRegs.gstrCpu1IpcRegs.IPCCOUNTERL;
for (i = 0; i < u16size; i++)
{
gu16GS0_Array[i]; // For write, replacing this line to "gu16GS0_Array[i] = 7;"
}
end = guniIpcRegs.gstrCpu1IpcRegs.IPCCOUNTERL;
gf32TimeUs = (FLOAT32)(end - start)*0.005f;
}
}
}
#2. 场景:
----------------
我已经颠倒了 CPU 块中代码的执行顺序、即(cpue_2 == gu16CpuId)、然后(cpu_1 == gu16CpuId)并执行相同的测试并获得以下结果。
#结果/输出:
观察到的时序方面为:
CPU1读取-> 409.64微秒
CPU1写入-> 430.125微秒
CPU2读取-> 430.125微秒
CPU2写入-> 430.125微秒
- 代码片段:
void ReadIntinCPU1due2CPU2Read_SameBlock()
{
UINT16 i = 0;
while (1)
{
i = 0;
if( CPUID_2 == gu16CpuId )
{
start = guniIpcRegs.gstrCpu2IpcRegs.IPCCOUNTERL;
for (i = 0; i < u16size; i++)
{
gu16GS0_Array[i]; // For write, replacing this line to "gu16GS0_Array[i] = 7;"
}
end = guniIpcRegs.gstrCpu2IpcRegs.IPCCOUNTERL;
gf32TimeUs = (FLOAT32)(end - start)*0.005f;
}
i = 0;
if( CPUID_1 == gu16CpuId )
{
start = guniIpcRegs.gstrCpu1IpcRegs.IPCCOUNTERL;
for (i = 0; i < u16size; i++)
{
gu16GS0_Array[i]; // For write, replacing this line to "gu16GS0_Array[i] = 6;"
}
end = guniIpcRegs.gstrCpu1IpcRegs.IPCCOUNTERL;
gf32TimeUs = (FLOAT32)(end - start)*0.005f;
}
}
}
#查询/观察:
- 如果我比较 CPU1上的读取时序、我就会发现有区别、即、在场景1中、 CPU1读取-> 430.125 微秒 情形2中的情形 CPU1读取-> 409.64 微秒 。 CPU2读取也发生了同样的情况、例如、在情形1中 CPU2读取-> 409.64 微秒 在情形#2中 CPU2读取-> 430.125微秒 。
- 上述两个函数的唯一区别是执行这些任务的 CPU 的位置、但这不应影响计时、因为这些任务是在特定 CPU 中执行的。
第1季度 。 为什么会出现这些行为?
Q2 。 有什么影响的广告吗?
Q3 。 在访问像 GS0-GS4这样的 RAM 段时是否有任何异常应该被 CPU1访问并且由 CPU2复位?
请分享是否有任何文档可供参考、以了解 GSx RAM 的内部情况来支持该测试。