硬汉嵌入式论坛

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

memcpy类复制粘贴可改为8字节为单位的复制粘贴,效率高点

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106728
QQ
发表于 2019-11-16 10:44:08 | 显示全部楼层 |阅读模式
两次4字节操作。

__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))


__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)


/* Fast-copy data fragments to ETH-DMA buffer */
for ( ; len > 7U; dst += 8, frame += 8, len -= 8U) {
    __UNALIGNED_UINT32_WRITE(&dst[0], __UNALIGNED_UINT32_READ(&frame[0]));
    __UNALIGNED_UINT32_WRITE(&dst[4], __UNALIGNED_UINT32_READ(&frame[4]));
}

/* Copy remaining 7 bytes */
for ( ; len > 1U; dst += 2, frame += 2, len -= 2U) {
    __UNALIGNED_UINT16_WRITE(&dst[0], __UNALIGNED_UINT16_READ(&frame[0]));
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 15:33 , Processed in 0.208312 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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