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

    基于JNI的Java串口通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    2018-01-09 14:39:54羅尹奇劉力銀
    電腦知識(shí)與技術(shù) 2017年34期
    關(guān)鍵詞:串口通信

    羅尹奇+劉力銀

    摘要:為解決在不同平臺(tái)下Java串口通信問(wèn)題,設(shè)計(jì)了一種通用的Java串口通信系統(tǒng)。該系統(tǒng)采用三層體系架構(gòu),包含了Java接口調(diào)用層、本地接口調(diào)用層和本地實(shí)現(xiàn)層;Java接口調(diào)用層負(fù)責(zé)定義串口通信的功能函數(shù),本地接口調(diào)用層則由JNI(Java Native Interface)技術(shù)生成,定義本地代碼的函數(shù)調(diào)用接口,本地實(shí)現(xiàn)層利用操作系統(tǒng)API實(shí)現(xiàn)串口通信功能。根據(jù)該系統(tǒng)設(shè)計(jì),以Windows平臺(tái)為例,實(shí)現(xiàn)了在Windows平臺(tái)下的Java串口通信。通過(guò)功能測(cè)試實(shí)驗(yàn)表明該系統(tǒng)設(shè)計(jì)能正確地完成串口通信功能。

    關(guān)鍵詞:JNI(Java Native Interface);本地方法;串口通信;Windows

    中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)34-0051-06

    Abstract: In order to solve the problem of Java serial communication in different platforms, a general Java serial communication system is designed in this paper. The system uses three layer architecture, including Java interface layer, native interface layer and a local implementation layer; Java interface layer is responsible for the function definition of serial communication, native interface layer is formed by JNI (Java Native Interface) technique and the function interface to define the local code, local implementation layer using operation API realize the serial communication function. According to the design of the system, this paper takes the Windows platform as an example to realize the Java serial communication under the Windows platform. The function test shows that the design of the system can correctly complete the serial communication function.

    Key words: JNI(Java Native Interface); native method;serial communication; Windows

    隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,串口通信技術(shù)作為一項(xiàng)十分重要的數(shù)據(jù)傳輸手段正得到越來(lái)越廣泛的應(yīng)用[1]。在傳統(tǒng)的應(yīng)用領(lǐng)域里,串口設(shè)備的訪問(wèn)均是基于C/C++本地代碼實(shí)現(xiàn)的,雖然具備較高的訪問(wèn)性能,但其跨平臺(tái)性則相對(duì)受限;而Java程序在跨平臺(tái)方面具備得天獨(dú)厚的優(yōu)勢(shì),其體系結(jié)構(gòu)無(wú)關(guān)性正受到越來(lái)越多的企業(yè)級(jí)服務(wù)的青睞[2-3]。然而Java的跨平臺(tái)特性也為其帶來(lái)了一定的局限性,部分與平臺(tái)相關(guān)的功能無(wú)法得到良好支持[4],在對(duì)本地硬件設(shè)備訪問(wèn)方面(諸如串口設(shè)備等)就是受限情況之一。

    JNI技術(shù)(Java Native Interface)作為Java訪問(wèn)C/C++本地代碼的接口,可以實(shí)現(xiàn)對(duì)本地動(dòng)態(tài)庫(kù)的調(diào)用,既彌補(bǔ)了Java的不足,同時(shí)也兼具了跨平臺(tái)的優(yōu)勢(shì)[3]。通過(guò)該技術(shù)可以將與平臺(tái)相關(guān)的串口通信同跨平臺(tái)的Java應(yīng)用結(jié)合起來(lái),實(shí)現(xiàn)Java程序?qū)Υ谠O(shè)備的訪問(wèn)。

    1 關(guān)鍵技術(shù)簡(jiǎn)介

    1.1 JNI(Java Native Interface)

    JNI(Java Native Interface)是Java本地程序接口,屬于JDK的一部分[3]。JNI允許運(yùn)行在Java 虛擬機(jī)(JavaVirtual Machine,JVM)上的Java代碼操作其他語(yǔ)言(例如C/C++)編寫(xiě)的應(yīng)用程序和庫(kù)[5]。同時(shí)本地應(yīng)用程序和庫(kù)也可以通過(guò)JNI來(lái)操作JVM內(nèi)存中的Java對(duì)象,實(shí)現(xiàn)與Java應(yīng)用程序共享這些對(duì)象[5]。

    本地代碼在平臺(tái)屬性使用和高性能計(jì)算方面具備明顯的優(yōu)勢(shì),而JNI技術(shù)則將這種優(yōu)勢(shì)集成到了Java之中,極大擴(kuò)展了Java的功能范疇,特別是在處理Java本身不具備的平臺(tái)屬性和提升Java應(yīng)用程序性能方面??梢哉f(shuō)JNI技術(shù)充當(dāng)了跨平臺(tái)的Java代碼和平臺(tái)相關(guān)的本地代碼的通信“橋梁”,實(shí)現(xiàn)了兩者之間的互操作性。

    1.2 串口通信

    串口是計(jì)算機(jī)與外圍設(shè)備之間的數(shù)據(jù)傳輸通道[6],數(shù)據(jù)通過(guò)串口以一位一位按順序的方式進(jìn)行傳輸,其優(yōu)點(diǎn)是只需一對(duì)傳輸線,大大降低了數(shù)據(jù)傳輸?shù)某杀荆貏e適合遠(yuǎn)距離通信[7]。當(dāng)前主流的串口標(biāo)準(zhǔn)包含了RS-232、RS-485、RS-422等,這些標(biāo)準(zhǔn)只對(duì)接口的電氣特性做出規(guī)定,而不涉及接插件、電纜或協(xié)議,在此基礎(chǔ)上用戶(hù)可以建立自己的高層通信協(xié)議。

    在當(dāng)前主流操作系統(tǒng)平臺(tái)上,串口設(shè)備是作為一種設(shè)備資源存在的[6],不同的操作系統(tǒng)對(duì)設(shè)備資源的管理方式各不相同,對(duì)串口設(shè)備的編程訪問(wèn)也需要依平臺(tái)而定。在Windows平臺(tái)下,實(shí)現(xiàn)串口通信的方式主要包括平臺(tái)API函數(shù)、MScomm通信組件以及VS2008專(zhuān)門(mén)提供的串口通信類(lèi)SerialPort[6]。

    2 系統(tǒng)設(shè)計(jì)

    2.1 整體架構(gòu)

    為了實(shí)現(xiàn)系統(tǒng)模塊化設(shè)計(jì),保證各個(gè)模塊之間邏輯相對(duì)獨(dú)立以方便后續(xù)改進(jìn),該系統(tǒng)采用了三層體系架構(gòu),即Java接口調(diào)用層、本地接口調(diào)用層和本地實(shí)現(xiàn)層。各層的關(guān)系如下:

    1) Java接口調(diào)用層:定義串口通信的Java接口,該接口一方面提供給應(yīng)用層代碼調(diào)用,實(shí)現(xiàn)Java程序與串口設(shè)備通信;另一方面該接口通過(guò)JNI技術(shù)產(chǎn)生本地調(diào)用接口,實(shí)現(xiàn)Java調(diào)用接口與本地調(diào)用接口一一對(duì)應(yīng)關(guān)系。

    2) 本地接口調(diào)用層:由JNI技術(shù)產(chǎn)生與Java接口對(duì)應(yīng)的本地代碼(C/C++)接口,該接口規(guī)定了本地實(shí)現(xiàn)串口通信功能時(shí)所必須遵照的調(diào)用協(xié)議[2]。

    3) 本地實(shí)現(xiàn)層:利用操作系統(tǒng)API實(shí)現(xiàn)串口號(hào)獲取、打開(kāi)串口、配置參數(shù)、讀寫(xiě)串口、關(guān)閉串口等通信功能,并對(duì)本地調(diào)用接口進(jìn)行封裝。

    根據(jù)各層的關(guān)系,該系統(tǒng)的整體架構(gòu)設(shè)計(jì)如下:

    2.2 Java接口調(diào)用層

    Java接口調(diào)用層實(shí)現(xiàn)對(duì)串口對(duì)象的抽象,將實(shí)際物理串口設(shè)備抽象成邏輯串口對(duì)象,并提供給應(yīng)用層代碼調(diào)用;同時(shí)為了和本地代碼通信,該層定義了調(diào)用接口,描述了本地接口應(yīng)該遵照的調(diào)用協(xié)議形式。由于Java語(yǔ)言本身是面向?qū)ο蟮?,而本地方法(例如C語(yǔ)言)是面向過(guò)程的,所以調(diào)用接口是按照基本數(shù)據(jù)傳遞方式進(jìn)行設(shè)計(jì)。Java接口調(diào)用層設(shè)計(jì)如圖2所示。

    1) SerialPort接口描述了串口對(duì)象的基本功能,屏蔽了底層串口通信細(xì)節(jié),應(yīng)用層可以調(diào)用該接口實(shí)現(xiàn)與串口通信通信;在該接口中定義了串口的打開(kāi)和關(guān)閉、配置串口以及讀寫(xiě)串口功能;

    2) SerialPortImpl類(lèi)為SerialPort接口的具體實(shí)現(xiàn),該類(lèi)中包含了串口對(duì)象的波特率、數(shù)據(jù)位、停止位和校驗(yàn)位屬性,同時(shí)由于串口設(shè)備只能采用獨(dú)占式打開(kāi),因此該類(lèi)采用了單例設(shè)計(jì)模式,保證邏輯串口對(duì)象和物理串口設(shè)備的統(tǒng)一;

    3) PortHelper類(lèi)為調(diào)用接口,可以通過(guò)JNI技術(shù)生成本地調(diào)用接口,該接口中的方法均為靜態(tài)native方法,以便和本地代碼(例如C語(yǔ)言)匹配。

    2.3 本地接口調(diào)用層

    本地接口調(diào)用層由JNI技術(shù)自動(dòng)生成,該層的函數(shù)與上述PortHelper類(lèi)中的方法形成一一對(duì)應(yīng)關(guān)系,從而實(shí)現(xiàn)Java虛擬機(jī)通過(guò)裝載動(dòng)態(tài)連接庫(kù)[4],經(jīng)JNI間接完成本地代碼調(diào)用的過(guò)程。由于該層接口是對(duì)Java調(diào)用接口的本地描述,因此當(dāng)Java調(diào)用接口發(fā)生改變時(shí),該層需重新生成以保證調(diào)用邏輯正確對(duì)應(yīng)。

    本地調(diào)用層在實(shí)現(xiàn)與Java接口調(diào)用層通信的同時(shí),還需要實(shí)現(xiàn)同本地實(shí)現(xiàn)代碼之間的調(diào)用。為了保持模塊的相對(duì)獨(dú)立性,本地調(diào)用層不包含具體的串口通信代碼,其主要功能是實(shí)現(xiàn)基本的數(shù)據(jù)提取和安全檢查,并將處理后的數(shù)據(jù)傳遞給本地實(shí)現(xiàn)層函數(shù)。本地接口調(diào)用層設(shè)計(jì)如下:

    1) 本地接口依賴(lài)于JNI技術(shù)自動(dòng)生成,是一組本地代碼的函數(shù)聲明,不包含具體的邏輯功能,與PortHelper類(lèi)中的方法對(duì)應(yīng)。由于采用了基本數(shù)據(jù)類(lèi)型傳遞數(shù)據(jù),因此生成的本地接口中的數(shù)據(jù)類(lèi)型可以和C語(yǔ)言中的基本數(shù)據(jù)類(lèi)型進(jìn)行關(guān)聯(lián),并可以通過(guò)相應(yīng)的方法完成數(shù)據(jù)轉(zhuǎn)換;

    2) Java中的數(shù)據(jù)類(lèi)型與C語(yǔ)言中的數(shù)據(jù)類(lèi)型存在差異,無(wú)法在本地代碼中直接使用Java數(shù)據(jù)類(lèi)型,因此需要對(duì)JNI傳遞而來(lái)的數(shù)據(jù)做適當(dāng)?shù)奶崛∨c格式轉(zhuǎn)化之后才能在本地代碼中使用;

    3) 在JVM內(nèi)存模型中,JVM能夠?qū)崿F(xiàn)對(duì)堆內(nèi)存進(jìn)行自動(dòng)垃圾回收,但在本地內(nèi)存上則無(wú)法實(shí)現(xiàn),因此在處理數(shù)據(jù)的過(guò)程中,還需對(duì)數(shù)據(jù)的內(nèi)存進(jìn)行管理,以保證不會(huì)發(fā)生JVM崩潰問(wèn)題。

    2.4 本地實(shí)現(xiàn)層

    本地實(shí)現(xiàn)層負(fù)責(zé)處理具體的串口邏輯功能。由于串口設(shè)備的驅(qū)動(dòng)方式和通信方式與具體的操作系統(tǒng)平臺(tái)相關(guān),因此本地實(shí)現(xiàn)層需要借助具體的操作系統(tǒng)平臺(tái)API來(lái)實(shí)現(xiàn)對(duì)串口設(shè)備的操作。串口設(shè)備作為一種獨(dú)占式訪問(wèn)設(shè)備,要求用戶(hù)程序有且僅有一個(gè)實(shí)例來(lái)獲取串口句柄,因此在本地實(shí)現(xiàn)層里提供了一個(gè)全局串口變量來(lái)抽象該設(shè)備,通過(guò)該變量的使用狀態(tài)來(lái)達(dá)到訪問(wèn)互斥的效果。本地實(shí)現(xiàn)層設(shè)計(jì)如下:

    在現(xiàn)代操作系統(tǒng)中,物理設(shè)備被抽象成各種文件,因此對(duì)設(shè)備的訪問(wèn)也相應(yīng)的抽象成了文件訪問(wèn)。而在不同操作系統(tǒng)中,文件模型以及讀寫(xiě)文件的IO模型各不一樣,故本地實(shí)現(xiàn)層的代碼需視具體的操作系統(tǒng)平臺(tái)而定。全局串口變量存在于本地內(nèi)存中,為了保證其內(nèi)存運(yùn)行正確,不會(huì)出現(xiàn)溢出崩潰現(xiàn)象,故設(shè)計(jì)了一組內(nèi)存管理函數(shù)New_Port和Free_Port,用于對(duì)全局串口變量的內(nèi)存空間開(kāi)辟和釋放的管理。

    3 代碼實(shí)現(xiàn)

    3.1 Java接口實(shí)現(xiàn)

    在Java接口調(diào)用層中,PortHelper類(lèi)為調(diào)用接口,也是通過(guò)JNI技術(shù)生成本地調(diào)用接口的模板,因此對(duì)該接口的實(shí)現(xiàn)成為了系統(tǒng)調(diào)用的關(guān)鍵。根據(jù)Java調(diào)用接口層設(shè)計(jì),接口中的方法均為靜態(tài)native方法,并且傳遞的參數(shù)均為基本數(shù)據(jù)類(lèi)型,不涉及復(fù)雜對(duì)象的傳遞。同時(shí)Java語(yǔ)言本身具備良好的跨平臺(tái)性,該接口的定義在任意平臺(tái)下均適用。調(diào)用接口的代碼如下:

    各方法的功能及參數(shù)的說(shuō)明如表2所示。

    3.2 本地接口生成

    本地接口是基于JNI技術(shù)自動(dòng)生成的,在生成時(shí)需要使用不同平臺(tái)下的JNI[3]。本文選擇了Windows平臺(tái)作為實(shí)驗(yàn)平臺(tái),因此需使用該平臺(tái)下的JNI(%JAVA_HOME%\bin\javah.exe)。通過(guò)調(diào)用javah命令將上述PortHelper類(lèi)生成對(duì)應(yīng)的本地接口文件test_tools_PortHelper.h[2]。該頭文件中定義的本地接口與PortHelper類(lèi)中的靜態(tài)方法形成了一一對(duì)應(yīng)關(guān)系,具體代碼如下(省略條件編譯代碼):

    其中jni.h頭文件(以及內(nèi)部包含的jni_md.h)由本地JDK提供,定義了一系列Java與本地代碼通信的庫(kù)函數(shù)和數(shù)據(jù)結(jié)構(gòu),通過(guò)引入該頭文件可以實(shí)現(xiàn)Java數(shù)據(jù)類(lèi)型與本地?cái)?shù)據(jù)類(lèi)型之間相互轉(zhuǎn)化,以及JVM的本地內(nèi)存管理。

    3.3 本地接口調(diào)用實(shí)現(xiàn)

    生成的本地接口不包含任何邏輯,為了實(shí)現(xiàn)本地接口對(duì)本地實(shí)現(xiàn)層的代碼調(diào)用,還需對(duì)本地接口的調(diào)用過(guò)程進(jìn)行實(shí)現(xiàn)。為了保證調(diào)用過(guò)程的相對(duì)獨(dú)立,降低各個(gè)接口之間的耦合度,本地接口與本地實(shí)現(xiàn)層的調(diào)用關(guān)系也為一一對(duì)應(yīng)的,具體對(duì)應(yīng)關(guān)系如下:

    在調(diào)用過(guò)程中,數(shù)據(jù)的傳遞是雙向的,一方面Java代碼中的數(shù)據(jù)通過(guò)JNI傳遞到本地代碼中,這需要保證在本地代碼中能夠正確的提取出所傳遞的數(shù)據(jù);另一方面本地代碼產(chǎn)生的結(jié)果也需要通過(guò)JNI傳遞到Java代碼中,這需要保證JVM本地內(nèi)存和本地內(nèi)存正確,避免潛在的內(nèi)存泄漏引發(fā)程序崩潰。因此在本地調(diào)用時(shí),需要做以下兩點(diǎn)處理:

    1) 利用虛擬機(jī)內(nèi)存指針對(duì)傳遞的數(shù)據(jù)進(jìn)行處理,將其轉(zhuǎn)化為本地代碼能夠識(shí)別的數(shù)據(jù)類(lèi)型;

    2) 利用虛擬機(jī)內(nèi)存指針和本地釋放函數(shù)對(duì)數(shù)據(jù)進(jìn)行回收,避免內(nèi)存泄漏。

    由于在調(diào)用過(guò)程中所有的模塊均需要遵循上述處理要求,因此現(xiàn)以讀取串口為例,展示從JNI中利用虛擬機(jī)內(nèi)存指針獲取數(shù)據(jù)、處理數(shù)據(jù)、調(diào)用本地代碼和回收數(shù)據(jù)整個(gè)過(guò)程(其他模塊處理過(guò)程類(lèi)似,在這里不再?gòu)?fù)述)。

    根據(jù)Java調(diào)用接口定義,讀取串口方法中包含了緩沖區(qū)參數(shù)以及返回實(shí)際讀取的字節(jié)數(shù),由于Java數(shù)據(jù)類(lèi)型與本地代碼數(shù)據(jù)類(lèi)型存在差異,因此首先需要在本地代碼中利用虛擬機(jī)內(nèi)存指針獲取JNI層傳遞的數(shù)組對(duì)象;其次通過(guò)調(diào)用本地實(shí)現(xiàn)層將數(shù)據(jù)從串口設(shè)備中讀取出來(lái);最后對(duì)讀取結(jié)果進(jìn)行封裝并回收內(nèi)存。具體的調(diào)用代碼如下:

    其中需要注意以下關(guān)鍵步驟:

    1) 在步驟①中,由于Java數(shù)組對(duì)象與本地代碼數(shù)組存在著差異,無(wú)法直接對(duì)該數(shù)組對(duì)象直接操作,因此通過(guò)虛擬機(jī)內(nèi)存指針以拷貝的形式將JNI傳遞的數(shù)組對(duì)象獲取出來(lái)。需要注意的是該獲取過(guò)程采用了復(fù)制數(shù)組的形式,因此必須要有對(duì)應(yīng)的回收數(shù)據(jù)的過(guò)程,避免虛擬機(jī)內(nèi)存溢出;

    2) 在步驟②中,通過(guò)直接調(diào)用本地實(shí)現(xiàn)層代碼,完成了從串口設(shè)備中讀取數(shù)據(jù)的功能,其讀取的字節(jié)保存在緩沖區(qū)中;

    3) 在步驟③中,將緩沖區(qū)中的字節(jié)數(shù)據(jù)復(fù)制到數(shù)組對(duì)象中,但需要注意的是,因?yàn)樵摂?shù)組對(duì)象是復(fù)制產(chǎn)生的(步驟①),并未對(duì)實(shí)際數(shù)組對(duì)象發(fā)生任何修改,所以還需通過(guò)虛擬機(jī)內(nèi)存指針對(duì)原數(shù)組對(duì)象進(jìn)行覆蓋;

    4) 步驟④實(shí)現(xiàn)了虛擬機(jī)內(nèi)存指針對(duì)原數(shù)組對(duì)象進(jìn)行覆蓋的功能,從而將本地?cái)?shù)據(jù)通過(guò)JNI傳遞到了Java代碼中;

    5) 步驟⑤與步驟①對(duì)應(yīng),將復(fù)制的數(shù)組對(duì)象進(jìn)行釋放,回收內(nèi)存空間,防止虛擬機(jī)內(nèi)存溢出。

    3.4 本地實(shí)現(xiàn)層

    3.4.1 基本數(shù)據(jù)結(jié)構(gòu)

    本地實(shí)現(xiàn)層負(fù)責(zé)利用平臺(tái)API完成實(shí)際的串口通信。在Windows平臺(tái)下串口設(shè)備被抽象成了文件,因此對(duì)串口設(shè)備的訪問(wèn)轉(zhuǎn)化為對(duì)文件的訪問(wèn),而文件的訪問(wèn)均需要通過(guò)對(duì)應(yīng)的句柄才能完成,故為了方便數(shù)據(jù)管理,進(jìn)一步提高抽象層次,基本數(shù)據(jù)結(jié)構(gòu)中封裝了串口句柄和相應(yīng)參數(shù),并定義了一組常量和內(nèi)存管理函數(shù)?;緮?shù)據(jù)結(jié)構(gòu)核心代碼如下:

    其中Port結(jié)構(gòu)體封裝了與串口有關(guān)的數(shù)據(jù),包括串口句柄、波特率、數(shù)據(jù)位、停止位和校驗(yàn)位。本地實(shí)現(xiàn)層定義了全局變量g_port,能夠保存串口對(duì)象以便在后續(xù)訪問(wèn)中實(shí)現(xiàn)對(duì)串口設(shè)備的讀寫(xiě)功能。New_Port函數(shù)負(fù)責(zé)從內(nèi)存中創(chuàng)建全局變量并完成初始化,free_Port函數(shù)則負(fù)責(zé)關(guān)閉串口句柄并回收內(nèi)存,確保本地內(nèi)存不會(huì)泄漏。

    3.4.2 串口號(hào)獲取

    在Windows平臺(tái)下,為了獲取主機(jī)安裝的所有串口設(shè)備,需要借助Windows API對(duì)注冊(cè)表進(jìn)行訪問(wèn)。在獲取所有串口過(guò)程中沒(méi)有打開(kāi)串口的操作,故不需要使用全局變量g_port。串口號(hào)獲取核心代碼如下:

    其中核心步驟主要有以下四步:

    1) 步驟①利用了Windows平臺(tái)提供的操作注冊(cè)表函數(shù)實(shí)現(xiàn)打開(kāi)注冊(cè)表,將注冊(cè)表句柄賦值給hKey變量,并從參數(shù)中返回;

    2) 在步驟②中,循環(huán)的從注冊(cè)表句柄里不斷的獲取串口名稱(chēng),當(dāng)沒(méi)有串口名時(shí)才從循環(huán)中退出。獲取到的串口名被封裝進(jìn)commName變量里;

    3) 步驟③則將本輪循環(huán)得到的commName變量(即串口名)賦值給結(jié)果變量;

    4) 步驟④則與步驟①相對(duì),將打開(kāi)的注冊(cè)表關(guān)閉并釋放句柄,保證操作注冊(cè)表的邏輯正確。

    3.4.3 打開(kāi)串口

    在Windows平臺(tái)下串口設(shè)備被抽象成了文件,可以借助文件操作函數(shù)CreateFile實(shí)現(xiàn)串口打開(kāi)。但需要注意的是,在Windows平臺(tái)上文件的訪問(wèn)有同步訪問(wèn)和重疊訪問(wèn),而串口設(shè)備不允許采用重疊訪問(wèn)的方式打開(kāi),因此在串口設(shè)備打開(kāi)時(shí)需要選擇同步模式。打開(kāi)串口的核心代碼如下:

    由于串口設(shè)備必須是以獨(dú)占的形式訪問(wèn),因此全局變量g_port必須是在為NULL的時(shí)候才能進(jìn)行串口打開(kāi)操作,而一旦打開(kāi)成功時(shí)全局變量g_port非空,這樣防止了重復(fù)打開(kāi)串口引發(fā)錯(cuò)誤,同時(shí)也提高了代碼訪問(wèn)效率,降低了對(duì)系統(tǒng)函數(shù)訪問(wèn)的頻率。

    3.4.4 配置串口

    在打開(kāi)串口成功之后,此時(shí)的串口運(yùn)行參數(shù)是系統(tǒng)默認(rèn)值,需進(jìn)一步對(duì)串口的通信參數(shù)進(jìn)行配置。串口的通信參數(shù)主要包括了串口的波特率、數(shù)據(jù)位、停止位和校驗(yàn)位。在一般情況下,配置串口過(guò)程是通過(guò)從系統(tǒng)中獲取默認(rèn)的串口參數(shù)信息,修改該參數(shù)信息并重新設(shè)置來(lái)實(shí)現(xiàn)的。配置串口的核心代碼如下:

    步驟①實(shí)現(xiàn)了獲取系統(tǒng)默認(rèn)的參數(shù)信息,而通過(guò)步驟②對(duì)默認(rèn)的參數(shù)信息進(jìn)行修改,使用實(shí)際參數(shù)值進(jìn)行覆蓋,在步驟③中則用修改后的參數(shù)信息對(duì)系統(tǒng)信息重新設(shè)置,并刷新串口緩沖區(qū)。

    3.4.5 串口讀寫(xiě)

    串口讀寫(xiě)的過(guò)程與一般文件讀寫(xiě)過(guò)程類(lèi)似。在成功獲取了串口句柄和配置串口的基礎(chǔ)上,通過(guò)平臺(tái)提供的文件操作函數(shù)ReadFile和WriteFile實(shí)現(xiàn)對(duì)串口的讀寫(xiě)。在讀取的過(guò)程中,從串口中獲取的字節(jié)信息將會(huì)保存到緩沖區(qū)中,并返回給本地調(diào)用層;而向串口寫(xiě)入數(shù)據(jù)時(shí)則直接將緩沖區(qū)中的字節(jié)數(shù)據(jù)寫(xiě)出。串口讀寫(xiě)核心代碼如下:

    3.4.6 關(guān)閉串口

    在操作結(jié)束時(shí)需要將串口設(shè)備關(guān)閉。關(guān)閉的過(guò)程一方面需要使用平臺(tái)提供的句柄操作函數(shù)CloseHandle函數(shù)來(lái)關(guān)閉串口句柄,另一方面需要回收全局變量g_port,并將其恢復(fù)成初始化狀態(tài),以便下一次訪問(wèn)串口設(shè)備。關(guān)閉串口核心代碼如下:

    4 實(shí)驗(yàn)與結(jié)果

    為了測(cè)試Java代碼能否通過(guò)JNI技術(shù)實(shí)現(xiàn)本地串口通信,本文設(shè)計(jì)了一組功能實(shí)驗(yàn),具體的運(yùn)行環(huán)境如下:

    基于上述測(cè)試環(huán)境,實(shí)驗(yàn)得到的結(jié)果如圖5所示。

    根據(jù)上圖實(shí)驗(yàn)結(jié)果,圖(a)實(shí)驗(yàn)軟件顯示了獲取平臺(tái)的全部串口信息,同時(shí)對(duì)串口COM1實(shí)現(xiàn)了打開(kāi)并配置。在配置成功的基礎(chǔ)上,實(shí)驗(yàn)軟件向串口COM1寫(xiě)入了測(cè)試數(shù)據(jù),并開(kāi)啟了循環(huán)讀取串口數(shù)據(jù)功能,結(jié)果顯示實(shí)驗(yàn)軟件能夠持續(xù)的從串口中讀出數(shù)據(jù)。圖(b)驗(yàn)證軟件打開(kāi)了串口COM2,由于串口COM1與串口COM2實(shí)現(xiàn)了關(guān)聯(lián),因此可以將串口COM1的數(shù)據(jù)從串口COM2中讀出,或向串口COM2寫(xiě)入數(shù)據(jù)由串口COM1讀出。驗(yàn)證軟件運(yùn)行結(jié)果顯示,其能夠正確接收到實(shí)驗(yàn)軟件發(fā)送的測(cè)試數(shù)據(jù),并且其周期性寫(xiě)入的數(shù)據(jù)在實(shí)驗(yàn)軟件中也實(shí)現(xiàn)了正確讀出。

    5 結(jié)束語(yǔ)

    實(shí)驗(yàn)結(jié)果表明,在Windows平臺(tái)下Java代碼能夠通過(guò)JNI技術(shù)實(shí)現(xiàn)對(duì)本地串口設(shè)備的訪問(wèn),運(yùn)行結(jié)果符合預(yù)期,顯示了該串口通信系統(tǒng)的設(shè)計(jì)方案是較為合理的,可以基于該設(shè)計(jì)方案在其他操作系統(tǒng)平臺(tái)下做進(jìn)一步驗(yàn)證。

    然而該系統(tǒng)設(shè)計(jì)并未考慮性能因素,未將其與同類(lèi)型軟件在性能上做出橫向?qū)Ρ?,在后續(xù)的研究工作中還需深入對(duì)該設(shè)計(jì)方案的性能做出評(píng)估。

    參考文獻(xiàn):

    [1] 陳傳波, 杜娟, 張智杰. WIN32下基于RS232C協(xié)議的串口通信方法及應(yīng)用研究[J]. 南昌大學(xué)學(xué)報(bào):工科版, 2005(3):71-75.

    [2] 李亞?wèn)|, 夏雨佳, 席裕庚. 基于JNI的跨平臺(tái)軟件設(shè)計(jì)[J]. 計(jì)算機(jī)工程, 2000(9):87-88,154.

    [3] 任俊偉, 林東岱. JNI技術(shù)實(shí)現(xiàn)跨平臺(tái)開(kāi)發(fā)的研究[J]. 計(jì)算機(jī)應(yīng)用研究, 2005(7):180-184.

    [4] 張華平, 玄光哲, 于貴平, 等. 基于JNI技術(shù)應(yīng)用框架的分析和實(shí)現(xiàn)[J].吉林大學(xué)學(xué)報(bào):信息科版, 2003(2):188-191.

    [5] 沙嘉祥, 寧書(shū)年, 林捷. 利用JNI實(shí)現(xiàn)企業(yè)Java程序與傳統(tǒng)應(yīng)用程序的集成[J]. 計(jì)算機(jī)與現(xiàn)代化, 2004(2):20-25.

    [6] 龔新文. 串口通信在VS2008中的實(shí)現(xiàn)與應(yīng)用[J]. 電腦與電信, 2011(3):47-48,51.

    [7] 黃暉, 柴劍勇, 嚴(yán)興, 等. 串口通信技術(shù)[J]. 科技創(chuàng)新導(dǎo)報(bào), 2010(27):20-21.

    猜你喜歡
    串口通信
    基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
    串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
    基于OpenCV的室內(nèi)照明智能控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
    科技視界(2016年13期)2016-06-13 22:01:19
    基于MSP430單片機(jī)的窄帶無(wú)線數(shù)據(jù)傳輸模塊的設(shè)計(jì)
    便攜式數(shù)傳電臺(tái)測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
    国产伦精品一区二区三区视频9| 欧美成人免费av一区二区三区| 超碰av人人做人人爽久久| 国内少妇人妻偷人精品xxx网站| 全区人妻精品视频| 天天一区二区日本电影三级| 国产在线男女| 国产激情偷乱视频一区二区| 精品久久久噜噜| 精品人妻一区二区三区麻豆 | 欧美极品一区二区三区四区| 欧美中文日本在线观看视频| 亚洲欧美中文字幕日韩二区| 一本久久中文字幕| 欧美zozozo另类| 嫩草影院新地址| 日韩成人av中文字幕在线观看 | 99久久精品一区二区三区| 久久久精品大字幕| 日本三级黄在线观看| 欧美极品一区二区三区四区| 干丝袜人妻中文字幕| 69人妻影院| 黄色视频,在线免费观看| 热99在线观看视频| 老熟妇仑乱视频hdxx| 看黄色毛片网站| 大又大粗又爽又黄少妇毛片口| 十八禁国产超污无遮挡网站| 国产综合懂色| 精品人妻一区二区三区麻豆 | 日本成人三级电影网站| 伦理电影大哥的女人| 人妻制服诱惑在线中文字幕| 国产免费男女视频| 欧美绝顶高潮抽搐喷水| 国产成人一区二区在线| 91在线观看av| 亚洲成av人片在线播放无| 人人妻人人看人人澡| 少妇的逼水好多| 久久久久久久久中文| 91在线观看av| 亚洲欧美成人精品一区二区| 亚洲精华国产精华液的使用体验 | 国产av麻豆久久久久久久| av专区在线播放| 免费人成在线观看视频色| 久久久久久久亚洲中文字幕| 男女那种视频在线观看| 久久久精品大字幕| 欧美最黄视频在线播放免费| 久久久久精品国产欧美久久久| 日本在线视频免费播放| 久久久久久久久久久丰满| 久久久久久久久久久丰满| 国内久久婷婷六月综合欲色啪| 久久精品国产亚洲av天美| 国产精品永久免费网站| 欧美国产日韩亚洲一区| 国产精品伦人一区二区| 极品教师在线视频| 极品教师在线视频| 九九爱精品视频在线观看| av卡一久久| 嫩草影院新地址| 给我免费播放毛片高清在线观看| av卡一久久| 欧美xxxx黑人xx丫x性爽| 久久6这里有精品| 69av精品久久久久久| 色播亚洲综合网| 99国产精品一区二区蜜桃av| 亚洲欧美日韩卡通动漫| 欧美成人a在线观看| 高清毛片免费观看视频网站| 给我免费播放毛片高清在线观看| 国产淫片久久久久久久久| 国产美女午夜福利| 精品一区二区三区视频在线| 久久久国产成人免费| 亚洲四区av| 麻豆成人午夜福利视频| 99热全是精品| 99热6这里只有精品| 精品无人区乱码1区二区| 免费看av在线观看网站| 精品日产1卡2卡| 麻豆av噜噜一区二区三区| 国产91av在线免费观看| 天堂影院成人在线观看| 成人综合一区亚洲| 看黄色毛片网站| 免费看光身美女| 一级黄色大片毛片| 国产熟女欧美一区二区| 1000部很黄的大片| 亚洲精品日韩在线中文字幕 | 日韩人妻高清精品专区| 又粗又爽又猛毛片免费看| 免费看a级黄色片| 欧美bdsm另类| 日韩三级伦理在线观看| 九九热线精品视视频播放| 国产一区二区三区在线臀色熟女| 听说在线观看完整版免费高清| 欧美性猛交╳xxx乱大交人| 在线观看美女被高潮喷水网站| 久久6这里有精品| 春色校园在线视频观看| 亚洲成人久久爱视频| 国产亚洲欧美98| 精品午夜福利视频在线观看一区| 亚洲图色成人| 联通29元200g的流量卡| 国产精品不卡视频一区二区| 亚洲,欧美,日韩| 三级男女做爰猛烈吃奶摸视频| 寂寞人妻少妇视频99o| 大型黄色视频在线免费观看| 嫩草影视91久久| 搡老岳熟女国产| 亚洲中文字幕一区二区三区有码在线看| 插逼视频在线观看| 日韩一本色道免费dvd| 美女大奶头视频| 亚洲av.av天堂| 亚洲熟妇熟女久久| 在线观看美女被高潮喷水网站| 亚洲五月天丁香| 精品欧美国产一区二区三| 夜夜夜夜夜久久久久| 亚洲精品乱码久久久v下载方式| 日韩大尺度精品在线看网址| 亚洲成av人片在线播放无| 伦理电影大哥的女人| 免费观看在线日韩| 午夜福利18| 亚洲av免费在线观看| 成人特级av手机在线观看| av在线播放精品| 免费观看的影片在线观看| 在线看三级毛片| 尤物成人国产欧美一区二区三区| 欧美潮喷喷水| 人妻制服诱惑在线中文字幕| 成年女人看的毛片在线观看| 国产av在哪里看| 高清日韩中文字幕在线| 亚洲精品国产成人久久av| 69av精品久久久久久| 亚洲欧美中文字幕日韩二区| 人妻久久中文字幕网| 国产探花在线观看一区二区| 少妇熟女aⅴ在线视频| 欧美三级亚洲精品| 欧美又色又爽又黄视频| 久久久成人免费电影| 成人漫画全彩无遮挡| 老司机影院成人| 国产视频内射| 99热这里只有是精品50| 国产探花极品一区二区| 美女免费视频网站| 超碰av人人做人人爽久久| 国产69精品久久久久777片| 日日摸夜夜添夜夜添小说| 亚洲人成网站在线播放欧美日韩| 午夜福利高清视频| 色综合亚洲欧美另类图片| 国产精华一区二区三区| 午夜激情福利司机影院| 国产大屁股一区二区在线视频| 亚洲在线观看片| 三级经典国产精品| 亚洲成人久久性| 日本色播在线视频| 国产精品三级大全| 一区二区三区免费毛片| 天美传媒精品一区二区| 日本一二三区视频观看| 亚洲欧美清纯卡通| 性色avwww在线观看| 久久精品国产亚洲网站| 一本精品99久久精品77| 日韩在线高清观看一区二区三区| 寂寞人妻少妇视频99o| 九九久久精品国产亚洲av麻豆| 亚洲精品国产成人久久av| 国产成人影院久久av| 人妻久久中文字幕网| 久久久久久久久久成人| 成人毛片a级毛片在线播放| 久久人人精品亚洲av| 综合色av麻豆| 亚洲欧美中文字幕日韩二区| 国产高清三级在线| 老熟妇乱子伦视频在线观看| 欧美日本亚洲视频在线播放| 一级毛片电影观看 | 国产欧美日韩精品一区二区| 永久网站在线| 免费不卡的大黄色大毛片视频在线观看 | 亚洲av第一区精品v没综合| 欧美在线一区亚洲| 欧美色视频一区免费| 一级av片app| 成人欧美大片| 国产午夜福利久久久久久| 搡老岳熟女国产| 免费av毛片视频| 欧美又色又爽又黄视频| ponron亚洲| 日韩一本色道免费dvd| 一进一出抽搐gif免费好疼| 日日啪夜夜撸| 99久久中文字幕三级久久日本| 少妇猛男粗大的猛烈进出视频 | 日韩三级伦理在线观看| 最后的刺客免费高清国语| 欧美高清性xxxxhd video| 国产精品99久久久久久久久| 日本五十路高清| 久久久精品欧美日韩精品| 人妻少妇偷人精品九色| 啦啦啦韩国在线观看视频| 欧美绝顶高潮抽搐喷水| 欧美最新免费一区二区三区| 日本一本二区三区精品| 丝袜美腿在线中文| 日韩欧美精品免费久久| a级毛色黄片| 国产探花在线观看一区二区| 亚洲精品一卡2卡三卡4卡5卡| 欧美bdsm另类| 有码 亚洲区| 精品一区二区三区视频在线| 麻豆成人午夜福利视频| 又爽又黄a免费视频| 波野结衣二区三区在线| 国产精品av视频在线免费观看| 麻豆国产97在线/欧美| 岛国在线免费视频观看| 免费看日本二区| 成人漫画全彩无遮挡| 在线观看午夜福利视频| 国产探花在线观看一区二区| 无遮挡黄片免费观看| 色综合站精品国产| 亚洲精品456在线播放app| 岛国在线免费视频观看| 久久精品国产鲁丝片午夜精品| 国产视频一区二区在线看| 高清日韩中文字幕在线| 淫秽高清视频在线观看| 99riav亚洲国产免费| 亚洲在线自拍视频| 麻豆久久精品国产亚洲av| 18禁在线播放成人免费| 国产69精品久久久久777片| 国语自产精品视频在线第100页| 亚洲综合色惰| 久久午夜福利片| 国产 一区 欧美 日韩| 国产乱人视频| 精品久久国产蜜桃| 18禁在线无遮挡免费观看视频 | 日本撒尿小便嘘嘘汇集6| 一级毛片电影观看 | 亚洲综合色惰| 男女边吃奶边做爰视频| 99在线人妻在线中文字幕| 校园人妻丝袜中文字幕| 97热精品久久久久久| 成人午夜高清在线视频| 国产精品一区二区三区四区久久| 久久久精品欧美日韩精品| 中出人妻视频一区二区| 白带黄色成豆腐渣| 亚洲成人精品中文字幕电影| 一夜夜www| 国内久久婷婷六月综合欲色啪| 免费看光身美女| 国产不卡一卡二| 免费搜索国产男女视频| 久久久a久久爽久久v久久| 日本黄大片高清| 国产黄a三级三级三级人| 少妇人妻精品综合一区二区 | 又爽又黄无遮挡网站| 熟妇人妻久久中文字幕3abv| 五月伊人婷婷丁香| 一级毛片我不卡| 亚洲三级黄色毛片| av天堂在线播放| 国产黄色小视频在线观看| 夜夜夜夜夜久久久久| 亚洲av电影不卡..在线观看| 美女高潮的动态| .国产精品久久| 男女边吃奶边做爰视频| 精品久久久久久久久久免费视频| 久久99热这里只有精品18| 啦啦啦啦在线视频资源| 亚洲电影在线观看av| 99久久中文字幕三级久久日本| 亚洲婷婷狠狠爱综合网| 一区福利在线观看| 午夜影院日韩av| 一夜夜www| 久久精品国产亚洲av天美| ponron亚洲| 亚洲av中文av极速乱| 精品午夜福利在线看| 欧美丝袜亚洲另类| 亚洲无线观看免费| 国产精品综合久久久久久久免费| av在线播放精品| 精品人妻熟女av久视频| 十八禁国产超污无遮挡网站| 免费看光身美女| 亚洲国产高清在线一区二区三| 99热网站在线观看| 亚洲va在线va天堂va国产| 如何舔出高潮| 亚洲国产高清在线一区二区三| 成年女人永久免费观看视频| 麻豆精品久久久久久蜜桃| 伦理电影大哥的女人| 美女黄网站色视频| 性色avwww在线观看| 少妇的逼水好多| 3wmmmm亚洲av在线观看| 禁无遮挡网站| 日韩成人伦理影院| 久久精品夜夜夜夜夜久久蜜豆| 亚洲欧美日韩高清专用| 97超碰精品成人国产| 少妇丰满av| 99久久精品国产国产毛片| 国产在视频线在精品| 天天一区二区日本电影三级| 久久午夜亚洲精品久久| 俺也久久电影网| 老司机福利观看| 国产黄片美女视频| 1000部很黄的大片| 99久久中文字幕三级久久日本| 高清日韩中文字幕在线| 最近中文字幕高清免费大全6| 成熟少妇高潮喷水视频| 日本熟妇午夜| 久久精品夜夜夜夜夜久久蜜豆| 欧美xxxx黑人xx丫x性爽| 老司机午夜福利在线观看视频| 搡老熟女国产l中国老女人| 亚洲中文字幕一区二区三区有码在线看| 国产精品一及| 欧美成人一区二区免费高清观看| 精品一区二区三区视频在线| 真人做人爱边吃奶动态| 亚洲欧美日韩无卡精品| 精品免费久久久久久久清纯| 国产精品永久免费网站| 91久久精品电影网| 综合色丁香网| 中文在线观看免费www的网站| 91午夜精品亚洲一区二区三区| 亚洲av一区综合| 在线播放国产精品三级| 夜夜看夜夜爽夜夜摸| 日韩强制内射视频| 成人亚洲精品av一区二区| 精品熟女少妇av免费看| 99九九线精品视频在线观看视频| av黄色大香蕉| 精品久久久久久久久亚洲| 99热6这里只有精品| 日本成人三级电影网站| 长腿黑丝高跟| 91精品国产九色| 老师上课跳d突然被开到最大视频| 非洲黑人性xxxx精品又粗又长| 真实男女啪啪啪动态图| 欧美高清成人免费视频www| 日本黄大片高清| 国产 一区精品| 亚洲精品亚洲一区二区| 自拍偷自拍亚洲精品老妇| 免费看美女性在线毛片视频| 极品教师在线视频| 免费在线观看影片大全网站| 日本a在线网址| 国产色婷婷99| 久久国产乱子免费精品| 丝袜脚勾引网站| 中文字幕制服av| 男女边摸边吃奶| 99久久综合免费| 久久精品国产a三级三级三级| a级一级毛片免费在线观看| 成年人午夜在线观看视频| 亚洲精品成人av观看孕妇| 午夜影院在线不卡| 亚洲激情五月婷婷啪啪| 女的被弄到高潮叫床怎么办| 肉色欧美久久久久久久蜜桃| 中文字幕av电影在线播放| 日韩视频在线欧美| 亚洲av.av天堂| 婷婷色av中文字幕| 99视频精品全部免费 在线| 校园人妻丝袜中文字幕| 乱人伦中国视频| 午夜福利网站1000一区二区三区| 天堂8中文在线网| h视频一区二区三区| 少妇人妻 视频| 国产精品一区www在线观看| 国产成人精品一,二区| 夜夜看夜夜爽夜夜摸| 99九九线精品视频在线观看视频| 国产亚洲一区二区精品| 日韩欧美一区视频在线观看 | 国产精品一区二区在线观看99| 女人精品久久久久毛片| 最近手机中文字幕大全| 亚洲精品乱码久久久v下载方式| av有码第一页| 久久久精品94久久精品| 在线亚洲精品国产二区图片欧美 | 亚洲精品日韩在线中文字幕| 男男h啪啪无遮挡| av福利片在线观看| av不卡在线播放| 永久网站在线| 成人18禁高潮啪啪吃奶动态图 | 久久久精品免费免费高清| www.av在线官网国产| 精华霜和精华液先用哪个| 日韩亚洲欧美综合| 国产精品一区二区三区四区免费观看| 日韩强制内射视频| 精品视频人人做人人爽| 国产欧美日韩综合在线一区二区 | 夜夜爽夜夜爽视频| 一级爰片在线观看| 亚洲精品,欧美精品| 日韩 亚洲 欧美在线| 黑丝袜美女国产一区| 美女xxoo啪啪120秒动态图| 国产免费又黄又爽又色| 精品久久久久久久久亚洲| 中文字幕精品免费在线观看视频 | 亚洲怡红院男人天堂| 亚洲欧美一区二区三区国产| 成人午夜精彩视频在线观看| 亚洲精品,欧美精品| 亚洲高清免费不卡视频| tube8黄色片| 亚洲av电影在线观看一区二区三区| 一级黄片播放器| 性高湖久久久久久久久免费观看| 黑人猛操日本美女一级片| 日本午夜av视频| 在线观看美女被高潮喷水网站| 亚洲第一av免费看| 午夜av观看不卡| 丰满少妇做爰视频| 国产精品一区二区三区四区免费观看| 18禁在线播放成人免费| 国产成人免费无遮挡视频| 女人精品久久久久毛片| 成年人午夜在线观看视频| 欧美日韩av久久| 国产白丝娇喘喷水9色精品| av在线播放精品| 午夜免费观看性视频| 亚洲欧美成人综合另类久久久| 一级av片app| 国产精品国产三级专区第一集| 亚洲国产精品成人久久小说| 国产黄片美女视频| 91精品伊人久久大香线蕉| 精品酒店卫生间| av在线播放精品| 成年人免费黄色播放视频 | 一级毛片久久久久久久久女| 在线播放无遮挡| 国产精品欧美亚洲77777| 亚洲三级黄色毛片| 精品午夜福利在线看| 欧美97在线视频| xxx大片免费视频| 精品亚洲成a人片在线观看| 欧美日韩精品成人综合77777| 在线观看www视频免费| 中文欧美无线码| 啦啦啦啦在线视频资源| 午夜日本视频在线| 久久精品夜色国产| 男女边摸边吃奶| 久久久久国产精品人妻一区二区| 日本黄大片高清| 中文字幕精品免费在线观看视频 | 久久精品国产亚洲网站| 边亲边吃奶的免费视频| 五月天丁香电影| .国产精品久久| 亚洲婷婷狠狠爱综合网| 最近中文字幕2019免费版| 日韩免费高清中文字幕av| www.av在线官网国产| 在线观看美女被高潮喷水网站| 另类亚洲欧美激情| 国产亚洲欧美精品永久| 欧美精品高潮呻吟av久久| 精品久久久久久电影网| 男人狂女人下面高潮的视频| 国产精品偷伦视频观看了| 精品久久久精品久久久| 久久精品熟女亚洲av麻豆精品| 精品一区二区免费观看| 久热久热在线精品观看| 久久99一区二区三区| 亚洲,一卡二卡三卡| 色5月婷婷丁香| 在线观看国产h片| 中文资源天堂在线| 亚洲精品国产色婷婷电影| 久热这里只有精品99| 各种免费的搞黄视频| 日日啪夜夜爽| 久久久久久久久大av| 国产在线一区二区三区精| av免费在线看不卡| 乱人伦中国视频| 日韩不卡一区二区三区视频在线| 中文字幕制服av| 日韩一本色道免费dvd| 大话2 男鬼变身卡| av国产久精品久网站免费入址| 黄色配什么色好看| 久久 成人 亚洲| 性高湖久久久久久久久免费观看| 一级二级三级毛片免费看| 日韩电影二区| 久久ye,这里只有精品| 在线精品无人区一区二区三| 中文字幕av电影在线播放| 夫妻性生交免费视频一级片| 亚洲综合精品二区| av有码第一页| 一区二区三区乱码不卡18| 在线天堂最新版资源| 亚洲精品日本国产第一区| 久久免费观看电影| 久久精品夜色国产| 2022亚洲国产成人精品| 黄色视频在线播放观看不卡| 国产成人精品无人区| 大香蕉97超碰在线| 色网站视频免费| 99久久精品国产国产毛片| 免费观看在线日韩| 日韩欧美精品免费久久| 国产黄片美女视频| 精品国产国语对白av| 久久久久久久久久久免费av| 午夜福利视频精品| 99精国产麻豆久久婷婷| 最近手机中文字幕大全| 亚洲av日韩在线播放| 97精品久久久久久久久久精品| 日韩人妻高清精品专区| 99热6这里只有精品| 亚洲一区二区三区欧美精品| 一级av片app| 又大又黄又爽视频免费| 国产日韩欧美亚洲二区| 亚洲国产欧美在线一区| 一级毛片aaaaaa免费看小| 精品久久国产蜜桃| 国产精品不卡视频一区二区| 亚洲欧美日韩卡通动漫| 精品国产一区二区三区久久久樱花| av不卡在线播放| 国内少妇人妻偷人精品xxx网站| 国产精品国产三级国产专区5o| 亚洲真实伦在线观看| 美女视频免费永久观看网站| 22中文网久久字幕| freevideosex欧美| 最近的中文字幕免费完整| 国产真实伦视频高清在线观看| 国产69精品久久久久777片| 亚洲精品日韩av片在线观看| 精品99又大又爽又粗少妇毛片| 自拍偷自拍亚洲精品老妇| 中文字幕亚洲精品专区| av免费在线看不卡| 人人妻人人看人人澡| av在线播放精品| 欧美xxⅹ黑人| 韩国av在线不卡| 搡女人真爽免费视频火全软件| 免费黄频网站在线观看国产| 亚洲精品国产色婷婷电影| 大香蕉久久网| 精品一区二区三区视频在线| 中文欧美无线码| 久久久久久人妻| 亚洲精品色激情综合| 国产av一区二区精品久久| 人人妻人人添人人爽欧美一区卜|