您好!
使用 AM437x IDK 板和 PRU-ICSS-EtherCAT_Slave_01.00.02.01固件
修改了 EtherCAT_SLAVE_FULL_AM437x_ARM 示例、并定义了大小为1KB 的 TxPdo 以评估 AM437x EtherCAT 性能。 在 PDI_ISR()中将1k 数据复制到 PRU 大约需要50us。 当 TxPdo 对象大小设置为6KB 时、时间增加到300us。 这在运行1ms EtherCAT 周期时间时是不可接受的。
跟踪代码、时间主要来自函数(来自 tisebsp.c)
void bsp_write (PRUICSS_handle pruIcssHandle、uint8 *数据、uint16地址、 uint16 len)
uint8_t *PESC =(uint8_t *)((((PRUICSS_HwAttrs *)(pruIcssHandle->hwAttrs))->baseAddr + PRU_ICSS_SHARTE_RAM);
memcpy (&PESC[address]、pdata、len);
经进一步调查、我发现 PRU-ICSS0/1的 MMU 配置在 AM437X_app.cfg 中设置为可缓冲。 如果将其更改为 不可缓冲、则 只需7us 即可将1k 数据复制到 PRU。 当 TxPdo 对象大小为6KB 时、时间大约为50us。
问题:
为什么 PRU 共享存储器设置为"可缓冲"? 这会导致一个很大的性能问题
2.如果将 MMU 设置为" 不可缓冲"、是否存在问题?
谢谢你。