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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为了使用单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器。如果参数数目超过4个,则使用堆栈进行传递。由于内部寄存器的访问速度远远大于存储器,所以要尽量使参数传递在寄存器里面进行,即应尽量把函数的参数控制在4个以下。
, v, N: B* X0 F示例 汇编函数调用的参数传递。1 w: S+ U" m3 }+ ~! }/ x
从C语言中直接调用汇编语言函数
- T" d" Z8 Z) l, m" lextern void strcopy(char *d,const char *s);3 m; s8 }! l) I
int main(void){
, ?) w+ k2 F/ r% Jconst       char src="Source";
& A9 m! y; W. k! N5 jchar dest[10];% w  N: E4 O8 |# ~# x9 J6 ]
...
( l. v* P1 I% |! \% N" c, vstrcopy(dest,src);1 z; U+ h1 x) `0 t0 z! s& e: q
...
6 M2 g2 \2 v! J- i+ ^+ _8 E6 O1 r}" N+ X- ~# X) J" ^+ ?, z" F
AREA     StrCopy,CODE,READONLY
7 S) l9 l  y8 G9 \+ A! w! ]: l- yEXPORT strcopy7 M. G; l+ p+ W5 ^
strcopy
- e4 R& u9 ?, g  Z6 tLDRB     R2,[R1],#1' K4 E7 C0 Q5 p4 Y/ ^) T
STRB      R2,[R0],#1
- P) l7 @% E$ E6 ]& |' MCMP              R2,#0
( r1 k. A  W  y" u/ PBNE              strcopy
) G3 d0 E' H. Q0 Y5 lMOV             PC,LR
& J' J$ g" c9 ~6 U/ FEND2 C8 [, p0 \  f3 {" i7 p4 o. I% Z
这个例子中的函数strcopy用汇编来实现,根据ATPCS的定义,函数参数从左到右由寄存器进行传递,所以在汇编中直接由R0和R1进行引用。这样,在C语言和汇编语言之间进行调用就容易实现了。

该用户从未签到

5#
发表于 2016-8-3 14:11 | 只看该作者
支持楼主!谢谢分享!% T. w/ @! Z* G0 t! v$ z

该用户从未签到

4#
发表于 2016-8-1 15:46 | 只看该作者
楼主辛苦了!; v9 S0 Q, U0 D$ g  L

该用户从未签到

3#
发表于 2016-7-26 09:16 | 只看该作者
资源多,学习不止步,共同进步
  K( S: m7 a  Z8 R3 z) j% n8 _

该用户从未签到

2#
发表于 2016-6-7 17:43 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈~谢谢
. y4 T. {; K4 C( V& Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 21:32 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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