Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195077
  • 博文数量: 63
  • 博客积分: 179
  • 博客等级: 入伍新兵
  • 技术积分: 342
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-27 20:29
文章分类

全部博文(63)

文章存档

2019年(2)

2013年(5)

2012年(53)

2011年(3)

分类:

2011-04-21 20:47:08

之前有做avin优化,降低cpu的使用率时。有自己用arm汇编来实现一个内存拷贝的函数,主要是用来替换原来驱动程序中memcpy函数。现在将源码贴在这里,怕自己以后遗忘。呵呵。
1.知识要点:
   arm汇编
   arm体系架构下的apcs
   vs2005的编译器不支持内嵌汇编,但可以编译arm汇编文件,生成obj文件。
2.源代码:
因为这个函数是为avin驱动专门写的,所以这个现在只支持长度是4字节倍数的拷贝。
函数原型:void _avin_memcpy(unsigned char* dst,unsigned char *src,unsigned int length);
;;benson_20110315 modify for avin T_fpga_fw
  INCLUDE kxarm.h
  TEXTAREA

  LEAF_ENTRY  _avin_memcpy
  stmfd sp!, {r4 - r11}
 
  and   r3,r2,#31 
  mov   r2,r2,LSR #5
 
 
  cmp     r2,#0
  beq     %F2
1
  ldmia r1!, {r4 - r11}
  stmia r0!, {r4 - r11}
 
  subs  r2, r2, #1
  bne  %B1
2
  add   pc, pc, r3
  b            MEMCPY_END ;0*4
  b            MEMCPY4    ;1*4
  b            MEMCPY8    ;2*4
  b            MEMCPY12   ;3*4
  b            MEMCPY16   ;4*4
  b            MEMCPY20   ;5*4
  b            MEMCPY24   ;6*4
  b            MEMCPY28   ;7*4 
MEMCPY28
  ldmia      r1!,{r4 - r10}
  stmia      r0!,{r4 - r10}
  b          MEMCPY_END
MEMCPY24
  ldmia      r1!,{r4 - r9}
  stmia      r0!,{r4 - r9}
  b          MEMCPY_END
MEMCPY20
  ldmia      r1!,{r4 - r8}
  stmia      r0!,{r4 - r8}
  b          MEMCPY_END
MEMCPY16
  ldmia      r1!,{r4 - r7}
  stmia      r0!,{r4 - r7}
  b          MEMCPY_END
MEMCPY12
  ldmia      r1!,{r4 - r6}
  stmia      r0!,{r4 - r6}
  b          MEMCPY_END
MEMCPY8
  ldmia      r1!,{r4 - r5}
  stmia      r0!,{r4 - r5}
  b          MEMCPY_END
MEMCPY4
  ldmia      r1!,{r4}
  stmia      r0!,{r4}
  b          MEMCPY_END    
MEMCPY_END
  ldmfd sp!,  {r4 - r11}
 
 IF Interworking :LOR: Thumbing
  bx  lr    ; Return with Thumb mode
 ELSE
  mov  pc, lr   ; Return
 ENDIF
    END
阅读(1335) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:中断EVENT,使用WaitForMultipleObjects fail出错

给主人留下些什么吧!~~