专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
NXP
【学习笔记三】原创,拷贝函数效率在KEIL下的测试
2020-02-20 20:39
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5341
26
26
本帖最后由 sunnyqd 于 2014-9-14 18:36 编辑
本打算弄一个三平台下的速度测试,但卡在IAR上面了,IAR工程一直进hardfault
先把KEIL上的结果贴出来吧O3,OTime,不使用Microlib,指定no_inline
进行如下的内存设置
2014-9-14 15-03-42.jpg
(247.88 KB, 下载次数: 0)
下载附件
2014-9-14 16:59 上传
编辑原因:添加microlib结果,更改错误
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
26条回答
dr2001
2020-02-22 08:56
本帖最后由 dr2001 于 2014-9-14 20:47 编辑
需要考虑:源地址指针、目的地址指针是多少字节对齐;复制的字节数是多少的倍数,比如1/2/4/8。产生的结果可能都有差异,甚至是明显差异。
对ARM常见指令集来说,减法还是可能会快的,但不像51的DJNZ那样明显。因为SUB指令有Z标志可用,寄存器紧张的时候有价值,平时就没啥了。
此外,由于ARM指令可以地址自增,所以常见编译器优化的方法,是先算出来目的地址,然后指针增加,最后CMP目的地址,再JMP。
tgt=dst + len;
while(dst != tgt) {
*dst++=*src++;
}
复制代码
一般这种会快,循环内就是LDR/LDM,STR/STM,CMP,B四条指令。
当然,具体的还是要查指令集,考察可用寄存器数量,指令长度(16/32)等等的因素,确定了指令之后描C代码;复杂指令因为32Bit,消耗Flash带宽,不一定是最优解。
加载中...
查看其它26个回答
一周热门
更多
>
相关问题
手把手学会例程系列:i.MX<二>:图解i.mx53源码补丁+烧录(...
59 个回答
从零开始MQX开发之二 创建与调试MQX项目
24 个回答
7009: Trim value invalid, value is blank or zero是什么错误
0 个回答
怎么头像消失啊?
23 个回答
求推荐KINETIS评估板:必备USB HS,ETHERNET
5 个回答
相关文章
基于IMX6Q移植uboot2018-09——添加单板
0个评论
IMX6UL定时器按键消抖实验
0个评论
I.MX6U处理器LED灯点亮汇编程序代码编写
0个评论
在NXP I.MX6上做一个基于Opencv和OpenGL的打砖块游戏
0个评论
【RFID安全】浅谈卡片破解
0个评论
LM75a
0个评论
emwin字库制作及汉字显示
0个评论
STM32学习之I2C
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
NXP
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
需要考虑:源地址指针、目的地址指针是多少字节对齐;复制的字节数是多少的倍数,比如1/2/4/8。产生的结果可能都有差异,甚至是明显差异。
对ARM常见指令集来说,减法还是可能会快的,但不像51的DJNZ那样明显。因为SUB指令有Z标志可用,寄存器紧张的时候有价值,平时就没啥了。
此外,由于ARM指令可以地址自增,所以常见编译器优化的方法,是先算出来目的地址,然后指针增加,最后CMP目的地址,再JMP。
- tgt=dst + len;
- while(dst != tgt) {
- *dst++=*src++;
- }
复制代码一般这种会快,循环内就是LDR/LDM,STR/STM,CMP,B四条指令。
当然,具体的还是要查指令集,考察可用寄存器数量,指令长度(16/32)等等的因素,确定了指令之后描C代码;复杂指令因为32Bit,消耗Flash带宽,不一定是最优解。
一周热门 更多>