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

來源:互聯網
上載者:User

標籤: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<<N)+0 ,在fs.h中,表示fopen是檔案系統提供的第一個介面,這個常量包含兩部分資訊,一是檔案系統在API管理中的索引,二是該介面在自己驅動介面中的索引。

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

 

       請關注本人原創的嵌入式架構設計專欄:SoC嵌入式軟體架構設計,謝謝!

 

 

 

 

 

 

 

 

 

 

         

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.