EDA365电子论坛网
标题:
嵌入式C语言程序设计技巧-----参数传递
[打印本页]
作者:
Abricy
时间:
2016-6-4 15:02
标题:
嵌入式C语言程序设计技巧-----参数传递
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
6 O' k/ X0 a3 \$ ?
示例 汇编函数调用的参数传递。
8 [+ A: Z* D- V+ z
从C语言中直接调用汇编语言函数
`) k2 Q) R. W4 L$ O- r, ^
extern void strcopy(char *d,const char *s);
. \4 G# I, \0 u8 J" [1 X k" Y
int main(void){
" Y" T. ~% \4 u
const char src="Source";
f3 p0 l, F) K6 X+ p
char dest[10];
' j. V7 W( \2 |9 d) z, [
...
/ ~ T; w- n2 ]
strcopy(dest,src);
' q7 j p' ~/ e- d: x) N. z
...
}% a! {. X. A8 B# M9 [! E$ l
}
; }. v% W4 q R1 [" e. G* w6 k
AREA StrCopy,CODE,READONLY
7 ]8 w) i% D1 J O
EXPORT strcopy
8 M: a7 l( f! \+ w( P4 ~5 T' i8 Z. [
strcopy
, }" t4 p( g: Q: m
LDRB R2,[R1],#1
9 j7 I4 P7 Q, S! g% l D$ N
STRB R2,[R0],#1
0 H, l7 G7 y& E! ?3 _# L' g
CMP R2,#0
3 o0 g, ^: Z& P6 l
BNE strcopy
3 K( d& C5 \2 \1 ?: S" h
MOV PC,LR
5 i$ O1 u1 m. D* v6 E' J" f1 I
END
6 j* R6 l$ v* j; ?1 b+ b
这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。
作者:
helendcany
时间:
2016-6-7 17:43
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈~谢谢
: Y3 y2 k/ ~; U. I# y
作者:
yhg-lee
时间:
2016-7-26 09:16
资源多,学习不止步,共同进步
6 o" j3 T/ P# T7 K
作者:
10929390
时间:
2016-8-1 15:46
楼主辛苦了!
1 X5 r! t' \8 b
作者:
xuzwg
时间:
2016-8-3 14:11
支持楼主!谢谢分享!
* [/ R( J- W# g1 A! i, H. L* [
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2