混合编程接口规范

本文探讨了在Linux等操作系统中,模块的总入口和接口分发,并以ABI(应用二进制接口)为中心,详细阐述了ABI在C和汇编混合编程中的重要性,特别是ARM体系的ATPCS(ARM Procedure Call Standard)和MIPS ABI的寄存器及参数传递规则。通过实例分析,指出正确的接口声明方式应保持总入口与具体接口参数顺序一致,以便于编译优化。
摘要由CSDN通过智能技术生成

一般地,在Linux或者其他操作系统中,一个模块都有一个总入口和多个具体的接口集,例如驱动、中间件等。上层应用调用总入口,并传递具体接口对应的命令号cmd和具体的接口参数,总入口负责分发调用具体的接口来实现。那么,总入口会有以下声明形式:

Drv_entry(uint8_t cmd, void*,void*,void*);

Drv_entry(void*, void*,void*, uint8_tcmd);

两者的不同,就在于cmd的位置不同,那么两者哪种声明比较好呢?如果你能立刻做出正确的选择,那么你的嵌入式软件功底是蛮不错的。如果不能,那说明你还需要好好努力。

这个问题跟ABI和编译优化有关,可以先思考,答案放文章最后。

一、ABI

API是应用编程接口,是高级语言接口。而ABI是应用二进制编程接口,在C和汇编语言混合编程中必须要非常熟练,尤其在操作系统的定制和优化里面常常需要注意和运用。纯C编程虽然可以不用在意ABI,但不熟悉会造成程序性能下降。

ABI要解决的问题包括:1.参数如何传递和返回,不同的参数类型,一个或者多个传参 2. 参数传递过程中对栈、寄存器的利用。

ABI是一种编译约定,并不是CPU对软件的强制规定。有一个寄存器例外,就是PC寄存器。编译器必须要使用CPU指定的寄存器作为PC寄存器。

二、ATPCS

ARM体系的ABI。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值