SoC嵌入式软件架构设计之六:API设计方法
2020-11-25 05:54
标签:api api设计和管理 abi 驱动接口管理 嵌入式软件层次 在嵌入式系统中,驱动都是以API的方式提供给应用进行调用。这里介绍嵌入式系统的API设计和管理方法。 驱动在系统中会按模块进行分类,例如按键驱动、LCD驱动、文件系统、card驱动、I2C驱动等等;每个模块又有多个接口,例如LCD驱动有光标定位、画点、画直线等,而文件系统有fread、fwrite、fseek、fopen等接口。以下举例将以文件系统的fopen为例,工具链为mips。 一、API设计方法 1. 驱动接口声明:extern FILE *
fopen(const char * path,const char * mode),位于fs.h中 2. 驱动接口定义:FILE *
open(const char * path,const char * mode){...},位于fs.c中 3. 驱动接口API: fopen :li v1,FILE_OPEN; syscall; 位于api.S中,是汇编代码。 4. 驱动接口函数指针数组:struct file_operations fs_fops { open,read,write,seek}; 5. 文件系统被加载时,会将文件系统的接口函数指针数组fops注册到系统的API管理数组中。 6. 系统对驱动进行分类管理,其有一个记录各个驱动接口函数指针数组基址的数组,各个驱动事先按顺序进行约定,如数组的第一个元素就是按键驱动的key_fops,而第二个就是LCD驱动的lcd_fops,以此类推。某个驱动被加载时,驱动会把对应的fops通过API管理的接口记录到该数组的对应位置。 这个约定一般会在api.h中,如#define KEY 0 //表示key驱动是约定在数组的第一个位置, #define FS 2//表示FS是约定在数组的第三个位置
7. FILE_OPEN定义:#define FILE_OPEN (FS 8. 应用调用时,path和mode等形参会压入栈,然后进入fopen的API,其将FILE_OPEN常量赋值给v1,通过syscall陷入到异常,进行内核态,这时即可以进入到API管理中,API根据FILE_OPEN提供的两部分信息可以迅速找到open的地址,异常返回时即跳到open的地址执行,此即进行实际的接口调用。整个过程完成。 请关注本人原创的嵌入式架构设计专栏:SoC嵌入式软件架构设计,谢谢! SoC嵌入式软件架构设计之六:API设计方法,搜素材,soscw.com SoC嵌入式软件架构设计之六:API设计方法 标签:api api设计和管理 abi 驱动接口管理 嵌入式软件层次 原文地址:http://blog.csdn.net/yueqian_scut/article/details/25560409