• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    MQX操作系統(tǒng)底層驅(qū)動設計分析與改進*

    2020-03-20 03:05:32潘俊虹蔡闖華1
    吉首大學學報(自然科學版) 2020年1期
    關鍵詞:驅(qū)動程序調(diào)用隊列

    潘俊虹,彭 濤,蔡闖華1,

    (1.武夷學院數(shù)學與計算機學院,福建 武夷山 354300;2.蘇州大學計算機科學與技術學院,江蘇 蘇州 215006;3.認知計算與智能信息處理福建省高校重點實驗室,福建 武夷山 354300)

    MQX(Message Queue eXecutive,消息隊列執(zhí)行)是由恩智浦公司推出的一款免費、開源且提供持續(xù)技術支持的嵌入式實時操作系統(tǒng)(Embedded Real Time Operation System,RTOS)[1].MQX以其豐富的外設驅(qū)動、精簡的內(nèi)核、清晰的架構(gòu)和較強的實時性等優(yōu)點,在工業(yè)自動化、智能家居等領域廣泛應用.MQX版本在不斷更新,目前的最新版本是于2015年7月推出的MQX 4.2.0.鑒于MQX在嵌入式開發(fā)領域廣闊的市場前景[2-4],分析研究MQX底層設備驅(qū)動設計的原理和方法對促進其發(fā)展具有一定的意義.

    在嵌入式軟件系統(tǒng)中,底層設備驅(qū)動直接面向底層硬件,實現(xiàn)對底層硬件的訪問控制,是操作系統(tǒng)的重要組成部分[5].MQX采用統(tǒng)一的模型來管理設備驅(qū)動,用戶在應用程序中可以通過一組標準的接口函數(shù)對設備進行訪問.MQX根據(jù)管理設備方式的不同,將設備驅(qū)動分為內(nèi)核安裝管理的輸入輸出(Input/Output,I/O)子系統(tǒng)層設備驅(qū)動和非內(nèi)核安裝管理的驅(qū)動2大類.對于非內(nèi)核安裝類驅(qū)動,用戶直接調(diào)用MQX提供的應用程序編程接口(Application Programming Interface,API)函數(shù)或者靜態(tài)庫即可[6].筆者主要針對內(nèi)核安裝的I/O子系統(tǒng)層設備驅(qū)動管理和設計方法進行闡述,通過分析MQX底層設備驅(qū)動管理和設計模式,給出了底層驅(qū)動開發(fā)的基本方法,并在此基礎上對底層驅(qū)動設計方式進行改進.

    1 MQX設備驅(qū)動機制分析

    1.1 MQX底層設備驅(qū)動運行模式

    圖1 MQX I/O設備驅(qū)動層次結(jié)構(gòu)Fig.1 Hierarchical Structure of MQX I/O Device Drivers

    MQX標準I/O設備驅(qū)動可分為格式化ANSI(American National Standards Institute,美國國家標準協(xié)會)I/O層、MQX I/O子系統(tǒng)層和底層設備驅(qū)動層[7],具體結(jié)構(gòu)如圖1所示.

    格式化ANSI I/O層由應用程序調(diào)用,是MQX為應用程序提供的一組格式化ANSI文件接口.在源文件“MQXincludeio.h”中可以看出,MQX通過宏定義映射到I/O子系統(tǒng)層對應的接口函數(shù)上(表1).

    表1 MQX設備驅(qū)動函數(shù)映射關系Table 1 Mapping Relationship Between MQX Device Driver Functions

    MQX I/O子系統(tǒng)層遵循可移植操作系統(tǒng)接口(Portable Operating System Interface of UNIX,POSIX)標準[8],由格式化ANSI I/O層調(diào)用,是格式化ANSI I/O層與底層設備驅(qū)動的紐帶,它提供了專門的API函數(shù)將標準I/O函數(shù)與設備的私有信息及底層設備驅(qū)動進行關聯(lián).這些API函數(shù)中,最關鍵的是驅(qū)動注冊安裝函數(shù)io_dev_install.該函數(shù)主要功能是將包含有I/O設備的標識符、驅(qū)動函數(shù)名及其數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)體安裝到操作系統(tǒng)的設備管理隊列中.實際打開設備時,I/O子系統(tǒng)以設備標識符作為索引檢索設備管理隊列,建立設備文件到設備結(jié)點的關聯(lián),并返回文件指針,通過文件指針句柄調(diào)用關聯(lián)的設備驅(qū)動函數(shù)來執(zhí)行操作.通過這種方式,底層設備在MQX中被抽象成文件,借助文件名間接調(diào)動底層設備驅(qū)動,以實現(xiàn)打開設備和打開文件的方式統(tǒng)一.

    底層設備驅(qū)動層是根據(jù)各種具體設備開發(fā)的驅(qū)動程序.MQX為不同型號的嵌入式MCU提供了大量的板級支持包(Board Support Package,BSP)級底層驅(qū)動程序,用戶也可以根據(jù)需要改寫或自己編寫設備驅(qū)動程序.當用戶在應用工程中需要訪問這些底層設備時,只需將所需的底層驅(qū)動程序添加到用戶工程,并將驅(qū)動程序注冊到I/O子系統(tǒng)設備管理隊列中,就可以在用戶任務中直接調(diào)用fopen,fclose,fread和fwrite等標準函數(shù)對底層設備進行訪問和控制.

    1.2 I/O設備驅(qū)動隊列管理器

    圖2 I/O驅(qū)動管理隊列設備結(jié)點結(jié)構(gòu)Fig.2 Node Structure of I/O Driver Management Queue Device

    MQX通過鏈隊列的形式來實現(xiàn)I/O設備驅(qū)動的組織和管理.MQX系統(tǒng)在內(nèi)核初始化時創(chuàng)建設備驅(qū)動鏈隊列的頭結(jié)點,如圖2所示,隊列中每一個結(jié)點都是IO_DEVICE_STRUCT結(jié)構(gòu)體類型,包括設備標識符、驅(qū)動接口指針和驅(qū)動設備信息指針等.用戶在使用驅(qū)動前需將驅(qū)動注冊到I/O子系統(tǒng)層的設備管理隊列中,注冊安裝過程實際上就是將各設備的驅(qū)動結(jié)點插入到驅(qū)動管理隊列當中,并通過指針連接成完整的驅(qū)動鏈表隊列.設備驅(qū)動必須注冊到I/O設備驅(qū)動管理隊列才能為標準I/O層的格式化標準函數(shù)提供服務.設備驅(qū)動結(jié)點由_io_dev_install函數(shù)安裝設備驅(qū)動時動態(tài)創(chuàng)建,并由I/O子系統(tǒng)維護.新添加的設備驅(qū)動被插入到鏈隊列的尾部.由于每個I/O設備傳入安裝函數(shù)的初始化信息參數(shù)不同,在調(diào)用安裝函數(shù)之前每個I/O設備都要定義自己的安裝函數(shù)_io_dev_install.在打開設備時,先由fopen函數(shù)創(chuàng)建一個設備文件描述符,并由該描述符的DEV_PTR指針(文件句柄)建立與設備驅(qū)動結(jié)點的關聯(lián),通過該句柄在設備隊列中快速定位設備結(jié)點,然后調(diào)用標準I/O函數(shù)如同訪問文件一樣對設備進行訪問.

    1.3 底層設備驅(qū)動參數(shù)的組織和分解

    MQX底層設備驅(qū)動程序的設計開發(fā)相對獨立于上層I/O子系統(tǒng)層[9].只要明確上層函數(shù)傳遞來的參數(shù)格式,在底層驅(qū)動中將其分解出來供底層設備驅(qū)動程序使用,其他設計原則和方法與無操作系統(tǒng)下的驅(qū)動開發(fā)一致.因此,設備驅(qū)動設計的關鍵就是函數(shù)參數(shù)的組織、傳遞和分解.

    (1)底層設備驅(qū)動參數(shù)的組織封裝.MQX操作系統(tǒng)底層設備驅(qū)動函數(shù)的參數(shù)傳遞過程,一般是先將參數(shù)信息封裝在數(shù)據(jù)結(jié)構(gòu)體中,再將數(shù)據(jù)結(jié)構(gòu)體指針傳遞給底層設備驅(qū)動程序.底層設備驅(qū)動程序通過結(jié)構(gòu)體指針從數(shù)據(jù)結(jié)構(gòu)中分解出所需的參數(shù),參數(shù)的這種封裝有利于簡化參數(shù)的傳遞且更加方便快捷.MQX將底層設備驅(qū)動初始化參數(shù)分為2個部分:一部分與MCU型號和開發(fā)板密切相關,基本不再改變;另一部分由標準函數(shù)fopen在打開設備時傳入,可根據(jù)用戶工程需要進行動態(tài)調(diào)整和改變.

    (2)底層設備驅(qū)動初始化參數(shù)分解.底層設備驅(qū)動的初始化參數(shù)在執(zhí)行fopen函數(shù)(已映射到_io_fopen函數(shù))時傳入,其格式如下:

    驅(qū)動在注冊時,IO_OPEN代表device_open函數(shù)指針,因此上面代碼相當于調(diào)用device_open函數(shù),其中參數(shù)file_ptr為文件句柄,是指向的結(jié)構(gòu)體中保存了設備驅(qū)動結(jié)點的指針.設備驅(qū)動結(jié)點的DRIVER_INT_PTR指針指向封裝了設備與BSP相關的信息,其他指針則指向設備標識符和相應的驅(qū)動函數(shù).由此可見,只要明確傳入底層驅(qū)動函數(shù)的指針含義,并熟悉參數(shù)結(jié)構(gòu)體各成員的作用,即可解析出底層驅(qū)動模塊所需的初始化參數(shù).

    2 MQX底層設備驅(qū)動設計基本方法

    MQX將底層設備驅(qū)動統(tǒng)一在三層體系結(jié)構(gòu)模型中,雖然設備驅(qū)動的實現(xiàn)內(nèi)容各有不同,但是在MQX統(tǒng)一模型中設備驅(qū)動計方法是一致的[10].主要步驟如下:按照嵌入式底層軟件構(gòu)件的設計思想,將底層驅(qū)動封裝成device.h和device.c軟件構(gòu)件(device表示具體的設備模塊名);在device.h頭函數(shù)中封裝定義與板級相關的驅(qū)動模塊參數(shù),定義初始化參數(shù)值;給出用戶可以動態(tài)修改的初始化參數(shù)結(jié)構(gòu)體結(jié)構(gòu),以便于調(diào)用fopen函數(shù)時依據(jù)工程的需要動態(tài)修改底層模塊的性能;在device.c中編寫設備驅(qū)動的各個功能函數(shù),在初始化設備功能函數(shù)(一般為device_open)中解析傳入的初始化參數(shù)結(jié)構(gòu)體,獲取初始化參數(shù);編寫注冊安裝設備驅(qū)動函數(shù),主要調(diào)用MQX提供的系統(tǒng)函數(shù)_io_dev_install注冊設備驅(qū)動到管理隊列中,但也可以對初始化參數(shù)進一步封裝.

    下面通過一個串行通信接口(Serial Communication Interface,SCI)設備驅(qū)動實例來介紹設備驅(qū)動設計過程.主要步驟如下:

    (ⅰ)SCI設備屬性信息封裝.設備屬性信息是在操作系統(tǒng)中配置設備驅(qū)動、調(diào)用驅(qū)動函數(shù)必須的參數(shù),這些參數(shù)在MQX設備驅(qū)動三層模型中的不同層之間傳遞,對于調(diào)用的上層應用程序是透明的.SCI設備屬性通常包含設備號、模塊時鐘和通信波特率等,可用SCI_INIT_STRUCT屬性信息結(jié)構(gòu)體進行封裝,結(jié)構(gòu)體類型定義放在sci.h文件中.在加載設備時,MQX將該結(jié)構(gòu)體加載到設備驅(qū)動鏈隊列的對應SCI設備結(jié)點中,并由 DRIVER_INIT_PTR類型指針來指向,實際使用時可通過該指針提取SCI設備屬性信息.描述SCI設備屬性的結(jié)構(gòu)體代碼如下:

    ∥SCI_INIT_STRUCT 結(jié)構(gòu)體

    typedef struct _sci_init_struct{

    uint_8 SCI_ID;∥SCI設備號

    uint_32 BUS_CLK;∥模塊工作時鐘

    uint_32 BAUD_RATE;∥通信波特率

    } SCI_INIT_STRUCT,*SCI_INIT_PTR;

    (ⅱ)編寫SCI驅(qū)動函數(shù).SCI驅(qū)動函數(shù)利用設備標識符可快速定位到設備驅(qū)動隊列中的SCI結(jié)點,并通過該節(jié)點中的設備驅(qū)動初始化句柄DRIVER_INIT_PTR解析出設備屬性信息,由傳入的設備參數(shù)對串口模塊進行訪問以實現(xiàn)具體的各個功能.驅(qū)動函數(shù)聲明放在sci.h文件中,驅(qū)動函數(shù)的實現(xiàn)放在對應的sci.c文件中.SCI串口驅(qū)動包含串口打開、關閉、發(fā)送和接收數(shù)據(jù)等功能,部分串口驅(qū)動函數(shù)代碼如下:

    ∥串口打開函數(shù)

    _mqx_int _io_sci_open(MQX_FILE_PTRfile_dev_ptr,char_ptr sci_name,char_ptrparams)

    ∥串口關閉函數(shù)

    _mqx_int_io_sci_close(MQX_FILE_PTRfile_dev_ptr)

    ∥串口讀取函數(shù)

    _mqx_int_io_sci_read(MQX_FILE_PTRfile_dev_ptr,char_ptrbuff,_mqx_intlen)

    ∥串口寫入函數(shù)

    _mqx_int_io_sci_write(MQX_FILE_PTRfile_dev_ptr,char_ptrbuff,_mqx_intlen)

    其中:參數(shù)file_dev_ptr為關聯(lián)設備文件句柄;open_name為設備標識符;params 為設備初始化屬性;buff為數(shù)據(jù)緩沖區(qū);len為數(shù)據(jù)長度.

    (ⅲ) 編寫SCI驅(qū)動注冊安裝函數(shù).MQX的I/O子系統(tǒng)層提供專門的API函數(shù)來管理設備驅(qū)動隊列,包括_io_dev_install,_io_dev_uninstall,_io_get_handle,_io_init和_io_set_handle等.其中_io_dev_install函數(shù)負責將設備驅(qū)動結(jié)點(包含設備標識符、設備驅(qū)動函數(shù)名和指向設備屬性信息結(jié)構(gòu)體指針)安裝到設備管理隊列中,從而建立I/O設備驅(qū)動的中間轉(zhuǎn)換層.下面代碼段是在MQX/IO/io_inst.c文件中定義的_io_dev_install函數(shù)聲明部分:

    _mqx_uint_io_dev_install(char_ptr identifier,∥設備標識符

    _mqx_int(_CODE_PTR_ io_open)∥I/O設備打開函數(shù)

    (MQX_FILE_PTR,char_PTR_,char_PTR_),∥I/O設備關閉函數(shù)

    _mqx_int(_CODE_PTR_o_close)(MQX_FILE_PTR),

    _mqx_int(_CODE_PTR_ io_read)∥I/O設備讀取函數(shù)

    (MQX_FILE_PTR,char_PTR_,_mqx_int),∥I/O設備寫函數(shù)

    _mqx_int(_CODE_PTR_io_write)(MQX_FILE_PTR,char_PTR_,_mqx_int),

    _mqx_int(_CODE_PTR_io_ioctl)∥I/O控制設備屬性函數(shù)

    (MQX_FILE_PTR,_mqx_uint,pointer),∥I/O設備初始化數(shù)據(jù)結(jié)構(gòu)體

    pointer io_init_data_ptr)

    對于驅(qū)動函數(shù)注冊安裝,需要具體設備的標識符和指向存有設備屬性信息結(jié)構(gòu)的指針作為參數(shù),并在注冊驅(qū)動函數(shù)內(nèi)部調(diào)用系統(tǒng)API函數(shù)_io_dev_install實現(xiàn)注冊安裝.SCI注冊安裝驅(qū)動函數(shù)編寫如下:

    _mqx_uint io_sci_install(char_ptr identifier,SCI_INIT_PTR sci_init_ptr){

    ∥調(diào)用系統(tǒng)注冊安裝API函數(shù)

    return_io_dev_install(identifier,_io_sci_open,_io_sci_close,_io_sci_read,_io_sci_write,_io_sci_ioctl,(pointer) sci_init_ptr);}

    其中:參數(shù)identifier為SCI 設備標識符;sci_init_ptr為設備屬性信息結(jié)構(gòu)體指針._io_dev_install 函數(shù)的形參在實際調(diào)用時與第2大部分步驟(ii)中定義的SCI具體驅(qū)動功能函數(shù)指針關聯(lián),安裝成功即將SCI設備結(jié)點添加到系統(tǒng)的設備管理隊列之后.執(zhí)行打開SCI設備文件操作時,I/O子系統(tǒng)以SCI設備標識符作為索引檢索設備管理隊列,定位到設備后,通過關聯(lián)的文件句柄調(diào)用驅(qū)動函數(shù)對SCI進行訪問.

    (ⅳ) 在任務中調(diào)用驅(qū)動服務.底層設備驅(qū)動注冊成功后,就可在MQX的功能任務中調(diào)用驅(qū)動服務.用戶可像對文件操作一樣,通過系統(tǒng)I/O層提供的標準函數(shù)對底層設備進行訪問和控制.在調(diào)用設備之前,需要獲取設備文件訪問句柄,這一操作由標準函數(shù)fopen函數(shù)實現(xiàn).用戶打開設備時,實際上是獲取設備文件的訪問句柄,有了設備訪問句柄,其他標準函數(shù)就可以通過其來對設備進行操作.以下是測試串口驅(qū)動調(diào)用代碼:

    void task_sci_test(uint_32 init_data)

    {

    MQX_FILE_PTR file_dev_ptr;

    char buff=”This is SCI test!”;

    file_dev_ptr=fopen(“sci2”,null);∥打開設備,獲取設備文件句柄

    if(file_dev_ptr){

    write(file_dev_ptr,buff,strlen(buff));∥串口輸出字符串

    }

    fclose(file_dev_ptr);∥關閉設備

    _task_block();∥任務阻塞

    }

    3 MQX底層設備驅(qū)動設計方法改進

    3.1 底層設備驅(qū)動可移植性分析

    對于無操作系統(tǒng)驅(qū)動調(diào)用而言,傳入的參數(shù)一般可被驅(qū)動函數(shù)直接調(diào)用.而通過對MQX系統(tǒng)底層驅(qū)動機制的分析可以發(fā)現(xiàn),在其三層驅(qū)動模型中,底層設備驅(qū)動與無操作系統(tǒng)下設計驅(qū)動構(gòu)件的主要區(qū)別在于,MQX底層驅(qū)動傳入的是結(jié)構(gòu)體類型指針,包含了傳入?yún)?shù)信息的解析操作.這些操作都是由操作系統(tǒng)的API函數(shù)進行組織和傳遞的,這樣可以提高設備驅(qū)動與操作系統(tǒng)的粘合性,降低底層設備驅(qū)動的移植和復用效率,也難以復用被驗證過的成熟設備驅(qū)動構(gòu)件,導致增加嵌入式軟件的開發(fā)難度,同時也延長開發(fā)周期[11].

    3.2 驅(qū)動設計改進基本思想

    對于底層驅(qū)動過于依附操作系統(tǒng)API函數(shù)的情況,可以將MQX底層設備驅(qū)動程序所需的參數(shù)由專門的函數(shù)(接口構(gòu)件)進行解析后,再提供給底層設備驅(qū)動函數(shù)使用,這樣MQX底層設備驅(qū)動程序就與無操作系統(tǒng)下的設備驅(qū)動程序趨于一致.同樣地,無操作系統(tǒng)下的設備驅(qū)動程序只需加上一層負責參數(shù)解析的接口構(gòu)件,就可以掛接到MQX操作系統(tǒng)的設備管理隊列中,在MQX操作系統(tǒng)環(huán)境下使用.通過在I/O子系統(tǒng)層和底層設備驅(qū)動層之間增加接口驅(qū)動層(圖3),可以使得底層設備驅(qū)動程序不再緊密依附操作系統(tǒng),實現(xiàn)設備驅(qū)動完全獨立于MQX操作系統(tǒng).這樣一來,底層驅(qū)動就不必為某種操作系統(tǒng)專門設計,應用成熟的驅(qū)動構(gòu)件還可以進入構(gòu)件庫,為用戶提供面向底層設備而不是面向操作系統(tǒng)的驅(qū)動構(gòu)件.根據(jù)軟件工程構(gòu)件化開發(fā)思想,成熟的構(gòu)件復用不僅能提高軟件開發(fā)效率,還能提高系統(tǒng)的穩(wěn)定性和可靠性[12].

    圖3 改進的I/O驅(qū)動層次結(jié)構(gòu)Fig.3 Improved I/O Driver Hierarchy

    3.3 接口驅(qū)動構(gòu)件設計

    根據(jù)前文的分析,接口驅(qū)動構(gòu)件可以作為操作系統(tǒng)內(nèi)核與底層驅(qū)動程序的連接通道,實現(xiàn)接口轉(zhuǎn)接功能.其主要職責可以歸結(jié)為3點:(1)接收來自I/O子系統(tǒng)層傳入的設備管理隊列中底層設備屬性結(jié)構(gòu)體參數(shù);(2)提取分解結(jié)構(gòu)體參數(shù)信息;(3)調(diào)用底層驅(qū)動函數(shù)傳入至設備參數(shù),供其使用.考慮到MQX驅(qū)動函數(shù)采用的是統(tǒng)一的模型,操作系統(tǒng)對設備驅(qū)動屬性信息的解析方式和對驅(qū)動函數(shù)的調(diào)用規(guī)則是一致的,在設計接口驅(qū)動構(gòu)件時,可復制工程中成熟的接口驅(qū)動構(gòu)件進行改寫,在提高效率的同時也能使接口驅(qū)動構(gòu)件更好地與操作系統(tǒng)銜接.因此,1.3節(jié)中SCI串口打開接口驅(qū)動函數(shù)可改寫如下(其他接口驅(qū)動與此類似,不再贅述):

    _mqx_int _io_sci_open(MQX_FILE_PTRfile_dev_ptr,char_ptrbuff,_mqx_int len){

    ∥在設備管理隊列中定位設備驅(qū)動結(jié)點

    IO_DEVICE_STRUCT_PTRdev_ptr=file_dev_ptr-DEV_PTR;

    ∥通過文件句柄訪問設備屬性信息結(jié)構(gòu)體

    SCI_INIT_PTR sci_init_ptr=(SCI_INIT_PTR)(dev_ptr-DRIVER_INIT_PTR);

    ∥提取設備屬性信息

    uint_32 bus_clk=sci_init_ptr-BUS_CLK;

    uint_32 b_rate=sci_init_ptr-BAUD_RATE;

    ∥調(diào)用底層驅(qū)動函數(shù)實現(xiàn)功能

    sci_init(dev_id,bus_clk,baud_rate);∥初始化∥串口

    sci_send(dev_id,len,buff);∥串口數(shù)據(jù)發(fā)送

    }

    3.4 SCI驅(qū)動構(gòu)件測試

    圖4 串口驅(qū)動構(gòu)件測試Fig.4 Test of Serial Port Driver Component

    測試工程使用MQXFW工程框架[2],硬件采用基于ARM Cortex-M0+內(nèi)核的KL25評估板.用串口轉(zhuǎn)USB線連接PC與KL25評估板,通過嵌入式集成開發(fā)軟件KDS(Kinetis Design Studio,Kinetis設計工作室)將包含SCI驅(qū)動構(gòu)件和發(fā)送接收任務的工程進行編譯并下載到KL25啟動運行.程序的主要功能是KL25定時向PC機發(fā)送字符串“This is SCI test!”,并通過中斷接收來自PC機發(fā)送的字符串,然后將字符串回發(fā)給PC機.運行在PC機端的串口測試軟件顯示接收到的字符串如圖4所示.測試結(jié)果表明,KL25串口模塊正常接收發(fā)送字符串,所設計的SCI驅(qū)動構(gòu)件運行穩(wěn)定可靠,結(jié)果正確.

    4 結(jié)語

    在嵌入式操作系統(tǒng)中,設備是應用程序必使用的資源,然而設備具有多樣性,為了使操作系統(tǒng)下的應用程序與設備無關,須將設備的復雜性和多樣性屏蔽起來,為應用程序提供統(tǒng)一的使用接口.在MQX操作系統(tǒng)中采用了三層模型,以設備驅(qū)動隊列管理器為核心載體實現(xiàn)統(tǒng)一的驅(qū)動管理模式,使得用戶可以使用標準的I/O函數(shù)來訪問控制底層設備.但從設備驅(qū)動開發(fā)、移植和復用角度來看,由于設備參數(shù)信息需要MQX系統(tǒng)API函數(shù)進行解析傳遞,因此增加了設備驅(qū)動程序與操作系統(tǒng)的粘合性,一定程度上也增加了設備驅(qū)動的開發(fā)難度,降低了驅(qū)動構(gòu)件的可移植性和可復用性.從嵌入式軟件工程構(gòu)件開發(fā)角度,在底層設備驅(qū)動外層再次進行封裝,通過接口構(gòu)件來解析設備屬性參數(shù)信息,實現(xiàn)底層驅(qū)動與操作系統(tǒng)轉(zhuǎn)接,這樣就可實現(xiàn)面向底層設備的驅(qū)動設計,與操作系統(tǒng)無關,將底層驅(qū)動從操作系統(tǒng)中完全獨立出來.實驗證明,這種底層驅(qū)動開發(fā)方式有效提高了軟件開發(fā)效率,開發(fā)的底層驅(qū)動構(gòu)件在不同應用、不同操作系統(tǒng)間的移植和復用更加方便快捷.

    猜你喜歡
    驅(qū)動程序調(diào)用隊列
    隊列里的小秘密
    基于多隊列切換的SDN擁塞控制*
    軟件(2020年3期)2020-04-20 00:58:44
    核電項目物項調(diào)用管理的應用研究
    在隊列里
    LabWindows/CVI下基于ActiveX技術的Excel調(diào)用
    測控技術(2018年5期)2018-12-09 09:04:46
    豐田加速駛?cè)胱詣玉{駛隊列
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術研究
    利用RFC技術實現(xiàn)SAP系統(tǒng)接口通信
    驅(qū)動程序更新與推薦
    驅(qū)動程序更新與推薦
    侵犯人妻中文字幕一二三四区| 岛国毛片在线播放| 久久天躁狠狠躁夜夜2o2o | 久久国产精品男人的天堂亚洲| 捣出白浆h1v1| 香蕉国产在线看| www.熟女人妻精品国产| 九色亚洲精品在线播放| 搡老岳熟女国产| 欧美日韩综合久久久久久| 99精品久久久久人妻精品| 免费久久久久久久精品成人欧美视频| 国产精品熟女久久久久浪| 97在线人人人人妻| 国产成人精品久久久久久| 两人在一起打扑克的视频| 日日爽夜夜爽网站| 国产爽快片一区二区三区| 亚洲久久久国产精品| 天天躁夜夜躁狠狠久久av| 婷婷丁香在线五月| 水蜜桃什么品种好| a级片在线免费高清观看视频| 久久久久久久久久久久大奶| 国产精品免费大片| 亚洲精品第二区| 在线观看免费视频网站a站| 男女免费视频国产| 久久久精品94久久精品| 一区二区三区激情视频| 日本黄色日本黄色录像| 国产国语露脸激情在线看| 看免费av毛片| 99久久人妻综合| 亚洲av日韩精品久久久久久密 | 亚洲国产精品成人久久小说| 成年动漫av网址| 亚洲欧美精品自产自拍| 免费av中文字幕在线| a级毛片黄视频| 国产在线观看jvid| 久久久亚洲精品成人影院| 亚洲精品国产一区二区精华液| 不卡av一区二区三区| 国产野战对白在线观看| 永久免费av网站大全| 色综合欧美亚洲国产小说| 又黄又粗又硬又大视频| h视频一区二区三区| cao死你这个sao货| 亚洲国产精品一区三区| 欧美日韩亚洲高清精品| 老汉色av国产亚洲站长工具| 天堂中文最新版在线下载| a级片在线免费高清观看视频| 亚洲欧美一区二区三区国产| 日本欧美国产在线视频| 老司机在亚洲福利影院| 午夜视频精品福利| 涩涩av久久男人的天堂| 九草在线视频观看| 一级,二级,三级黄色视频| 18禁黄网站禁片午夜丰满| 欧美日韩亚洲国产一区二区在线观看 | 国产成人一区二区在线| 国产熟女欧美一区二区| 两性夫妻黄色片| 久久久精品94久久精品| 每晚都被弄得嗷嗷叫到高潮| 精品国产一区二区三区久久久樱花| 极品人妻少妇av视频| 青春草亚洲视频在线观看| 亚洲精品久久午夜乱码| 大陆偷拍与自拍| 天天操日日干夜夜撸| 免费观看av网站的网址| 国产淫语在线视频| 欧美老熟妇乱子伦牲交| 深夜精品福利| 国产成人精品久久久久久| 日本午夜av视频| 午夜激情久久久久久久| 国产1区2区3区精品| 日韩 亚洲 欧美在线| 91字幕亚洲| 另类亚洲欧美激情| 久久鲁丝午夜福利片| 精品福利永久在线观看| 女警被强在线播放| 国产一区二区 视频在线| 不卡av一区二区三区| 嫩草影视91久久| 国产伦理片在线播放av一区| 最近中文字幕2019免费版| 亚洲精品乱久久久久久| 亚洲一区中文字幕在线| 中文字幕人妻丝袜一区二区| 女人精品久久久久毛片| 亚洲专区国产一区二区| 国产欧美亚洲国产| 亚洲国产欧美在线一区| 丰满饥渴人妻一区二区三| 在线精品无人区一区二区三| 操美女的视频在线观看| 九色亚洲精品在线播放| 欧美日本中文国产一区发布| 日韩制服骚丝袜av| 午夜激情av网站| 18禁国产床啪视频网站| 精品久久久久久电影网| 9热在线视频观看99| 欧美变态另类bdsm刘玥| 久久精品久久久久久噜噜老黄| 9191精品国产免费久久| 久久久精品免费免费高清| 精品福利永久在线观看| 日日爽夜夜爽网站| 精品视频人人做人人爽| 成人黄色视频免费在线看| 免费一级毛片在线播放高清视频 | 中文乱码字字幕精品一区二区三区| 青春草视频在线免费观看| 麻豆av在线久日| 50天的宝宝边吃奶边哭怎么回事| av在线app专区| 亚洲欧美精品自产自拍| 久久久久久久精品精品| 国产在线观看jvid| 欧美日韩视频精品一区| 免费日韩欧美在线观看| 亚洲人成网站在线观看播放| 欧美成狂野欧美在线观看| 国产成人免费无遮挡视频| 无遮挡黄片免费观看| 老鸭窝网址在线观看| 久久国产精品人妻蜜桃| 一个人免费看片子| 制服诱惑二区| 热99国产精品久久久久久7| 国产av一区二区精品久久| 国产色视频综合| 在线观看免费高清a一片| 无遮挡黄片免费观看| 伊人亚洲综合成人网| 人人妻人人添人人爽欧美一区卜| 国产精品久久久av美女十八| 香蕉国产在线看| 精品卡一卡二卡四卡免费| 日本欧美视频一区| 在线观看免费午夜福利视频| 9热在线视频观看99| 亚洲久久久国产精品| 老司机午夜十八禁免费视频| 日韩 亚洲 欧美在线| 国产在线视频一区二区| 午夜久久久在线观看| 老汉色∧v一级毛片| 色网站视频免费| 男女边吃奶边做爰视频| 国产深夜福利视频在线观看| 日韩大码丰满熟妇| 日韩免费高清中文字幕av| 欧美变态另类bdsm刘玥| 成人国产av品久久久| 久久人人爽av亚洲精品天堂| 丝袜喷水一区| 别揉我奶头~嗯~啊~动态视频 | 搡老岳熟女国产| 十八禁人妻一区二区| 99国产精品99久久久久| 1024香蕉在线观看| 欧美黄色淫秽网站| 丝袜在线中文字幕| 母亲3免费完整高清在线观看| 欧美大码av| 日韩制服丝袜自拍偷拍| 十八禁人妻一区二区| 中文字幕高清在线视频| 免费在线观看完整版高清| 1024视频免费在线观看| 亚洲欧美成人综合另类久久久| 99精国产麻豆久久婷婷| 亚洲av国产av综合av卡| 可以免费在线观看a视频的电影网站| 久久综合国产亚洲精品| 久热爱精品视频在线9| 青春草视频在线免费观看| 欧美xxⅹ黑人| 久久久久视频综合| 国产在视频线精品| 日本91视频免费播放| 久久国产精品大桥未久av| 午夜老司机福利片| 精品少妇内射三级| 丝瓜视频免费看黄片| videosex国产| 日本vs欧美在线观看视频| 老司机影院成人| 深夜精品福利| 免费av中文字幕在线| 久久人人97超碰香蕉20202| 男女下面插进去视频免费观看| 人人妻人人添人人爽欧美一区卜| 国产日韩欧美亚洲二区| 丝袜美腿诱惑在线| 成人国语在线视频| 色94色欧美一区二区| 精品免费久久久久久久清纯 | 久久久久久久久久久久大奶| 日韩av免费高清视频| 一边摸一边抽搐一进一出视频| 免费少妇av软件| 交换朋友夫妻互换小说| 国产亚洲欧美精品永久| 一边摸一边抽搐一进一出视频| 美女中出高潮动态图| 天天操日日干夜夜撸| 男女国产视频网站| 丰满饥渴人妻一区二区三| 捣出白浆h1v1| 69精品国产乱码久久久| 91九色精品人成在线观看| 久久天堂一区二区三区四区| av又黄又爽大尺度在线免费看| 老司机靠b影院| 天天操日日干夜夜撸| 91精品伊人久久大香线蕉| av视频免费观看在线观看| 国产成人av教育| 97精品久久久久久久久久精品| 午夜福利在线免费观看网站| 精品少妇久久久久久888优播| 国产免费又黄又爽又色| 日韩一卡2卡3卡4卡2021年| 亚洲中文字幕日韩| 男的添女的下面高潮视频| 午夜日韩欧美国产| 黄色一级大片看看| 欧美久久黑人一区二区| 国产精品久久久人人做人人爽| av片东京热男人的天堂| 纯流量卡能插随身wifi吗| 久久免费观看电影| 欧美国产精品va在线观看不卡| 国产一区二区三区综合在线观看| 久久国产精品人妻蜜桃| 国产精品久久久人人做人人爽| 99久久精品国产亚洲精品| 亚洲中文字幕日韩| 久久精品成人免费网站| 手机成人av网站| 亚洲人成77777在线视频| 麻豆国产av国片精品| 老司机影院成人| 成人亚洲精品一区在线观看| 看免费av毛片| 考比视频在线观看| 欧美中文综合在线视频| 亚洲第一av免费看| 国产成人免费观看mmmm| 老熟女久久久| 国产成人av教育| 啦啦啦啦在线视频资源| 又大又爽又粗| 日韩 亚洲 欧美在线| 精品国产乱码久久久久久男人| 黄色a级毛片大全视频| 成年动漫av网址| 一级毛片 在线播放| 老司机靠b影院| 亚洲一区二区三区欧美精品| 人妻人人澡人人爽人人| 国产精品一区二区在线观看99| 精品第一国产精品| 91麻豆精品激情在线观看国产 | 国产黄色视频一区二区在线观看| 最近最新中文字幕大全免费视频 | 久久免费观看电影| a 毛片基地| 欧美日韩亚洲综合一区二区三区_| 色视频在线一区二区三区| 精品人妻在线不人妻| 七月丁香在线播放| 女人高潮潮喷娇喘18禁视频| 日本wwww免费看| 老汉色∧v一级毛片| 1024视频免费在线观看| 一二三四在线观看免费中文在| 肉色欧美久久久久久久蜜桃| 午夜福利影视在线免费观看| 人体艺术视频欧美日本| 9191精品国产免费久久| 精品久久久久久久毛片微露脸 | 国产老妇伦熟女老妇高清| 90打野战视频偷拍视频| 丝袜美足系列| 性高湖久久久久久久久免费观看| 日日摸夜夜添夜夜爱| 欧美黄色片欧美黄色片| 亚洲av电影在线观看一区二区三区| 国产精品香港三级国产av潘金莲 | 国产又色又爽无遮挡免| 国产视频首页在线观看| 亚洲精品一二三| 国产成人啪精品午夜网站| 国产精品久久久av美女十八| 国产97色在线日韩免费| 日本91视频免费播放| 一区二区av电影网| 乱人伦中国视频| 欧美日韩福利视频一区二区| 国产欧美日韩一区二区三区在线| 麻豆国产av国片精品| 亚洲成人免费电影在线观看 | 久久久久久久大尺度免费视频| 这个男人来自地球电影免费观看| 亚洲精品成人av观看孕妇| 亚洲av欧美aⅴ国产| 热99国产精品久久久久久7| 国产精品av久久久久免费| 国产1区2区3区精品| 国产一区二区三区综合在线观看| 免费在线观看日本一区| 欧美激情极品国产一区二区三区| 丁香六月欧美| 色94色欧美一区二区| 中文字幕av电影在线播放| 精品少妇黑人巨大在线播放| 色视频在线一区二区三区| a级片在线免费高清观看视频| 欧美国产精品一级二级三级| 精品国产一区二区三区四区第35| 中文字幕色久视频| 男人添女人高潮全过程视频| 大片电影免费在线观看免费| 亚洲欧美色中文字幕在线| 国产97色在线日韩免费| 免费黄频网站在线观看国产| 中文字幕色久视频| 久久国产精品男人的天堂亚洲| 首页视频小说图片口味搜索 | 男女边吃奶边做爰视频| 赤兔流量卡办理| 国产精品 欧美亚洲| 久久狼人影院| 国产精品三级大全| 午夜福利一区二区在线看| 国产精品 欧美亚洲| 午夜福利乱码中文字幕| 一级毛片电影观看| 国产欧美日韩一区二区三 | 黄色怎么调成土黄色| 欧美黑人欧美精品刺激| 人人妻人人添人人爽欧美一区卜| 日韩,欧美,国产一区二区三区| 久久影院123| 国产精品国产av在线观看| 国产精品欧美亚洲77777| 欧美精品高潮呻吟av久久| 中文字幕色久视频| 日韩 欧美 亚洲 中文字幕| 爱豆传媒免费全集在线观看| 久久久国产欧美日韩av| 又粗又硬又长又爽又黄的视频| 国产成人系列免费观看| 波多野结衣一区麻豆| 老司机在亚洲福利影院| 女性生殖器流出的白浆| 国产精品三级大全| 免费在线观看影片大全网站 | 久久久久国产一级毛片高清牌| 免费看av在线观看网站| 欧美国产精品va在线观看不卡| 精品人妻熟女毛片av久久网站| 少妇的丰满在线观看| 日韩一区二区三区影片| 香蕉丝袜av| 亚洲色图综合在线观看| 一区福利在线观看| 亚洲国产av影院在线观看| 亚洲三区欧美一区| 黄频高清免费视频| 亚洲色图综合在线观看| h视频一区二区三区| 一级毛片 在线播放| 欧美 日韩 精品 国产| 电影成人av| 亚洲欧美一区二区三区久久| 一本一本久久a久久精品综合妖精| 亚洲成国产人片在线观看| 91字幕亚洲| 又大又黄又爽视频免费| 亚洲成人免费av在线播放| 欧美黄色淫秽网站| 国产主播在线观看一区二区 | 视频区欧美日本亚洲| 中文字幕高清在线视频| 免费观看人在逋| 我要看黄色一级片免费的| 欧美xxⅹ黑人| 少妇 在线观看| 国产精品成人在线| 自线自在国产av| 免费不卡黄色视频| 青春草视频在线免费观看| √禁漫天堂资源中文www| 欧美变态另类bdsm刘玥| 校园人妻丝袜中文字幕| 性高湖久久久久久久久免费观看| 日韩免费高清中文字幕av| 性色av乱码一区二区三区2| 亚洲欧美清纯卡通| 亚洲av欧美aⅴ国产| 国产亚洲av高清不卡| 香蕉国产在线看| 999久久久国产精品视频| 亚洲伊人久久精品综合| 无遮挡黄片免费观看| 自拍欧美九色日韩亚洲蝌蚪91| 日韩 欧美 亚洲 中文字幕| 黑人猛操日本美女一级片| 国产伦理片在线播放av一区| 国产免费视频播放在线视频| 国产亚洲精品久久久久5区| 2021少妇久久久久久久久久久| 在线看a的网站| 亚洲专区国产一区二区| 69精品国产乱码久久久| 丁香六月天网| 男女边吃奶边做爰视频| 精品少妇黑人巨大在线播放| netflix在线观看网站| 免费观看av网站的网址| 亚洲欧美日韩另类电影网站| 欧美日韩一级在线毛片| 久久久国产欧美日韩av| av一本久久久久| 人妻一区二区av| 91精品国产国语对白视频| 久久人妻福利社区极品人妻图片 | 成年人黄色毛片网站| 亚洲专区中文字幕在线| xxx大片免费视频| 另类亚洲欧美激情| 中文字幕av电影在线播放| 美女脱内裤让男人舔精品视频| 一个人免费看片子| 2018国产大陆天天弄谢| 亚洲,欧美,日韩| 99国产精品99久久久久| 精品久久久久久久毛片微露脸 | 777久久人妻少妇嫩草av网站| 这个男人来自地球电影免费观看| 999久久久国产精品视频| 国产精品亚洲av一区麻豆| 欧美黑人精品巨大| 久久99热这里只频精品6学生| 精品久久久久久久毛片微露脸 | 激情视频va一区二区三区| 欧美日韩一级在线毛片| 久久久国产欧美日韩av| 欧美精品av麻豆av| 久久久久精品人妻al黑| 中文字幕精品免费在线观看视频| 久久精品成人免费网站| 91字幕亚洲| 久久久久国产一级毛片高清牌| 国产又色又爽无遮挡免| 亚洲中文日韩欧美视频| av网站免费在线观看视频| 亚洲成人免费电影在线观看 | 免费少妇av软件| 在线观看国产h片| 亚洲av日韩精品久久久久久密 | 国产高清不卡午夜福利| 老司机在亚洲福利影院| av福利片在线| 国产在线观看jvid| 久久久久久久久免费视频了| 人体艺术视频欧美日本| 亚洲精品成人av观看孕妇| 操出白浆在线播放| 在线观看国产h片| 国产免费现黄频在线看| 亚洲精品国产av成人精品| 亚洲黑人精品在线| 另类精品久久| 操美女的视频在线观看| 久久毛片免费看一区二区三区| 亚洲精品av麻豆狂野| 久久人妻熟女aⅴ| 99热全是精品| 少妇人妻久久综合中文| 国产午夜精品一二区理论片| 真人做人爱边吃奶动态| 天天操日日干夜夜撸| 999精品在线视频| 日韩大片免费观看网站| 热99久久久久精品小说推荐| 99久久综合免费| 欧美精品人与动牲交sv欧美| 亚洲国产欧美日韩在线播放| 精品欧美一区二区三区在线| 99国产精品免费福利视频| 欧美乱码精品一区二区三区| 十八禁人妻一区二区| 久久精品国产a三级三级三级| 国产激情久久老熟女| 成年人免费黄色播放视频| 国产精品熟女久久久久浪| 久久九九热精品免费| 在线观看人妻少妇| 国产一区二区 视频在线| 99国产综合亚洲精品| 亚洲五月色婷婷综合| 国产麻豆69| 考比视频在线观看| 色播在线永久视频| 伊人亚洲综合成人网| 纯流量卡能插随身wifi吗| 一级片'在线观看视频| 久久久久精品人妻al黑| 在线 av 中文字幕| 后天国语完整版免费观看| 丝袜喷水一区| 亚洲欧美日韩高清在线视频 | 亚洲久久久国产精品| 中文字幕精品免费在线观看视频| 国产黄频视频在线观看| 亚洲精品一区蜜桃| 中国国产av一级| 亚洲人成77777在线视频| 亚洲精品第二区| 性少妇av在线| kizo精华| 一本大道久久a久久精品| 久久精品亚洲av国产电影网| 久久久国产欧美日韩av| 高潮久久久久久久久久久不卡| 中文字幕人妻丝袜制服| 婷婷成人精品国产| 大片电影免费在线观看免费| 美女高潮到喷水免费观看| 亚洲欧美中文字幕日韩二区| 欧美日韩福利视频一区二区| 久热这里只有精品99| 精品卡一卡二卡四卡免费| 又大又爽又粗| 波多野结衣av一区二区av| 黄片播放在线免费| 高清黄色对白视频在线免费看| 亚洲国产欧美日韩在线播放| 国产精品免费大片| 五月开心婷婷网| 国产精品免费视频内射| 日本vs欧美在线观看视频| 欧美激情 高清一区二区三区| 亚洲精品国产av成人精品| 国产精品一国产av| 国产xxxxx性猛交| 国产高清videossex| 日本黄色日本黄色录像| 精品国产国语对白av| 人成视频在线观看免费观看| 久热爱精品视频在线9| 久久精品成人免费网站| 一级黄片播放器| 国产精品偷伦视频观看了| 亚洲国产欧美日韩在线播放| 久久久精品国产亚洲av高清涩受| 精品亚洲成a人片在线观看| av网站在线播放免费| 亚洲精品第二区| 后天国语完整版免费观看| 好男人电影高清在线观看| 国产成人91sexporn| 亚洲国产毛片av蜜桃av| 日本猛色少妇xxxxx猛交久久| 欧美黄色片欧美黄色片| 91精品国产国语对白视频| 少妇裸体淫交视频免费看高清 | 国产一区二区激情短视频 | 亚洲成人免费电影在线观看 | 在线精品无人区一区二区三| a级毛片黄视频| 国产一区二区在线观看av| 人妻一区二区av| 亚洲国产精品成人久久小说| 老司机午夜十八禁免费视频| 亚洲第一青青草原| 色婷婷久久久亚洲欧美| 久久久精品国产亚洲av高清涩受| 黄片小视频在线播放| 亚洲一区中文字幕在线| 菩萨蛮人人尽说江南好唐韦庄| 欧美黑人欧美精品刺激| 老司机在亚洲福利影院| 七月丁香在线播放| 成年人免费黄色播放视频| 精品少妇一区二区三区视频日本电影| 爱豆传媒免费全集在线观看| 五月开心婷婷网| 韩国高清视频一区二区三区| 高清av免费在线| 欧美日韩综合久久久久久| 晚上一个人看的免费电影| 亚洲精品国产色婷婷电影| 日本a在线网址| 亚洲av成人不卡在线观看播放网 | 亚洲国产成人一精品久久久| 亚洲精品国产色婷婷电影| 亚洲七黄色美女视频| 韩国精品一区二区三区| 欧美日韩视频高清一区二区三区二| 99国产精品一区二区蜜桃av |