<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在嵌入式系統中,驅動都是以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嵌入式軟件架構設計](http://blog.csdn.net/column/details/fw-arch-design.html),謝謝! 更多嵌入式和物聯網原創技術分享敬請關注微信公眾號:嵌入式企鵝圈 ![](https://box.kancloud.cn/2016-01-13_5695f8f8d24b2.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看