找回密码
 注册
关于网站域名变更的通知
查看: 428|回复: 4
打印 上一主题 下一主题

嵌入式C语言程序设计技巧-----参数传递

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-6-4 15:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。) v* E# X6 G/ w0 Q! P2 g! [" b/ C* \
示例 汇编函数调用的参数传递。
" u# ~0 P. n$ i: z9 S从C语言中直接调用汇编语言函数9 g- q& S! u4 t# P* ^1 ^% ~4 G
extern void strcopy(char *d,const char *s);
) ^) w6 B) E" Qint main(void){
$ O0 k) L" q1 P5 ~$ J. Kconst       char src="Source";8 v( X7 T* K" l. i
char dest[10];7 M$ o; l1 l7 p) C- F& F' s3 t: ]$ y
...
% K; W' \7 q3 [% cstrcopy(dest,src);6 a2 l% T) Z* w1 b  V6 S( ^
...
! o, T0 M" t) q9 p}
) Z) w, G- v: ?6 a+ dAREA     StrCopy,CODE,READONLY
. x% x3 q5 k0 u$ u) C! _EXPORT strcopy  U$ S, g5 }  a- `
strcopy  U$ g8 X; p, t6 D' i
LDRB     R2,[R1],#1
% d: C8 M& n: D: Z) Y6 x6 xSTRB      R2,[R0],#19 w& q1 x+ S& b5 j7 v6 Q- Y
CMP              R2,#0
: Z" N" V* A( ], {( HBNE              strcopy
; |# @+ u9 s0 K) T8 I1 G8 LMOV             PC,LR$ w) S+ Q1 {) C' G9 f
END
5 e; V' J1 S+ a! s这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。

该用户从未签到

2#
发表于 2016-6-7 17:43 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈~谢谢
- E! Z: i( [& F& e  |' F5 _

该用户从未签到

3#
发表于 2016-7-26 09:16 | 只看该作者
资源多,学习不止步,共同进步3 A  M; D, Q9 `

该用户从未签到

4#
发表于 2016-8-1 15:46 | 只看该作者
楼主辛苦了!7 ?8 W6 k( e8 E: h. O) O- Q) B$ |. W

该用户从未签到

5#
发表于 2016-8-3 14:11 | 只看该作者
支持楼主!谢谢分享!) o* e. @: C! R! [% r# V% z) s
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-1 07:42 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表