硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3536|回复: 2
收起左侧

[ETH PHY] RAM-CMSIS的ETH驱动和STM32驱动的拷贝数据性能差异大吗

[复制链接]

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2021-3-8 15:44:09 | 显示全部楼层 |阅读模式
在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采用了这种拷贝方式。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2021-3-8 18:13:46 | 显示全部楼层
memcpy是C标准库实现,数据量大,开启最高性能优化,速度也是可以的。由于商用IDE都是不开源C标准库的,内部好像也是4个字节为单位操作的。

具体你可以比较下
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-3-22 11:39:34 | 显示全部楼层
谢谢大佬回复,应该就是这样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 02:01 , Processed in 0.157411 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表