OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5425|回复: 6

关于6ull裸机memcpy的问题

[复制链接]

11

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2020-4-1
在线时间
21 小时
发表于 2020-4-9 16:17:38 | 显示全部楼层 |阅读模式
1金钱
在引用了string.h后编译的时候还是会报错undefined reference to `memcpy'
我在网上找的这个代码,请大佬看看效率如何,或者有没有更好的
void memcpy2(unsigned int *dst, unsigned int *src, unsigned int n)
{
    n /= 4; //assume it's multiple of 4
    while (n--)
    {
        asm("PLD [%0, #128]" ::"r"(src));
        *(dst++) = *(src++);
        *(dst++) = *(src++);
        *(dst++) = *(src++);
        *(dst++) = *(src++);
    }
}

最佳答案

查看完整内容[请看2#楼]

我又试了试,去掉 asm("PLD [%0, #128]" ::"r"(src)); 让编译器自己优化,使用neon,好像能快一倍 还是自己太菜啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2020-4-1
在线时间
21 小时
 楼主| 发表于 2020-4-9 16:17:39 | 显示全部楼层
我又试了试,去掉
asm("PLD [%0, #128]" ::"r"(src));
让编译器自己优化,使用neon,好像能快一倍
还是自己太菜啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-4-10 01:27:09 | 显示全部楼层
应该都是这么搞吧
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2020-4-10 10:28:54 | 显示全部楼层
应该可以直接调用库的
回复

使用道具 举报

11

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2020-4-1
在线时间
21 小时
 楼主| 发表于 2020-4-10 11:10:26 | 显示全部楼层
zuozhongkai 发表于 2020-4-10 10:28
应该可以直接调用库的

用库的话除了头文件还要做什么吗,我直接用会报错找不到memcpy
回复

使用道具 举报

11

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2020-4-1
在线时间
21 小时
 楼主| 发表于 2020-4-11 08:57:47 | 显示全部楼层
又有一个方法,使能cache和MMU可以再提高8-10倍的速度!但是外设读取这段内存就会出错,应该是缓存没有更新到内存里
回复

使用道具 举报

7

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2017-9-16
在线时间
80 小时
发表于 2020-4-11 21:30:54 来自手机 | 显示全部楼层
一般考虑发起DMA,使用SIMD,https://github.com/llvm/llvm-project/tree/master/libc/AOR_v20.02 这里有一些针对arm优化的libc实现
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 09:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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