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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
* Z& ?- d, K9 ^! [3 |- ~示例 汇编函数调用的参数传递。( e* W! p  y4 v" }4 \- k
从C语言中直接调用汇编语言函数
- h2 O0 I' e( N( Iextern void strcopy(char *d,const char *s);
0 i& a1 }- h0 h/ c4 @  a9 Q& h0 C) {int main(void){/ E5 E, R# M& Z
const       char src="Source";
2 C9 d4 x" W0 A  E0 gchar dest[10];
& a9 a/ |3 q8 p0 g) p. M0 S$ f" ^3 _...
  {, A, B8 F7 q- ^" Z; J& U- i( Sstrcopy(dest,src);
. m) X, Z- ^5 M9 R- j; R: n6 |...
8 @: L. Y# j, F, n) O7 d# h}
; f; l  v6 y3 eAREA     StrCopy,CODE,READONLY
8 V) e. `( I0 KEXPORT strcopy2 L9 \' t* A9 {# g) b+ r$ u& T" s/ Z
strcopy
0 [9 X& a0 o' K/ r: pLDRB     R2,[R1],#11 Z7 D# W' `* ?4 L0 q/ Z' Q0 Q; _, V
STRB      R2,[R0],#17 ?0 t  B1 _; `
CMP              R2,#0
6 G% l: x( b4 q' H- Y) J7 uBNE              strcopy; C# Q3 D- m& H5 F- x  Q4 T9 b
MOV             PC,LR: @: s# z3 h+ ?! |
END
2 s; S( w  E+ m' O# Z* C这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。

该用户从未签到

2#
发表于 2016-6-7 17:43 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈~谢谢( `/ s" |1 J$ W/ P! A9 Y* E- ^' F

该用户从未签到

3#
发表于 2016-7-26 09:16 | 只看该作者
资源多,学习不止步,共同进步
; U- y# ?" v5 ]

该用户从未签到

4#
发表于 2016-8-1 15:46 | 只看该作者
楼主辛苦了!8 G* h% K8 s+ |) g  ]

该用户从未签到

5#
发表于 2016-8-3 14:11 | 只看该作者
支持楼主!谢谢分享!
* i. i2 `! ^+ B7 v9 r
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-6 22:57 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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