主题中讨论的其他器件:C2000WARE、 SysConfig
你好。
我们使用 IPC 在 CPU1和 CM 之间实现了实时通信通道、然后 CM 将通过以太网或 UART 将该数据输出到外部世界。 程序正在闪存中工作。
我们正在测量 IPC 的性能、我们发现在两个内核之间共享数据所需的时间比预期的要长。
具体而言、在 CPU1中、要将数据复制到 MSGRAM_CPU_TO_CM 区域中的缓冲区中、发送1000字节大约需要120us。 (只需一份简单的副本)。 然后、CM 花费70us 复制同一个数组并确认 IPC
我们将数组声明为:
#pragma DATA_SECTION(readData, "MSGRAM_CPU_TO_CM")
uint16_t readData[Tam_msg_buff_eth];
#pragma DATA_SECTION(BUFFER_ETHERNET, "BUFFER_COM")
BUFFER_UDP BUFFER_ETHERNET;
...........................................
....//this takes 90us
for (i_trama = 0; i_trama < BUFFER->long_msg[cont_trx]; i_trama++)
{
readData[i_trama] = BUFFER->xmit_msg[cont_trx][i_trama];
}
.....//this takes 70us
IPC_sendCommand(IPC_CPU1_L_CM_R, IPC_FLAG0, IPC_ADDR_CORRECTION_ENABLE,
Code,
(uint32_t) readData, BUFFER->long_msg[cont_trx]);
IPC_waitForAck(IPC_CPU1_L_CM_R, IPC_FLAG0);
在 CM 上:
if (command == IPC_CMD_READ_MEM))
{
status = true;
msg_rx_CPU1 = true;
..............// this takes 70us
for (i = 0; i < data_g; i++)
{
buf_tx[i] = (uint8_t) (*((uint16_t*) addr + i));
}
}
IPC_sendResponse(IPC_CM_L_CPU1_R, TEST_PASS);
IPC_ackFlagRtoL(IPC_CM_L_CPU1_R, IPC_FLAG0);
对于阵列、在 CPU1上:
BUFFER_COM : > RAMLS6 MSGRAM_CPU_TO_CM : > CPUTOCMRAM, type=NOINIT CPUTOCMRAM : origin = 0x039000, length = 0x000800 RAMLS6 : origin = 0x00B000, length = 0x001000
我们如何提高性能?
与在程序的其他 RAM 存储器区域中工作相比、它似乎太低



