SoC嵌入式軟件架構設計之六 :API設計方法

 在嵌入式系統中,驅動都是以API的方式提供給應用進行調用。這裏介紹嵌入式系統的API設計和管理方法。api

       驅動在系統中會按模塊進行分類,例如按鍵驅動、LCD驅動、文件系統、card驅動、I2C驅動等等;每一個模塊又有多個接口,例如LCD驅動有光標定位、畫點、畫直線等,而文件系統有fread、fwrite、fseek、fopen等接口。如下舉例將以文件系統的fopen爲例,工具鏈爲mips。數組

1、API設計方法函數

       1. 驅動接口聲明:extern FILE * fopen(const char * path,const char * mode),位於fs.h中工具

       2. 驅動接口定義:FILE * open(const char * path,const char * mode){...},位於fs.c中spa

       3. 驅動接口API: fopen :li  v1,FILE_OPEN;設計

                                                  syscall;  位於api.S中,是彙編代碼。指針

       4. 驅動接口函數指針數組:struct file_operations fs_fops {索引

                                                      open,read,write,seek};接口

       5. 文件系統被加載時,會將文件系統的接口函數指針數組fops註冊到系統的API管理數組中。ip

       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<<N)+0 ,在fs.h中,表示fopen是文件系統提供的第一個接口,這個常量包含兩部分信息,一是文件系統在API管理中的索引,二是該接口在本身驅動接口中的索引。

       8. 應用調用時,path和mode等形參會壓入棧,而後進入fopen的API,其將FILE_OPEN常量賦值給v1,經過syscall陷入到異常,進行內核態,這時便可以進入到API管理中,API根據FILE_OPEN提供的兩部分信息能夠迅速找到open的地址,異常返回時即跳到open的地址執行,此即進行實際的接口調用。整個過程完成。

相關文章
相關標籤/搜索