|
在CMSIS的ETH驱动中,即SendFrame函数里面,将需要发送的数据拷贝到ETH的DMA缓冲区的拷贝代码片段为:(EMAC_STM32F4xx.c的794行,路径:STM32F4xx_DFP\2.11.0\CMSIS\Driver)
/*Fast-copy data fragments to ETH-DMA buffer */
for(; len > 7U; dst +=8; frame +=8, len -=8)
{
((__packed uint32_t *)dest)[0] = ((__packed uint32_t *)frame)[0];
((__packed uint32_t *)dest)[1] = ((__packed uint32_t *)frame)[1];
}
/* copy remaining 7 bytes */
for(; len > 1U; dst +=2, frame +=2, len -=2U){
((__packed uint16_t *)dest)[0] = ((__packed uint16_t *)frame)[1];
}
if(len > 0U) { dst++[0] = frame++[0];}
而在stm32Cube中,则是简单的memcpy(....)。(ethernetif.c的290行)
他们的内存拷贝性能差异很大吗?为什么ARM采用了这种拷贝方式。
|
|