工具与软件:
尊敬的专家
我在使用 am2732进行开发时遇到了一个问题。 我使用 Enet 将点结果发送到 PC、并 发现某个 UDP 数据包以及数据包中的某些字节内存在校验和错误。 我已经检查了数据路径、几乎禁用了 c66x 内核中的功能、并 在数据路径过程结束时调用了 memset 函数。 但是、此问题仍然存在。 、μ s 我发现错误数据绑定到 L3存储器空间中的特定地址。 采用乒乓缓冲器、将偶数帧和奇数帧的点结果分别存储在乒缓冲器中。 由于 C66x 仅处理基本 memset、因此此错误似乎不是由数据覆盖引起的。
我已经检查了缓存、并且没有缓存问题。 C66x 在发送 IPC 之前执行 CacheP_wbInv 函数、以通知 R5F0_0内核数据已准备好进行处理。 R5F0_0内核使用 DMA 通过 ENET 将点结果发出、无需进行缓存处理。
Enet 大约需要30ms 来传输数据、我已经将数据打印在错误数据的地址中、发现 L3存储器中的数据未改变、并与捕获的 UDP 校验和错误数据包保持一致。 下面是轮询代码。
uint8_t* scanRes =(uint8_t*) 0x882ffa58;
for (loopCnt2=0;loopCnt2<10;loopCnt2++)
{
CacheP_inv ((void*) scanRes、64、CacheP_TYPE_ALL);
logger ("%d 次扫描\r\n"loopCnt2);
for (loopCnt=0;loopCnt<16;loopCnt++)
{
记录器("%d\t"、scanRes[loopCnt]);
}
logger ("\r\n");
ClockP_usleep(3*1000);
}
当我更改了 Ping 缓冲器的起始地址时、错误数据的地址不变。 在某些情况下、当我仅向前或向后更改起始地址8个字节时、该错误消失了。
请在这个问题上给我一些进展。
此致
林志强