在嵌入式系統中,驅動都是以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 ;
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的位址執行,此即進行實際的介面呼叫。整個過程完成。
高階嵌入式軟體架構設計
了解嵌入式架構的常見問題和解決策略 了解嵌入式架構設計過程 了解嵌入式架構質量評估方法 了解常見的嵌入式設計問題的解決方法 o 嵌入式子系統設計 o 嵌入式層次框架設計 o 嵌入式系統介面設計 o 嵌入式效能架構設計 o 嵌入式可靠性架構設計 o 嵌入式可擴充套件架構設計 培訓物件 嵌入式應用軟體設...
軟體架構設計 六
六 介面協議 這裡說的介面一般指程序間或系統間的介面,至於介面效能,則是在設計心模組時就考慮的問題。我比較想表達以下幾個觀點 1 介面盡量通用,如 2個程序可能部署在同一臺機器上也可能是不同機器上,這時介面就需要考慮通用性 2 介面不能對自身系統和對方系統造成影響,如阻塞 3 介面要考慮容錯性,如加...
c語言嵌入式軟體架構
模組 劃分的 劃 是規劃的意思,意指怎樣合理的將乙個很大的軟體 劃分為一系列功能 獨 立的部分合作完成系統 的需求。c語言作為一種結構化的程式 設計 語言,在 模組的劃分上主要依據功能 依功能進行劃分在物件導向設計中成為乙個錯誤,牛頓定律遇到了相對論 c語言模組化程式設計需理解如下概念 1 模組即是...