PCB抄板,芯片解密,SMT加工,样机制作,IC解密
 
 
公司介绍 新闻中心 PCB抄板 PCB生产 芯片解密 样机制作 成功案例 软件下载
 
PCB抄板,PCB改板,SMT加工,IC解密,PCB生产,样机制作
 
主营项目: PCB抄板,PCB改板,PCB生产,IC解密,样机制作
·最新公告                       点击进入 >>
深科特PCB抄板芯片解密PCB生产企业-为您提供最专业的PCB抄板、芯片解密、PCB生产、样机制作服务,以超强的技术实力成为PCB抄板、芯片解密、PCB生产、IC解密行业界的领跑者。
    任何样板,均可100%保证一次性克隆成功!
 
设计能力     
1   最高速信号:3.125G差分信号
2   最高设计层数:38层
3   最大Connections:18564
4   最大PIN数目:26756
5   最小过孔:8MIL(4MIL激光孔)
6   最小线宽:3MIL
7   最小线间距:4MIL
8   最小BGA PIN间距:0.5mm
9   一块PCB板最多BGA数目:30
10   最大的板面积:640mm*580mm
 
PCB抄板      
·
PCB改板
·
PCB抄板反向推理
·
PCB生产/批量生产
·
BOM清单制作
芯片解密
·
IC解密技术力量
·
单片机解密
·
软件破解
·
芯片反向设计
SMT加工
·
SMT贴片加工
·
OEM/ODM加工
·
元器件采购
·
SMT焊接调试
样机制作
·
样机功能调测
·
样机功能修改
·
元器件仿真
·
疑难器件/模块替换
成功案例
· 不锈钢高压灭菌锅之专业电路板抄板仿制
· 磷化氢气体检测仪之深科特pcb抄板及
· 电路板抄板及软硬件仿制开发案例之万用
· 化学发光定氮之pcb抄板及整机仿制案
· 便捷式光泽度仪之深科特抄板仿制及SM
· 热风净手器之pcb抄板及芯片解密成功
· 专业电路板抄板仿制及软硬件开发案例之
· 微功耗测控终端之深科特pcb抄板及批
· 便携式码流分析仪之电路板抄板仿制及逆
· 深科特专业PCB抄板仿制及反向研发之
 当前位置:首页 > 技术支持
日期:2009-5-13 10:35:33 

    C语言以其结构清晰,移植容易等优点得到广泛的应用,在嵌入式系统开发中也主要以C语言为主。虽然ARM汇编语言一般不用于大型程序的设计中,但对于ARM系统平台来说,汇编也有它的优势,比如代码执行效率高等。在一些条件下,汇编往往比C更好用。本文主要讨论C和汇编的混合编程,包括相互之间的函数调用。下面分四种情况来进行讨论,暂不涉及C++。

  1.在C语言中内嵌汇编
  在C中内嵌的汇编指令包含大部分的ARM和Thumb指令,不过其使用与汇编文件中的指令有些不同,存在一些限制,主要有下面几个方面:
  A.不能直接向PC寄存器赋值,程序跳转要使用B或者BL指令
  B.在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突
  C.R12和R13可能被编译器用来存放中间编译结果,计算表达式值时可能将R0到R3、R12及R14用于子程序调用,因此要避免直接使用这些物理寄存器
  D.一般不要直接指定物理寄存器,而让编译器进行分配
  内嵌汇编使用的标记是 __asm或者asm关键字,用法如下:
  __asm
  {
  instruction [; instruction]
  …
  [instruction]
  }
  asm(“instruction [; instruction]”);
  下面通过一个例子来说明如何在C中内嵌汇编语言,
  #include <stdio.h>
  void my_strcpy(const char *src, char *dest)
  {
  char ch;
  __asm
  {
  loop:
  ldrb ch, [src], #1
  strb ch, [dest], #1
  cmp ch, #0
  bne loop
  }
  }
  int main()
  {
  char *a = "forget it and move on!";
  char b[64];
  my_strcpy(a, b);
  printf("original: %s", a);
  printf("copyed: %s", b);
  return 0;
  }
  在这里C和汇编之间的值传递是用C的指针来实现的,因为指针对应的是地址,所以汇编中也可以访问。
2.在汇编中使用C定义的全局变量
  内嵌汇编不用单独编辑汇编语言文件,比较简洁,但是有诸多限制,当汇编的代码较多时一般放在单独的汇编文件中。这时就需要在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。
  /* cfile.c
  * 定义全局变量,并作为主调程序
  */
  #include <stdio.h>
  int gVar_1 = 12;
  extern asmDouble(void);
  int main()
  {
  printf("original value of gVar_1 is: %d", gVar_1);
  asmDouble();
  printf(" modified value of gVar_1 is: %d", gVar_1);
  return 0;
  }
  对应的汇编语言文件
  ;called by main(in C),to double an integer, a global var defined in C is used.
  AREA asmfile, CODE, READONLY
  EXPORT asmDouble
  IMPORT gVar_1
  asmDouble
  ldr r0, =gVar_1
  ldr r1, [r0]
  mov r2, #2
  mul r3, r1, r2
  str r3, [r0]
  mov pc, lr
  END
3.在C中调用汇编的函数
  在C中调用汇编文件中的函数,要做的主要工作有两个,一是在C中声明函数原型,并加extern关键字;二是在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后用mov pc, lr返回。然后,就可以在C中使用该函数了。从C的角度,并不知道该函数的实现是用C还是汇编。更深的原因是因为C的函数名起到表明函数代码起始地址的左右,这个和汇编的label是一致的。
  /* cfile.c
  * in C,call an asm function, asm_strcpy
  * Sep 9, 2004
  */
  #include <stdio.h>
  extern void asm_strcpy(const char *src, char *dest);
  int main()
  {
  const char *s = "seasons in the sun";
  char d[32];
  asm_strcpy(s, d);
  printf("source: %s", s);
  printf(" destination: %s",d);
  return 0;
  }
  ;asm function implementation
  AREA asmfile, CODE, READONLY
  EXPORT asm_strcpy
  asm_strcpy
  loop
  ldrb r4, [r0], #1 ;address increment after read
  cmp r4, #0
  beq over
  strb r4, [r1], #1
  b loop
  over
  mov pc, lr
  END
  在这里,C和汇编之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单的说就是如果函数有不多于四个参数,对应的用R0-R3来进行传递,多于4个时借助栈,函数的返回值通过R0来返回。
4.在汇编中调用C的函数
  在汇编中调用C的函数,需要在汇编中IMPORT 对应的C函数名,然后将C的代码放在一个独立的C文件中进行编译,剩下的工作由连接器来处理。
  ;the details of parameters transfer comes from ATPCS
  ;if there are more than 4 args, stack will be used
  EXPORT asmfile
  AREA asmfile, CODE, READONLY
  IMPORT cFun
  ENTRY
  mov r0, #11
  mov r1, #22
  mov r2, #33
  BL cFun
  END
  /*C file, called by asmfile */
  int cFun(int a, int b, int c)
  {
  return a + b + c;
  }
      在汇编中调用C的函数,参数的传递也是通过ATPCS来实现的。需要指出的是当函数的参数个数大于4时,要借助stack,具体见ATPCS规范。
结束语:
      本文以实例介绍了ARM系统编程中C和汇编的混合编程,为广大的编程人员在实际应用中提供了一个新的选择。

关键字: PCB抄板 PCB生产 IC解密 样机制作 芯片解密 pcb板 SMT加工
 
·上一篇文章: 基于S3C2410的PDA人机接口设计
 
·下一篇文章: 化学镀镍/金板有办法返工吗?
Copyright 2002-2010 版权所有 深科特集团-深圳市银禾金达科技有限公司
深科特集团——PCB抄板 PCB生产 芯片解密 BOM清单制作 原理图反推 样机调试加工 成品量产
业务部 电话:0755-83766239 83766142 82920849(负责PCB抄板,PCB生产,方案设计,IC解密,成品生产等业务)
空气净化机 远大空气净化机 陈克明面条 巴马科养水 家用净水壶
pcb抄板
pcb抄板
pcb抄板