2020-02-20 20:39发布
takashiki 发表于 2014-9-14 18:44 楼主,再比较一下大数据量的拷贝结果看看,然后把DMA的也放进来比较一下。我猜是小数据量时库函数效率最高 ...
wxfje 发表于 2014-9-14 20:11 楼主,intmemcpy2和intmemcpy3这两个函数是一样的,,运行结果却不一样,是不是楼主把函数贴错了 ...
dr2001 发表于 2014-9-14 20:40 需要考虑:源地址指针、目的地址指针是多少字节对齐;复制的字节数是多少的倍数,比如1/2/4/8。产生的结果 ...
sunnyqd 发表于 2014-9-14 21:43 不一样啊,仔细看size参数,一个是int,一个是uint
最多设置5个标签!
需要考虑:源地址指针、目的地址指针是多少字节对齐;复制的字节数是多少的倍数,比如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带宽,不一定是最优解。
是的,按我以往的尝试,DMA效率最高的,但是KE02没有DMA,我这里只有KE02的板子
不一样啊,仔细看size参数,一个是int,一个是uint
是的,intmemcpy和intmemcpy4是比较常规的写法,速度是四个intmemcpy里最快的
这可想到真周到细致,谢谢回复
一周热门 更多>