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

    基于GDB的Arduino遠(yuǎn)程調(diào)試器的研究與實(shí)現(xiàn)

    2020-07-11 14:41:54平震宇李培峰
    實(shí)驗(yàn)室研究與探索 2020年5期
    關(guān)鍵詞:宿主機(jī)斷點(diǎn)插件

    平震宇,李培峰,孟 帆

    (1.江蘇信息職業(yè)技術(shù)學(xué)院物聯(lián)網(wǎng)工程學(xué)院,江蘇無(wú)錫214101;2.蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇蘇州215006)

    Arduino是開(kāi)放源碼的軟硬件平臺(tái),其硬件原理圖、核心庫(kù)文件都是開(kāi)源的,它是基于單片機(jī)系統(tǒng)開(kāi)發(fā)的,具有集成開(kāi)發(fā)環(huán)境(Integrated Development Environment,IDE)。Arduino是硬件開(kāi)發(fā)的趨勢(shì),其簡(jiǎn)單的開(kāi)發(fā)方式使開(kāi)發(fā)者可以更快速地完成自己的創(chuàng)意。Arduino逐漸發(fā)展成為一個(gè)廉價(jià)的易于使用的實(shí)驗(yàn)平臺(tái),被廣泛應(yīng)用于各領(lǐng)域。由于Arduino 入門(mén)要求低,不乏文科背景的愛(ài)好者、藝術(shù)家和設(shè)計(jì)師。Arduino也可以用于設(shè)計(jì)語(yǔ)音控制小車設(shè)計(jì)[1],書(shū)畫(huà)機(jī)械手臂[2],邁克爾遜干涉儀測(cè)量的改進(jìn)[3],制作體感機(jī)械手[4],汽車并線輔助系統(tǒng)[5],移動(dòng)機(jī)器人控制系統(tǒng)[6]這樣復(fù)雜的應(yīng)用系統(tǒng)。近年來(lái)Arduino 被應(yīng)用到物聯(lián)網(wǎng)工程專業(yè)實(shí)踐教學(xué)中,利用Arduino 平臺(tái)的優(yōu)勢(shì),創(chuàng)新物聯(lián)網(wǎng)工程專業(yè)實(shí)踐教學(xué),并在物聯(lián)網(wǎng)專業(yè)教學(xué)的軟硬件整合方面進(jìn)行深入的探索和改進(jìn)[7]。通過(guò)簡(jiǎn)便、靈活的開(kāi)發(fā)平臺(tái),進(jìn)行物聯(lián)網(wǎng)感知、識(shí)別和控制中外圍功能模塊的講解,讓學(xué)生在有限的基礎(chǔ)知識(shí)上提高學(xué)習(xí)效率、快速進(jìn)行實(shí)驗(yàn)開(kāi)發(fā)。

    1 背景與相關(guān)工作

    Arduino支持使用各種電子元件、傳感器、通信組件、控制輸入輸出設(shè)備,Arduino開(kāi)發(fā)板種類很多,常用的有Arduino UNO、Due、Yun、Mega、Zero、Robot、Leonardo、Nano等,Arduino UNO是USB接口系列的常用版本。Arduino簡(jiǎn)化了硬件接口操作,它為軟件開(kāi)發(fā)者設(shè)計(jì)的硬件開(kāi)發(fā)平臺(tái)。但是調(diào)試Arduino 程序只能通過(guò)串口回傳一些信息或者通過(guò)開(kāi)發(fā)板上的LED 燈顯示程序運(yùn)行情況。這兩種方法只適用于幾十行代碼的小程序,對(duì)于復(fù)雜的程序或初學(xué)用戶就不能滿足要求了。物聯(lián)網(wǎng)專業(yè)課程通過(guò)若干Arduino 項(xiàng)目提高學(xué)生的動(dòng)手、編程和創(chuàng)新能力,課程的實(shí)踐教學(xué)也需要Arduino具有調(diào)試功能。

    Arduino項(xiàng)目開(kāi)發(fā)過(guò)程中需要確定程序錯(cuò)誤的位置以及錯(cuò)誤發(fā)生的內(nèi)在原因,Arduino IDE 卻沒(méi)有提供調(diào)試功能。Arduino UNO開(kāi)發(fā)板使用的ATmega328 芯片擁有一個(gè)片上的調(diào)試模塊(on-chip debug),可以實(shí)現(xiàn)對(duì)微控制單元(Micro Controller Unit,MCU)的運(yùn)行過(guò)程進(jìn)行單步調(diào)試、設(shè)置硬件斷點(diǎn)等調(diào)試操作,可查看或修改數(shù)據(jù)存儲(chǔ)區(qū),為調(diào)試者提供了訪問(wèn)MCU運(yùn)行時(shí)狀態(tài)以及控制MCU 運(yùn)行過(guò)程的方法和途徑。Visual Micro開(kāi)發(fā)了集成于Microsoft Visual Studio 和Atmel Studio IDE 的插件(http://www. visualmicro. com)[8],但是Visual Micro的調(diào)試功能是收費(fèi)的。

    因此本文設(shè)計(jì)與實(shí)現(xiàn)Eclipse 集成開(kāi)發(fā)環(huán)境下基于GDB 的Arduino 遠(yuǎn)程調(diào)試器。Arduino 使用的是Atmel AVR系列微控制單元,編譯器是使用了GNU開(kāi)發(fā)工具系統(tǒng)的avr-gcc,調(diào)試工具是avr-gdb。GDB是一個(gè)功能強(qiáng)大的調(diào)試器,支持多種硬件平臺(tái)與多種程序語(yǔ)言,可以用于本地調(diào)試,也可以用于遠(yuǎn)程調(diào)試[8]。由于Arduino開(kāi)發(fā)板資源受限等原因,不可能直接在Arduino開(kāi)發(fā)板上運(yùn)行調(diào)試器,通常的做法是采用宿主機(jī)(host)加目標(biāo)機(jī)(target)的遠(yuǎn)程調(diào)試方式。在宿主機(jī)上運(yùn)行GDB調(diào)試器,目標(biāo)機(jī)上運(yùn)行被調(diào)試程序及調(diào)試插樁(GDB stub),目標(biāo)機(jī)上的GDB stub和宿主機(jī)上的GDB通過(guò)串口,遵循GDB的遠(yuǎn)程串行協(xié)議(Remote Serial Protocol,RSP),由宿主機(jī)上的GDB 獲取對(duì)應(yīng)用程序的控制權(quán),對(duì)應(yīng)用程序進(jìn)行源碼級(jí)調(diào)試。GDB stub是一段代碼,需要把GDB stub和被調(diào)試程序編譯鏈接成一個(gè)可執(zhí)行文件在目標(biāo)機(jī)上運(yùn)行。

    Arduino遠(yuǎn)程調(diào)試器系統(tǒng)模型如圖1 所示,這個(gè)模型無(wú)須額外的硬件支持。GDB 是一個(gè)強(qiáng)大且免費(fèi)的命令行調(diào)試工具,GDB遠(yuǎn)程調(diào)試功能已成功運(yùn)用于多種嵌入式平臺(tái)[9-10],但并沒(méi)有在Arduino 開(kāi)發(fā)板上實(shí)現(xiàn)。Roman Pen實(shí)現(xiàn)了Atmel AVR系列微控制單元的調(diào)試服務(wù)[11](Embedded GDB server for AVR MCU)對(duì)本項(xiàng)目有參考價(jià)值。

    圖1 Arduino遠(yuǎn)程調(diào)試器系統(tǒng)模型

    2 實(shí)現(xiàn)Arduino UNO調(diào)試器GDB stub

    GDB 遠(yuǎn)程調(diào)試有兩種方法GDB stub 與GDB Server。GDB Server 是個(gè)調(diào)試代理程序,宿主機(jī)上的GDB程序可以通過(guò)運(yùn)行于目標(biāo)機(jī)的GDBserver對(duì)嵌入式系統(tǒng)軟件與應(yīng)用程序進(jìn)行調(diào)試。GDB Server是運(yùn)行于目標(biāo)機(jī)上的一個(gè)進(jìn)程,需要通過(guò)Linux 系統(tǒng)提供的ptrace()系統(tǒng)調(diào)用實(shí)現(xiàn)對(duì)被調(diào)試進(jìn)程的訪問(wèn)與控制[12]。GDB Server是非侵入式的調(diào)試代理,適用于有操作系統(tǒng)支持的嵌入式系統(tǒng)[13]。GDB stub 則是侵入式的調(diào)試代理,需要通過(guò)鏈接器把GDB stub和被調(diào)試程序鏈接成一個(gè)可執(zhí)行文件,對(duì)于沒(méi)有操作系統(tǒng)支持的Arduino UNO 平臺(tái),必須使用GDB stub 方式實(shí)現(xiàn)GDB遠(yuǎn)程調(diào)試。

    GDB stub可以通過(guò)TCP/IP 協(xié)議、并行接口或者串口與宿主機(jī)GDB 進(jìn)行通信[14-15]。Arduino UNO 開(kāi)發(fā)板上的USB 采用ATMega8U2 芯片模擬串口,用于Arduino供電、下載程序。本文通過(guò)這個(gè)虛擬串口與宿主機(jī)建立物理連接,由RSP協(xié)議分析模塊來(lái)處理宿主機(jī)發(fā)生過(guò)來(lái)的調(diào)試命令。

    2.1 RSP協(xié)議分析模塊

    GDB定義了RSP協(xié)議用于與目標(biāo)機(jī)GDB stub 之間的通信,GDB 是請(qǐng)求方,GDB stub 是調(diào)試應(yīng)答方。例如GDB接收到用戶繼續(xù)執(zhí)行命令(continue),GDB就遵循RSP協(xié)議規(guī)定向GDB stub發(fā)送(c#63),GDB stub接收到這條命令后繼續(xù)調(diào)試程序運(yùn)行并向GDB返回(+)。RSP協(xié)議使用ASCII 字符來(lái)描述消息,消息由“”符號(hào)開(kāi)始,以“?!狈?hào)結(jié)束,另外帶8 bit 校驗(yàn)。如果接收消息校驗(yàn)正確,并準(zhǔn)備接收下一個(gè)消息則返回“+”符號(hào),如果校驗(yàn)錯(cuò)誤需要重新傳輸則返回-符號(hào)[16-17]。

    RSP協(xié)議定義的命令非常多,只有需要實(shí)現(xiàn)其中部分命令即可。

    ?獲取最后的信號(hào)

    H 設(shè)置線程,T 查看線程是否存活。直接回復(fù)OK字符串。

    g 讀寄存器命令,返回所有目標(biāo)寄存器數(shù)值,G 寫(xiě)寄存器命令,返回OK確認(rèn)數(shù)據(jù)已經(jīng)寫(xiě)入寄存器。

    m 讀取內(nèi)存命令,返回要求讀取的制定內(nèi)存地址的數(shù)值,M 寫(xiě)內(nèi)存命令,返回OK 確認(rèn)數(shù)據(jù)已經(jīng)寫(xiě)入內(nèi)存。

    c 繼續(xù)執(zhí)行命令,s 單步執(zhí)行命令。調(diào)用gdb_update_breakpoints()函數(shù)處理斷點(diǎn)。

    Z 插入斷點(diǎn),z 刪除斷點(diǎn)。調(diào)用gdb_insert_remove_breakpoint(gdb_ctx-> buff)插入,刪除斷點(diǎn)。

    2.2 斷點(diǎn)機(jī)制處理模塊

    斷點(diǎn)機(jī)制是GDB stub需要實(shí)現(xiàn)的核心功能,當(dāng)進(jìn)程執(zhí)行到用戶設(shè)置斷點(diǎn)的時(shí)候需要讓程序暫停,另外當(dāng)用戶需要單步調(diào)試程序時(shí),GDB 也是通過(guò)設(shè)置斷點(diǎn)來(lái)獲取控制權(quán)。

    GDB通過(guò)內(nèi)存的讀寫(xiě)來(lái)實(shí)現(xiàn)設(shè)置斷點(diǎn),它使用一個(gè)trap指令來(lái)替換原有指令,當(dāng)被調(diào)試的程序運(yùn)行到斷點(diǎn)的時(shí)候產(chǎn)生單步調(diào)試中斷信號(hào)(SIGTRAP)。該信號(hào)被GDB捕獲并進(jìn)行斷點(diǎn)命中判定,當(dāng)GDB 判斷出這次SIGTRAP是斷點(diǎn)命中之后就會(huì)轉(zhuǎn)入等待用戶輸入進(jìn)行下一步處理,否則繼續(xù)。ATmega328p 擁有32KB的Flash程序存儲(chǔ)器空間,用于存放程序指令代碼[18]。使用trap指令來(lái)替換原有指令就需要頻繁地擦寫(xiě)Flash 程序存儲(chǔ)器,ATmega328p 用戶手冊(cè)表示Flash程序存儲(chǔ)器至少可以擦寫(xiě)10,000 次。Flash 程序存儲(chǔ)器空間分為兩個(gè)區(qū):引導(dǎo)程序區(qū)(BootLoader)和應(yīng)用程序區(qū),兩個(gè)區(qū)有專門(mén)的鎖定位以實(shí)現(xiàn)讀和讀/寫(xiě)保護(hù)[18]。用于寫(xiě)應(yīng)用程序區(qū)的SPM指令必須位于引導(dǎo)程序區(qū)。GDB stub必須實(shí)現(xiàn)擦寫(xiě)Flash 程序存儲(chǔ)器的功能dboot_safe_pgm_write(),并且將代碼存放在引導(dǎo)程序區(qū),也就是需要重新下載BootLoader程序。

    另外一種實(shí)現(xiàn)斷點(diǎn)的方法是把所有的斷點(diǎn)位置都存放在一個(gè)鏈表中(gdb_ctx-> breaks[ind_bks]),命中判定即把被調(diào)試程序當(dāng)前的位置(gdb_ctx->pc)和鏈表中的斷點(diǎn)位置進(jìn)行比較。如果當(dāng)前位置在斷點(diǎn)鏈表中則發(fā)送GDB_SIGTRAP信號(hào),并調(diào)用函數(shù)handle_exception(),控制權(quán)就交給GDB。為了讓GDB stub比較當(dāng)前運(yùn)行指令,就需要在執(zhí)行用戶程序每個(gè)指令后產(chǎn)生一個(gè)中斷信號(hào),在中斷處理程序中讓GDB stub獲得程序的控制權(quán)。ATmega328p 在退出中斷后總是回到主程序并至少執(zhí)行一條指令后才可以去執(zhí)行其他被掛起的中斷。進(jìn)入中斷服務(wù)程序時(shí)狀態(tài)寄存器不會(huì)被保存,中斷返回時(shí)也不會(huì)自動(dòng)恢復(fù),需要用戶通過(guò)軟件來(lái)完成。

    通過(guò)gdb_enable_swinterrupt()函數(shù)設(shè)置外部中斷INT0 來(lái)產(chǎn)生中斷請(qǐng)求,由中斷處理程序ISR(INT0_vect,ISR_BLOCK ISR_NAKED)來(lái)處理這個(gè)中斷請(qǐng)求。

    GDB單步執(zhí)行有step 與next 兩種方法。next 命令在處理過(guò)程是在該行語(yǔ)句處設(shè)置斷點(diǎn),然后運(yùn)行continue命令,讓程序繼續(xù)執(zhí)行,當(dāng)執(zhí)行到下一個(gè)斷點(diǎn)停下。step命令需要跟蹤到函數(shù)的內(nèi)部,若執(zhí)行語(yǔ)句不包括函數(shù)則與next 命令一樣處理。如果包含函數(shù)調(diào)用,在當(dāng)單步運(yùn)行遇到call指令時(shí),找到被調(diào)用函數(shù)的第一條指令并設(shè)置斷點(diǎn)。由gdb_update_breakpoints()函數(shù)完成應(yīng)用程序Flash的斷點(diǎn)寫(xiě)入與刪除操作。

    GDB stub使用鏈表gdb_ctx->breaks[]來(lái)管理用戶設(shè)置的所有斷點(diǎn)。當(dāng)程序在斷點(diǎn)處停下或者單步執(zhí)行一步后,GDB會(huì)刪除所有的斷點(diǎn),在運(yùn)行continue命令之前需要設(shè)置好下一個(gè)斷點(diǎn),由gdb_insert_breakpoint()與gdb_remove_breakpoint()函數(shù)完成鏈表gdb_ctx->breaks[]的插入和刪除操作。

    GDB stub完整的代碼已共享在arduino 中文社區(qū)的綜合討論區(qū)。GDB stub 分別在windows7、windows10、ubuntu 16.04 系統(tǒng)中測(cè)試成功,Eclipse IDE for C/C++ Developers 版本是4. 7. 3a,AVR Eclipse plugin版本是2.5.0,Arduino IDE版本是1.8.5。GDB stub也可以在其他支持GDB調(diào)試的IDE環(huán)境中使用。由于Arduino IDE沒(méi)有實(shí)現(xiàn)調(diào)試配置與用戶交互界面,所有不能與Arduino IDE配合使用。

    3 使用Eclipse開(kāi)發(fā)Arduino程序

    Arduino IDE功能簡(jiǎn)捷易用,非常適合不熟悉編程環(huán)境的用戶,但是對(duì)于較復(fù)雜的Arduino 項(xiàng)目開(kāi)發(fā),Arduino IDE功能就顯得過(guò)于簡(jiǎn)單。本文使用Eclipse的C/C++開(kāi)發(fā)環(huán)境(C/C++ Development Tooling,CDT),CDT Debug MI提供了Eclipse與GDB的通信機(jī)制。宿主機(jī)調(diào)試器使用Arduino 工具鏈提供的avrgdb,版本信息為GNU gdb7. 8 (AVR_8bit_GNU_Toolchain_3.5.4)。

    Eclipse還有一個(gè)支持Arduino 開(kāi)發(fā)的插件(AVR Eclipse plugin,AVR),Eclipse 通過(guò)CDT 插件與AVR插件構(gòu)建一個(gè)Arduino集成開(kāi)發(fā)環(huán)境。AVR插件集成了對(duì)GNU toolchain的支持,通過(guò)設(shè)置工具鏈路徑就可以直接在Eclipse 中進(jìn)行Arduino 項(xiàng)目代碼的編輯、編譯。

    3.1 下載軟件

    需要下載的相關(guān)軟件見(jiàn)表1。其中Arduino IDE是Arduino的集成開(kāi)發(fā)環(huán)境,將會(huì)使用它的燒寫(xiě)程序AVRDude以及Arduino 的核心庫(kù)文件。Eclipse IDE for C/C++是Eclipse的C/C++集成開(kāi)發(fā)環(huán)境,在官方網(wǎng)站下載。AVR Eclipse plugin 是Eclipse 的AVR 插件,通過(guò)Eclipse 的菜單項(xiàng)Help->Install New Software直接安裝。Atmel AVR Toolchain 是Atmel 的工具鏈,將會(huì)使用其工具鏈中的avr-gdb。Mingw tools 是一套完整的開(kāi)源編譯工具集,將使用它的項(xiàng)目管理工具M(jìn)ake。

    表1 相關(guān)軟件下載地址

    3.2 配置Eclipse的AVR插件

    Eclipse的AVR 插件需要配置AVRDude 下載程序設(shè)置以及配置開(kāi)發(fā)工具鏈。

    (1)AVRDude 下載程序設(shè)置。選擇Project->Properties菜單項(xiàng),彈出工程設(shè)置對(duì)話框如圖2 所示,在左側(cè)窗口點(diǎn)擊“AVR”前面的“+”號(hào),展開(kāi)子項(xiàng),點(diǎn)擊選中“AVRDude”子項(xiàng),右側(cè)窗口將出現(xiàn)對(duì)應(yīng)的設(shè)置。

    圖2 AVRDude下載程序設(shè)置

    AVRDude的用戶配置參數(shù)選擇Arduino IDE安裝目錄下的avrdude. conf 文件(C:\ arduino-1. 8. 5 \hardware\tools\avr\etc\avrdude.conf)。

    在程序配置(Program Configuration)選擇項(xiàng),選擇“Add..”新建一個(gè)下載配置。在這配置界面里硬件類型(Programmer hardware)選擇Arduino,下載默認(rèn)串口(Override default port)中輸入串口號(hào),串口號(hào)與Arduino IDE 中配置保持一致,字符串格式為(/ /. /COM3),其余參數(shù)保持不變。

    (2)配置開(kāi)發(fā)工具鏈。Eclipse 的AVR 插件需要配置開(kāi)發(fā)工具鏈,包括編譯器、項(xiàng)目管理工具、頭文件目錄、下載程序,見(jiàn)表2。其中AVR-GCC 可以選擇Arduino IDE的工具鏈,由于Arduino IDE的AVR-GDB無(wú)法使用,所以就統(tǒng)一使用Atmel的工具鏈。

    表2 開(kāi)發(fā)工具鏈配置

    3.3 配置Arduino的庫(kù)文件

    Arduino 庫(kù)有標(biāo)準(zhǔn)庫(kù)與擴(kuò)展庫(kù),標(biāo)準(zhǔn)庫(kù)是指Arduino IDE 自帶的一些常用功能,它預(yù)裝在Arduino安裝文件夾的Libraries 文件夾中。Arduino 作為一個(gè)開(kāi)源平臺(tái),全世界的開(kāi)發(fā)者都可以共享自己編寫(xiě)的擴(kuò)展庫(kù),其他開(kāi)發(fā)者可以免費(fèi)引用這些庫(kù),也可以對(duì)它們進(jìn)行擴(kuò)充和完善。如果Arduino 項(xiàng)目開(kāi)發(fā)時(shí)使用了Arduino的標(biāo)準(zhǔn)庫(kù),在鏈接階段就需要有Arduino 的標(biāo)準(zhǔn)庫(kù)的靜態(tài)庫(kù)文件,并在項(xiàng)目Properties菜單項(xiàng)中設(shè)置AVR C/C++ Linker-> Libraries。

    另一種方法是將Arduino 的標(biāo)準(zhǔn)庫(kù)通過(guò)創(chuàng)建鏈接資源(linked resources)的方式導(dǎo)入到工程中。首選創(chuàng)建一個(gè)新的Arduino UNO(AVR Cross Target Application)工程,選擇CPU型號(hào)為ATmega328p,頻率為16 MHz。選擇File -> New -> Folder 菜單項(xiàng)打開(kāi)新建文件夾對(duì)話框,單擊"高級(jí)(Advanced)"按鈕,選擇"鏈接文件夾(Link to alternate location)",文件夾路徑選擇Arduino 標(biāo)準(zhǔn)庫(kù)"C:\arduino-1.8.5\hardware\arduino\avr\cores\arduino"。

    最后設(shè)置項(xiàng)目屬性,右鍵單擊項(xiàng)目,打開(kāi)屬性對(duì)話框,選擇"C/C++ Bulid -> Settings",在"AVR C++Complier -> Directories"選項(xiàng)中添加上一步添加的Arduino標(biāo)準(zhǔn)庫(kù)文件夾。現(xiàn)在編譯器會(huì)搜索選項(xiàng)指定的目錄中的頭文件,并且將所需要的函數(shù)庫(kù)一起編譯到項(xiàng)目中。

    4 調(diào)試器GDB stub測(cè)試與性能評(píng)估

    調(diào)試器GDB stub 性能評(píng)估分為功能可靠性和調(diào)試性能兩個(gè)方面。其中功能可靠性是對(duì)RSP 協(xié)議解析的準(zhǔn)確性以及調(diào)試器GDB stub與Eclipse 配合與準(zhǔn)確性驗(yàn)證,調(diào)試性能統(tǒng)計(jì)了GDB stub 代碼的大小,內(nèi)存使用情況,程序運(yùn)行效率等數(shù)據(jù)。

    功能可靠性評(píng)估以Arduino 集成開(kāi)發(fā)環(huán)境中自帶的示例程序?yàn)闇y(cè)試用例。將GDB stub 的源碼文件加入到Blink項(xiàng)目中與其一起編譯,需要在Blink 項(xiàng)目的setup()函數(shù)中調(diào)用初始化函數(shù)debug_init()。將程序編譯下載到開(kāi)發(fā)板后開(kāi)始調(diào)試,Eclipse IDE 負(fù)責(zé)前端界面顯示,avr-gdb 將與運(yùn)行在開(kāi)發(fā)板的GDB stub 通過(guò)串口鏈接完成調(diào)試工作。通過(guò)eclipse 來(lái)進(jìn)行遠(yuǎn)程調(diào)試,需要在調(diào)試配置中設(shè)置遠(yuǎn)程目標(biāo)(Remote Target)的串口號(hào)和波特率。

    Blink程序Eclipse 調(diào)試界面如圖3 所示,可如同調(diào)試本地程序方便的設(shè)置斷點(diǎn),在代碼里需要調(diào)試的地方,鼠標(biāo)雙擊代碼行號(hào)的左邊。Debug 窗口顯示當(dāng)前線程方法調(diào)用棧及方法執(zhí)行到第幾行,圖3 所示Blink程序單步執(zhí)行到digitalWrite函數(shù),digitalWrite函數(shù)位于Arduino 標(biāo)準(zhǔn)庫(kù)中的wiring_digital. c 文件153行。函數(shù)變量顯示當(dāng)前函數(shù)的局部變量,非靜態(tài)變量等??梢越o一個(gè)變量或表達(dá)式添加永久觀察點(diǎn),當(dāng)程序在調(diào)試時(shí)觀察點(diǎn)會(huì)在表達(dá)式視圖(Expression view)中顯示出來(lái),也可以變量視圖(Variables view)查看與修改制定變量值,根據(jù)變量類型在其對(duì)應(yīng)的Value 列里輸入值即可。斷點(diǎn)(Breakpoints)視圖中可用來(lái)新增和刪除斷點(diǎn)等,控制臺(tái)(Console)用于查看打印的日志信息。在代碼視圖顯示當(dāng)前運(yùn)行的代碼,可以單步跟蹤,進(jìn)入當(dāng)前函數(shù)內(nèi)一步一步執(zhí)行或者全速運(yùn)行等。功能可靠性評(píng)估顯示可以提供所有標(biāo)準(zhǔn)的調(diào)試功能,包括設(shè)置斷點(diǎn)、單步執(zhí)行、查看修改變量和寄存器等功能。

    圖3 Blink程序調(diào)試界面

    調(diào)試性能采用DF 創(chuàng)客社區(qū)DFR0100 Arduino 入門(mén)套件的示例代碼作為測(cè)試用例。統(tǒng)計(jì)了測(cè)試用例程序代碼大小,內(nèi)存使用情況以及加入調(diào)試代碼以后的程序代碼大小,內(nèi)存使用情況,如表3 所示。結(jié)果顯示調(diào)試代碼大概占用4. 7KB Flash 程序存儲(chǔ)器空間,ATmega328p具有32KB Flash 程序存儲(chǔ)器空間,調(diào)試代碼占用14%的程序存儲(chǔ)器空間。調(diào)試代碼使用了277Byte內(nèi)存,ATmega328p具有2KB 內(nèi)存。這結(jié)果對(duì)于大多數(shù)Arduino項(xiàng)目是可以接受的。

    表3 代碼大小以及內(nèi)存使用情況

    當(dāng)測(cè)試用例設(shè)置斷點(diǎn)后,程序的運(yùn)行速度會(huì)顯著的下降。如果測(cè)試用例程序中有延時(shí)函數(shù)(delay),延時(shí)函數(shù)是通過(guò)輪詢硬件時(shí)間實(shí)現(xiàn)延時(shí)的,加入調(diào)試代碼后可能導(dǎo)致延時(shí)被延長(zhǎng)大約350 倍,100 ms的延時(shí)在調(diào)試階段可能是延時(shí)了35 s。Arduino 項(xiàng)目的程序不是很復(fù)雜,對(duì)實(shí)時(shí)性要求也不高,在調(diào)試階段這種情況完全可以滿足用戶使用需求。可以通過(guò)在合適的地方設(shè)置斷點(diǎn)或者修改延時(shí)函數(shù)來(lái)減少調(diào)試代碼對(duì)程序的影響。調(diào)試結(jié)束后把調(diào)試代碼從項(xiàng)目中移除,不要再編譯在項(xiàng)目中。

    5 結(jié) 語(yǔ)

    本文介紹了Arduino 的遠(yuǎn)程調(diào)試器的研究與實(shí)現(xiàn),調(diào)試器是基于開(kāi)源調(diào)試器GDB 的,并在Eclipse IDE下搭建了源碼級(jí)調(diào)試環(huán)境,為Arduino開(kāi)發(fā)平臺(tái)構(gòu)建了完整的開(kāi)發(fā)環(huán)境。解決方案是實(shí)現(xiàn)在目標(biāo)機(jī)運(yùn)行的遠(yuǎn)程調(diào)試器GDB stub,通過(guò)串口接收宿主機(jī)調(diào)試器發(fā)來(lái)的調(diào)試命令,根據(jù)調(diào)試命令來(lái)控制程序的運(yùn)行過(guò)程,并返回調(diào)試結(jié)果。GDB stub 需要與被調(diào)試的程序一起編譯后運(yùn)行于目標(biāo)機(jī),宿主機(jī)上運(yùn)行GDB調(diào)試器通過(guò)串口與目標(biāo)機(jī)的GDB stub連接,通過(guò)簡(jiǎn)單的設(shè)置即可對(duì)運(yùn)行在目標(biāo)機(jī)上的程序進(jìn)行調(diào)試。它提供了調(diào)試器所期望的設(shè)置和刪除斷點(diǎn),逐步執(zhí)行代碼和檢查變量等常用功能。大幅提高了Arduino 項(xiàng)目的調(diào)試效率,有效地為Arduino 開(kāi)發(fā)程序,縮短了開(kāi)發(fā)周期。在物聯(lián)網(wǎng)專業(yè)教學(xué)可以作為一個(gè)實(shí)驗(yàn)平臺(tái),使用Arduino教授嵌入式編程、傳感器應(yīng)用等課程。

    猜你喜歡
    宿主機(jī)斷點(diǎn)插件
    自編插件完善App Inventor與樂(lè)高機(jī)器人通信
    電子制作(2019年22期)2020-01-14 03:16:34
    一類無(wú)限可能問(wèn)題的解法
    虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
    嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)的思考
    主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
    MapWindowGIS插件機(jī)制及應(yīng)用
    嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)研究
    基于Revit MEP的插件制作探討
    在不連接網(wǎng)線的情況下Windows與VM之間如何ping通
    TKScope仿真調(diào)試Cortex-M3內(nèi)核的高級(jí)手段
    少妇的逼水好多| 国产视频内射| 国产视频首页在线观看| 午夜福利,免费看| 中文字幕制服av| 午夜激情av网站| 国产国拍精品亚洲av在线观看| 国产欧美日韩综合在线一区二区| 亚洲欧洲国产日韩| 国产精品.久久久| 美女视频免费永久观看网站| 最近2019中文字幕mv第一页| 亚洲av免费高清在线观看| 国产免费一区二区三区四区乱码| 婷婷色综合大香蕉| 黄色欧美视频在线观看| 一本大道久久a久久精品| 亚洲国产欧美在线一区| 在线观看一区二区三区激情| 少妇 在线观看| 久久国内精品自在自线图片| 黄片播放在线免费| 大陆偷拍与自拍| 少妇被粗大的猛进出69影院 | 99久久精品一区二区三区| 日本欧美国产在线视频| 在线观看国产h片| 人人妻人人澡人人看| 日本黄大片高清| 五月开心婷婷网| 亚洲精品乱码久久久v下载方式| 天堂俺去俺来也www色官网| 免费黄色在线免费观看| 国产日韩欧美视频二区| 欧美3d第一页| 丝袜在线中文字幕| 99久久精品国产国产毛片| 久久精品久久精品一区二区三区| 久久99热这里只频精品6学生| 一级毛片 在线播放| 精品国产乱码久久久久久小说| 精品久久久久久久久亚洲| 国产熟女欧美一区二区| 国产在线视频一区二区| 精品人妻熟女毛片av久久网站| 欧美激情极品国产一区二区三区 | 伊人久久国产一区二区| 97精品久久久久久久久久精品| 久久午夜综合久久蜜桃| 欧美bdsm另类| 精品国产露脸久久av麻豆| 色5月婷婷丁香| 中文字幕亚洲精品专区| 我要看黄色一级片免费的| a级毛片免费高清观看在线播放| 五月伊人婷婷丁香| 最近中文字幕2019免费版| 精品视频人人做人人爽| 欧美 日韩 精品 国产| 一本大道久久a久久精品| 免费av中文字幕在线| 国产精品国产三级国产av玫瑰| 一区在线观看完整版| 母亲3免费完整高清在线观看 | 国产精品一区二区在线观看99| 少妇高潮的动态图| 在线观看一区二区三区激情| 亚洲精品国产av成人精品| 久久ye,这里只有精品| 国产国语露脸激情在线看| 欧美xxⅹ黑人| 十八禁网站网址无遮挡| 国产精品国产av在线观看| 熟妇人妻不卡中文字幕| 国产在线一区二区三区精| 一本大道久久a久久精品| 精品亚洲成a人片在线观看| 欧美国产精品一级二级三级| 菩萨蛮人人尽说江南好唐韦庄| 日本vs欧美在线观看视频| √禁漫天堂资源中文www| 嫩草影院入口| 久久久久国产精品人妻一区二区| 韩国av在线不卡| 国产精品久久久久久久久免| 狠狠精品人妻久久久久久综合| 国产在视频线精品| 青青草视频在线视频观看| 久久久久久久精品精品| 一级a做视频免费观看| 十分钟在线观看高清视频www| 久久久久久久久大av| 最新的欧美精品一区二区| 你懂的网址亚洲精品在线观看| 91久久精品电影网| 国产精品国产三级专区第一集| 午夜福利网站1000一区二区三区| 大香蕉久久网| 久久久久久久国产电影| 男人爽女人下面视频在线观看| 久久97久久精品| 一级毛片 在线播放| 午夜福利网站1000一区二区三区| 亚洲精华国产精华液的使用体验| 美女视频免费永久观看网站| 丰满少妇做爰视频| 亚洲精品色激情综合| 最新的欧美精品一区二区| 国产男女超爽视频在线观看| 亚洲精品久久成人aⅴ小说 | 蜜桃国产av成人99| 国产精品久久久久成人av| 午夜免费鲁丝| 国产片内射在线| 一级片'在线观看视频| h视频一区二区三区| 乱码一卡2卡4卡精品| 国产色婷婷99| 日韩成人伦理影院| 十八禁网站网址无遮挡| 国产乱人偷精品视频| 国产精品熟女久久久久浪| 丝袜美足系列| 成人国产av品久久久| 久久久久人妻精品一区果冻| 国产一区亚洲一区在线观看| 亚洲综合色惰| 国产精品一区二区在线不卡| 亚洲国产最新在线播放| 免费日韩欧美在线观看| 性色av一级| 少妇 在线观看| av女优亚洲男人天堂| 亚洲国产色片| 飞空精品影院首页| 国产69精品久久久久777片| 超碰97精品在线观看| 熟妇人妻不卡中文字幕| 精品人妻在线不人妻| 国产亚洲精品第一综合不卡 | 成人二区视频| 久久精品国产鲁丝片午夜精品| 久久毛片免费看一区二区三区| 国产白丝娇喘喷水9色精品| 日本与韩国留学比较| 日本欧美视频一区| 国产亚洲最大av| 夜夜骑夜夜射夜夜干| 新久久久久国产一级毛片| 久久久久国产网址| 久久99蜜桃精品久久| 国产高清国产精品国产三级| 国内精品宾馆在线| 香蕉精品网在线| 亚洲精品一二三| 欧美精品人与动牲交sv欧美| av免费在线看不卡| 久久韩国三级中文字幕| 久久久久精品性色| 久久热精品热| 午夜视频国产福利| 美女中出高潮动态图| 91成人精品电影| 亚洲美女搞黄在线观看| 晚上一个人看的免费电影| 一级黄片播放器| 免费黄色在线免费观看| 九色亚洲精品在线播放| 中文乱码字字幕精品一区二区三区| 免费观看的影片在线观看| av国产久精品久网站免费入址| 卡戴珊不雅视频在线播放| 校园人妻丝袜中文字幕| 视频中文字幕在线观看| 亚洲精品国产av成人精品| 久久99热6这里只有精品| 亚洲人成网站在线播| 丝袜在线中文字幕| 涩涩av久久男人的天堂| 热99久久久久精品小说推荐| 国产成人精品在线电影| 91午夜精品亚洲一区二区三区| 一级毛片黄色毛片免费观看视频| 欧美日韩综合久久久久久| 老司机影院毛片| 国产精品一区二区在线观看99| 精品国产一区二区三区久久久樱花| 99视频精品全部免费 在线| 在线天堂最新版资源| 在线天堂最新版资源| 日本黄大片高清| 免费av不卡在线播放| freevideosex欧美| 观看av在线不卡| 精品一区在线观看国产| 99久国产av精品国产电影| 如何舔出高潮| kizo精华| 天堂中文最新版在线下载| 肉色欧美久久久久久久蜜桃| 22中文网久久字幕| 成人国产av品久久久| 中文字幕最新亚洲高清| 91精品国产国语对白视频| 熟女人妻精品中文字幕| 午夜影院在线不卡| 欧美老熟妇乱子伦牲交| 欧美xxⅹ黑人| 最近最新中文字幕免费大全7| 国产片内射在线| 免费大片18禁| 久久青草综合色| 久久精品久久精品一区二区三区| 亚洲色图综合在线观看| 91精品伊人久久大香线蕉| 久久韩国三级中文字幕| 一区二区三区乱码不卡18| 国产精品嫩草影院av在线观看| 中文乱码字字幕精品一区二区三区| 女性被躁到高潮视频| a 毛片基地| 国产片特级美女逼逼视频| 曰老女人黄片| 午夜91福利影院| av女优亚洲男人天堂| 欧美亚洲日本最大视频资源| 秋霞伦理黄片| 国产精品久久久久久久电影| 国产黄色免费在线视频| 在线观看免费日韩欧美大片 | 免费大片18禁| 黄色毛片三级朝国网站| 王馨瑶露胸无遮挡在线观看| 99久国产av精品国产电影| 一级黄片播放器| 亚洲美女搞黄在线观看| 久久狼人影院| 精品少妇黑人巨大在线播放| 老司机影院毛片| 人成视频在线观看免费观看| 这个男人来自地球电影免费观看 | 美女主播在线视频| 18禁在线播放成人免费| 麻豆精品久久久久久蜜桃| 国产精品久久久久久精品电影小说| 建设人人有责人人尽责人人享有的| 精品少妇内射三级| av在线播放精品| 狂野欧美激情性bbbbbb| 亚洲国产成人一精品久久久| 国产亚洲av片在线观看秒播厂| 久久久久久久久久成人| 亚洲av中文av极速乱| 亚洲av成人精品一二三区| 黑人欧美特级aaaaaa片| 免费观看的影片在线观看| av在线app专区| 国产白丝娇喘喷水9色精品| 国产熟女午夜一区二区三区 | 国产乱来视频区| 国产一级毛片在线| 男男h啪啪无遮挡| 最后的刺客免费高清国语| 国产 精品1| 亚洲国产成人一精品久久久| 午夜影院在线不卡| 亚洲无线观看免费| 男女免费视频国产| 在线观看免费日韩欧美大片 | 久久精品国产亚洲网站| 日韩精品免费视频一区二区三区 | 国产亚洲av片在线观看秒播厂| 一本一本久久a久久精品综合妖精 国产伦在线观看视频一区 | 久久毛片免费看一区二区三区| 不卡视频在线观看欧美| 波野结衣二区三区在线| 永久免费av网站大全| 最黄视频免费看| 久久久国产一区二区| 久久99热这里只频精品6学生| 最后的刺客免费高清国语| 青春草国产在线视频| 亚洲av综合色区一区| 欧美精品亚洲一区二区| 中文字幕人妻熟人妻熟丝袜美| 亚洲久久久国产精品| 亚洲av国产av综合av卡| 国产国拍精品亚洲av在线观看| av卡一久久| 亚洲欧美日韩另类电影网站| av黄色大香蕉| 久久女婷五月综合色啪小说| 国产精品国产三级专区第一集| 菩萨蛮人人尽说江南好唐韦庄| 最近中文字幕高清免费大全6| 国产亚洲一区二区精品| 久久精品熟女亚洲av麻豆精品| 人妻制服诱惑在线中文字幕| 欧美精品一区二区大全| 高清av免费在线| 成年人午夜在线观看视频| 亚洲av成人精品一区久久| 女性生殖器流出的白浆| 哪个播放器可以免费观看大片| √禁漫天堂资源中文www| 狂野欧美激情性xxxx在线观看| 黄色毛片三级朝国网站| 中文乱码字字幕精品一区二区三区| 成人二区视频| 久久国产精品男人的天堂亚洲 | 18禁动态无遮挡网站| 久久av网站| 日本午夜av视频| 99久久综合免费| 国产亚洲精品第一综合不卡 | 少妇被粗大的猛进出69影院 | 91精品国产国语对白视频| 精品人妻偷拍中文字幕| 97超视频在线观看视频| 国产成人a∨麻豆精品| 晚上一个人看的免费电影| 亚洲精品一二三| 久久人妻熟女aⅴ| 五月玫瑰六月丁香| 99久国产av精品国产电影| 精品一区二区三卡| 亚洲色图 男人天堂 中文字幕 | 亚洲av成人精品一区久久| 国产精品久久久久久久电影| 久久精品国产自在天天线| 欧美性感艳星| 国产精品嫩草影院av在线观看| 三级国产精品欧美在线观看| 国产熟女欧美一区二区| 黄片无遮挡物在线观看| 精品久久蜜臀av无| 99久久综合免费| 简卡轻食公司| 少妇精品久久久久久久| 精品酒店卫生间| 亚洲精品亚洲一区二区| 成人国语在线视频| 午夜福利影视在线免费观看| 亚洲丝袜综合中文字幕| 蜜臀久久99精品久久宅男| 国产日韩一区二区三区精品不卡 | 女的被弄到高潮叫床怎么办| 日韩视频在线欧美| 老司机影院毛片| 欧美人与性动交α欧美精品济南到 | 日韩欧美一区视频在线观看| 夜夜看夜夜爽夜夜摸| 久久久久久伊人网av| 大片免费播放器 马上看| 日本黄色片子视频| 亚洲无线观看免费| 欧美xxⅹ黑人| 精品一区在线观看国产| 国产爽快片一区二区三区| 亚洲经典国产精华液单| 成人国产av品久久久| 熟妇人妻不卡中文字幕| 涩涩av久久男人的天堂| 欧美激情国产日韩精品一区| 欧美精品一区二区免费开放| 夫妻午夜视频| 啦啦啦视频在线资源免费观看| 久久人人爽人人片av| 青春草国产在线视频| 日本黄色日本黄色录像| 如日韩欧美国产精品一区二区三区 | 国产精品免费大片| 狂野欧美白嫩少妇大欣赏| 岛国毛片在线播放| 久久久久久伊人网av| 天美传媒精品一区二区| 久久精品国产亚洲网站| 人妻 亚洲 视频| 在线看a的网站| 国产精品欧美亚洲77777| 日韩免费高清中文字幕av| 九九爱精品视频在线观看| 99精国产麻豆久久婷婷| 国产欧美另类精品又又久久亚洲欧美| 女性被躁到高潮视频| 国产av一区二区精品久久| 亚洲熟女精品中文字幕| 黄色毛片三级朝国网站| 18禁动态无遮挡网站| 看免费成人av毛片| 美女主播在线视频| 久久97久久精品| 亚洲精品国产av蜜桃| 国产在线视频一区二区| 日本午夜av视频| 91精品伊人久久大香线蕉| av线在线观看网站| 久久久久久久久久人人人人人人| 色吧在线观看| 99久国产av精品国产电影| 中文字幕久久专区| av播播在线观看一区| 丰满少妇做爰视频| 两个人免费观看高清视频| 日本与韩国留学比较| 嫩草影院入口| 大又大粗又爽又黄少妇毛片口| 高清黄色对白视频在线免费看| 国产精品三级大全| 热re99久久精品国产66热6| 国产在线视频一区二区| 色吧在线观看| 日韩免费高清中文字幕av| 欧美变态另类bdsm刘玥| 久久精品久久久久久噜噜老黄| 大香蕉97超碰在线| av视频免费观看在线观看| 男女啪啪激烈高潮av片| 色视频在线一区二区三区| 中文字幕人妻熟人妻熟丝袜美| 男女啪啪激烈高潮av片| 免费观看无遮挡的男女| 免费少妇av软件| 亚洲天堂av无毛| 在现免费观看毛片| 亚洲精品一二三| 婷婷色麻豆天堂久久| 美女xxoo啪啪120秒动态图| 亚洲av综合色区一区| 看免费成人av毛片| 精品国产一区二区久久| videossex国产| 国产日韩欧美在线精品| 天天操日日干夜夜撸| av一本久久久久| 欧美3d第一页| 亚洲国产日韩一区二区| 99热国产这里只有精品6| 亚洲婷婷狠狠爱综合网| 又黄又爽又刺激的免费视频.| 国产成人精品久久久久久| 一级片'在线观看视频| 亚洲五月色婷婷综合| 日日摸夜夜添夜夜添av毛片| av又黄又爽大尺度在线免费看| 日日撸夜夜添| 亚洲av免费高清在线观看| 国产av一区二区精品久久| av播播在线观看一区| 免费观看无遮挡的男女| 精品亚洲成国产av| 永久免费av网站大全| 青春草亚洲视频在线观看| 国产精品久久久久久久久免| 波野结衣二区三区在线| 中文精品一卡2卡3卡4更新| 国产黄色视频一区二区在线观看| 国产毛片在线视频| 日韩精品有码人妻一区| 老司机影院成人| 久久亚洲国产成人精品v| 99热国产这里只有精品6| 亚洲精品视频女| 啦啦啦中文免费视频观看日本| 亚洲精品乱码久久久v下载方式| 我的老师免费观看完整版| 亚洲av电影在线观看一区二区三区| 欧美 日韩 精品 国产| 全区人妻精品视频| 自拍欧美九色日韩亚洲蝌蚪91| 国产亚洲一区二区精品| 久久国产精品大桥未久av| 黑人欧美特级aaaaaa片| 精品亚洲成a人片在线观看| 亚洲精品自拍成人| 日韩欧美精品免费久久| 久久久久久久久久成人| 精品久久国产蜜桃| 亚洲av在线观看美女高潮| 91国产中文字幕| 亚洲欧美中文字幕日韩二区| 亚洲经典国产精华液单| 视频中文字幕在线观看| 成人综合一区亚洲| 亚洲色图 男人天堂 中文字幕 | 日韩人妻高清精品专区| 毛片一级片免费看久久久久| 在线观看免费视频网站a站| 成人国产麻豆网| 欧美日韩av久久| 在线天堂最新版资源| 一区二区三区四区激情视频| 大又大粗又爽又黄少妇毛片口| 国产一区二区三区av在线| 亚洲四区av| 成人免费观看视频高清| 亚洲国产精品一区三区| av专区在线播放| 色吧在线观看| 中文字幕制服av| 18在线观看网站| 日本欧美国产在线视频| 亚洲久久久国产精品| 中文精品一卡2卡3卡4更新| 亚洲精品456在线播放app| 日本-黄色视频高清免费观看| 黄片播放在线免费| tube8黄色片| 国产 一区精品| 亚洲四区av| 免费大片黄手机在线观看| xxx大片免费视频| 特大巨黑吊av在线直播| 欧美精品人与动牲交sv欧美| 91精品国产国语对白视频| 99久久精品一区二区三区| 搡女人真爽免费视频火全软件| 欧美xxxx性猛交bbbb| 久久女婷五月综合色啪小说| 中文字幕最新亚洲高清| 免费黄频网站在线观看国产| 国产精品无大码| 久久久久网色| videosex国产| 久久久久人妻精品一区果冻| 国产亚洲精品第一综合不卡 | 全区人妻精品视频| 午夜免费鲁丝| 在线观看免费视频网站a站| 一区二区av电影网| 久久99热6这里只有精品| 寂寞人妻少妇视频99o| 亚洲精品av麻豆狂野| 另类亚洲欧美激情| 成人国产av品久久久| 人人妻人人爽人人添夜夜欢视频| 99久久中文字幕三级久久日本| 美女视频免费永久观看网站| 国产精品成人在线| 秋霞在线观看毛片| 亚洲激情五月婷婷啪啪| 亚洲欧美中文字幕日韩二区| 免费观看在线日韩| 精品卡一卡二卡四卡免费| 日本黄色日本黄色录像| 自拍欧美九色日韩亚洲蝌蚪91| 99热这里只有精品一区| 街头女战士在线观看网站| 日本欧美国产在线视频| 黑丝袜美女国产一区| 一区二区三区四区激情视频| 国产不卡av网站在线观看| 啦啦啦在线观看免费高清www| 精品99又大又爽又粗少妇毛片| 国产极品天堂在线| 精品一区二区三区视频在线| 久久女婷五月综合色啪小说| av国产精品久久久久影院| 97超碰精品成人国产| 免费久久久久久久精品成人欧美视频 | a级片在线免费高清观看视频| 精品久久久久久久久av| 欧美一级a爱片免费观看看| 亚州av有码| 午夜福利视频在线观看免费| 国产成人91sexporn| 久久精品国产鲁丝片午夜精品| 亚洲怡红院男人天堂| 欧美成人精品欧美一级黄| 国产欧美日韩综合在线一区二区| 婷婷色av中文字幕| 汤姆久久久久久久影院中文字幕| 国产片特级美女逼逼视频| 久久人妻熟女aⅴ| av不卡在线播放| 欧美三级亚洲精品| 日韩亚洲欧美综合| 成人漫画全彩无遮挡| 80岁老熟妇乱子伦牲交| 日本vs欧美在线观看视频| 国产亚洲av片在线观看秒播厂| 亚洲欧美成人综合另类久久久| 亚洲av综合色区一区| 国产精品成人在线| 天堂俺去俺来也www色官网| av在线观看视频网站免费| 三级国产精品片| 亚洲一区二区三区欧美精品| 美女国产高潮福利片在线看| 国产免费福利视频在线观看| 夜夜骑夜夜射夜夜干| 黑丝袜美女国产一区| 人妻人人澡人人爽人人| 欧美日韩一区二区视频在线观看视频在线| av国产久精品久网站免费入址| 亚洲成色77777| av国产久精品久网站免费入址| 99精国产麻豆久久婷婷| 久久午夜福利片| 久久女婷五月综合色啪小说| 国产免费视频播放在线视频| 黄色配什么色好看| 亚洲,一卡二卡三卡| 人妻制服诱惑在线中文字幕| 亚洲精品久久午夜乱码| 中国美白少妇内射xxxbb| 搡老乐熟女国产| kizo精华| 亚洲国产精品一区三区| 日韩成人伦理影院| 黑人欧美特级aaaaaa片| 日日摸夜夜添夜夜添av毛片| 亚洲国产精品一区三区| 久久久久久久久久成人| 欧美日韩视频高清一区二区三区二|