【学习笔记三】原创,拷贝函数效率在KEIL下的测试

2020-02-20 20:39发布

本帖最后由 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。

  1. tgt=dst + len;
  2. while(dst != tgt) {
  3.   *dst++=*src++;
  4. }
复制代码
一般这种会快,循环内就是LDR/LDM,STR/STM,CMP,B四条指令。
当然,具体的还是要查指令集,考察可用寄存器数量,指令长度(16/32)等等的因素,确定了指令之后描C代码;复杂指令因为32Bit,消耗Flash带宽,不一定是最优解。

一周热门 更多>