欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

NodeMCU 固件 Lua 開發(fā) FAQ 深度指南:事件驅(qū)動編程、內(nèi)存優(yōu)化與固件裁剪實戰(zhàn)

NodeMCU 固件 Lua 開發(fā) FAQ 深度指南:事件驅(qū)動編程、內(nèi)存優(yōu)化與固件裁剪實戰(zhàn) 物聯(lián)網(wǎng)嵌入式【免費下載鏈接】nodemcu-firmwareLua based interactive firmware for ESP8266, ESP8285 and ESP32項目地址https://gitcode.com/gh_mirrors/no/nodemcu-firmware點擊查看免費下載導(dǎo)讀本文基于 NodeMCU 固件倉庫的開發(fā)者 FAQ系統(tǒng)講解在 ESP8266 上開發(fā) Lua 應(yīng)用的核心范式差異——事件驅(qū)動 vs 傳統(tǒng)過程式編程、任務(wù)調(diào)度模型、變量作用域與 Lua Registry 的底層機制并給出防 PANIC 重啟、內(nèi)存/SPIFFS 占用最小化、固件裁剪與 bytecode 編譯等實戰(zhàn)方案。讀完本文你將掌握 NodeMCU Lua 特有的開發(fā)約束、內(nèi)存調(diào)試工具鏈node.heap()、luac、ChunkSpy以及一套可落地的應(yīng)用結(jié)構(gòu)設(shè)計方法。1. 這份 FAQ 是什么面向誰這份 FAQ 的目標讀者是已經(jīng)具備一定 Lua 功底、但第一次在 ESP8266/ESP8285 上編寫 NodeMCU 應(yīng)用的開發(fā)者。它不教你 Lua 語言本身那屬于 Where to start 列出的外部資源范疇而是解答這樣一個問題一個合格的 Lua 開發(fā)者在 NodeMCU 固件基于 ESP8266 SoC 的各種模組、NodeMCU Devkit上開發(fā)時會遇到哪些與標準 Lua截然不同的情況FAQ 成文于 2017 年 4 月正值 NodeMCU 固件從 0.9 時代走向 2.x 時代的轉(zhuǎn)型期。當時固件團隊已經(jīng)完成了多項關(guān)鍵改進這些改進也決定了本文所述實踐方法的前提SDK 持續(xù) rebaseline不再長期鎖死在舊 SDK 版本常量數(shù)據(jù)遷移出 RAM配合軟件異常處理與 LCD 補丁將大量常量數(shù)據(jù)從 RAM 移到固件地址空間典型構(gòu)建的可用 RAM 從約 15KB 提升到 40KB 以上代碼密度提升約 40%錯誤報告修復(fù)traceback 現(xiàn)在能正確報告行號LwIP 網(wǎng)絡(luò)棧原生重實現(xiàn)基于 Espressif 開源的 LwIP 實現(xiàn)文檔體系建立本文正是整個文檔體系的一部分參見倉庫 docs/ 目錄ESP32 移植啟動由 Johny Mattsson 主導(dǎo)。注意FAQ 撰寫時固件基于Lua 5.1當前倉庫 app/Makefile 中LUA_DIR : lua53說明現(xiàn)代構(gòu)建已切換為Lua 5.3相關(guān)文檔見 docs/lua53.md。本文在原理層面仍以 5.1 的經(jīng)典表述為主涉及 Lua 版本差異處會標注。2. Lua 語言層面NodeMCU Lua 與標準 Lua 的同與異2.1 Lua 語言學(xué)習(xí)起點NodeMCU 固件在 ESP8266 SoC 上實現(xiàn) Lua 語言。官方 Lua 5.1 手冊Lua Language specification是語言規(guī)范的權(quán)威來源unofficial Lua FAQ 對把 Lua 作為第二語言學(xué)習(xí)的開發(fā)者尤其有用Lua Users Wiki 提供大量示例源碼與討論其 Learning Lua 欄目是入門好去處。書籍方面Programming in Lua作者 Roberto IerusalimschyLua 創(chuàng)始人之一第一版可在線免費閱讀PiL 在線版第三版仍可購買其中清晰標注了 Lua 5.1 與 5.2 的差異是性價比最高的選擇。文中以PiL n.m形式引用其章節(jié)。至于 ESP8266 硬件本身其架構(gòu)閉源但 Espressif SDK 持續(xù)更新文檔可通過搜索 Espressif IoT SDK Programming Guide 或訪問 Espressif 下載論壇獲取。2.2 NodeMCU Lua 與標準 Lua 的本質(zhì)區(qū)別Lua 本質(zhì)上是嵌入式擴展語言它不假設(shè)存在主程序而是被宿主應(yīng)用嵌入宿主可調(diào)用 Lua 函數(shù)執(zhí)行代碼、讀寫 Lua 變量、注冊 C 函數(shù)供 Lua 調(diào)用。NodeMCU 固件正是這種模式的典型ESP8266 的官方 SDK 以二進制庫形式閉源發(fā)布應(yīng)用開發(fā)者只能依賴 SDK API 及其文檔ESP32 則采用 ESP-IDF 開源方案NodeMCU Lua 固件是運行在 SDK 之上的 ESP8266 應(yīng)用利用 Lua 的鉤子與特性無縫集成而不損失標準 Lua 語言特性固件替換了與 SDK 結(jié)構(gòu)不兼容的標準庫io與os庫不可用由 NodeMCU 的node、file庫替代debug、math庫被裁剪以減小運行時體積取模用%冪用^注意io.write()不會被file庫替代要與print(string)默認輸出一致地寫串口請使用uart.write(0, string)。NodeMCU Lua 基于eLua——為嵌入式系統(tǒng)優(yōu)化的 Lua 5.1 完整實現(xiàn)。eLua 分支的核心創(chuàng)新是LTRLua Tiny RAM在可行處為庫模塊使用只讀表與常量典型構(gòu)建可減少約 20–25KB RAM 占用使 Lua 在 ESP8266 上可行。2.3 事件驅(qū)動NodeMCU 應(yīng)用必須遵循的編程范式SDK 是非搶占式、事件驅(qū)動的。應(yīng)用通過 SDK API 為事件注冊回調(diào)函數(shù)事件在 SDK 內(nèi)部排隊一次只調(diào)用一個任務(wù)任務(wù)運行完成后將控制權(quán)交還 SDK。SDK 明確警告任何任務(wù)運行超過 15mSecWiFi 等服務(wù)就可能失敗。NodeMCU 庫本質(zhì)上是圍繞注冊的 Lua 回調(diào)函數(shù)的 C 包裝器讓這些回調(diào)成為 SDK 任務(wù)。因此你必須用事件驅(qū)動風格編寫 ESP8266 Lua 程序。大多數(shù)程序員習(xí)慣過程式寫法單一執(zhí)行流、同步調(diào)用系統(tǒng)服務(wù)完成網(wǎng)絡(luò) I/O但 ESP8266 不能這樣編碼。每個任務(wù)的內(nèi)部邏輯可以是過程式的但應(yīng)用的整體結(jié)構(gòu)必須是事件驅(qū)動的。3. ESP8266 特有細節(jié)3.1 與標準 Lua 相同之處這是完整的 Lua 5.1 實現(xiàn)現(xiàn)代構(gòu)建為 5.3所有標準 Lua 語言結(jié)構(gòu)與數(shù)據(jù)類型均可用核心標準庫core、coroutine、string、table均已實現(xiàn)。3.2 與標準 Lua 不同之處硬件與內(nèi)存模型。ESP8266 采用片上 RAM 片外 SPI Flash 組合代碼可從 Flash 映射地址空間直接執(zhí)行。硬件實際在 RAM 中執(zhí)行代碼Flash 映射地址通過基于 RAM 的 L1 緩存完成緩存未命中時硬件透明地將代碼從 Flash 拷貝到 RAM該訪問以 SRAM 速度運行比已緩存代碼慢約 13 倍。固件大部分從 Flash 運行但 RAM 與 Flash 相對開發(fā)者常用系統(tǒng)仍非常有限。經(jīng)過兩年優(yōu)化可用 RAM 從 0.9 版的約 15KB 提升到 2.x 版的約 45KB。早期 ESP8266 模組常配 512KB Flash全功能 Lua 構(gòu)建加可選庫后仍要留出應(yīng)用空間需謹慎挑選庫當前固件可舒適地裝入 1MB Flash 并留有充足余量。文件系統(tǒng)。固件將未使用的 Flash 通過file庫暴露為SPIFFSSPI Flash File System專為嵌入式 SPI NOR Flash 設(shè)計優(yōu)化靜態(tài)磨損均衡與低 RAM 占用。SPIFFS 可用空間大小取決于構(gòu)建中包含的模塊數(shù)量。構(gòu)建裁剪。包含任何庫都會增大代碼與 RAM 體積推薦做法是自定義構(gòu)建只包含應(yīng)用與硬件變體需要的庫。不想搭建構(gòu)建環(huán)境的開發(fā)者可使用云端構(gòu)建服務(wù)。此外還可選擇32 位整數(shù)運算構(gòu)建而非浮點整數(shù)構(gòu)建 Flash 占用更小、執(zhí)行更快但存在不少陷阱一般推薦浮點構(gòu)建。開發(fā)流程。與 Arduino 每次改應(yīng)用都要重新燒錄固件不同Lua 固件通常只燒錄一次之后所有應(yīng)用開發(fā)都是更新 SPIFFS 上的文件——更像傳統(tǒng) PC 開發(fā)。只有需要增刪硬件相關(guān)庫時才重刷固件。錯誤處理。ESP8266 直接在裸硬件上運行 SDK沒有操作系統(tǒng)來捕獲錯誤、提供優(yōu)雅失敗模式系統(tǒng)錯誤很容易觸發(fā)PANIC 導(dǎo)致重啟。為節(jié)省代碼空間錯誤處理被刻意簡化這加劇了該傾向。RAM 等系統(tǒng)資源耗盡幾乎必然導(dǎo)致混亂失敗與重啟。Lua 5.1 時代無debug庫主要為 Flash 體積考慮。因此只能用 1980 年代風格的二分法定位錯誤并通過系統(tǒng) UART 接口的 print 語句診斷。理論上未來可作為自定義構(gòu)建選項加入。LTR 的副作用不能像普通 Lua 那樣輕易擴展標準庫。例如function table.pack()會因無法寫入全局table而報運行時錯誤。可用基于 metatable 繼承的標準沙箱技術(shù)達到同樣效果但需注意其運行時與 RAM 開銷。交互式運行時運行時系統(tǒng)處于交互模式——先執(zhí)行init.lua若有然后監(jiān)聽串口輸入的 Lua 塊語法完整后執(zhí)行。沒有批處理支持自動化嵌入式處理通常通過在 init.lua 中設(shè)置事件觸發(fā)器實現(xiàn)。異步性是陷阱非 Lua 處理如網(wǎng)絡(luò)功能通常只在當前 Lua 塊執(zhí)行完后發(fā)生。所有網(wǎng)絡(luò)調(diào)用都應(yīng)視為異步請求。常見錯誤是假設(shè)socket:send()是同步的——兩行連續(xù)的socket:send()中第一個并非在第二個執(zhí)行前已完成。send()只是將發(fā)送任務(wù)排隊交給 SDK 調(diào)度該任務(wù)要等 Lua 代碼返回其調(diào)用的 C 函數(shù)后才能開始。在單個 Lua 任務(wù)中堆疊大量請求會燒掉寶貴 RAM 并可能觸發(fā) PANIC。這同樣適用于定時器、網(wǎng)絡(luò)及其他回調(diào)甚至包括請求系統(tǒng)重啟node.restart(); for i 1, 20 do print(not quite yet -- ,i); end這段代碼會先打印 20 行 not quite yet -- 才重啟——因為node.restart()也只是排了一個任務(wù)。結(jié)論必須用事件驅(qū)動方式實現(xiàn)應(yīng)用必須搞清楚哪些 SDK API 調(diào)度異步處理、哪些通過 Lua 回調(diào)定義事件動作。這種范式確實讓過程式結(jié)構(gòu)難以實現(xiàn)但非常適合 IoT 設(shè)備上的典型應(yīng)用。3.3 SDK 事件/任務(wù)系統(tǒng)在 Lua 中如何工作SDK 用少量 **ISR中斷服務(wù)例程**處理時間緊迫的硬件中斷處理持續(xù)時間極短可打斷運行中的任務(wù)最長 10μSec對多數(shù)開發(fā)者而言修改或新增 ISR 不可行其他所有服務(wù)與應(yīng)用處理被拆分為任務(wù)tasks任務(wù)逐個執(zhí)行且運行到完成沒有任務(wù)能搶占另一個任務(wù)可運行任務(wù)進入三個優(yōu)先級隊列之一SDK 的簡單調(diào)度器按優(yōu)先級 FIFO 執(zhí)行。高優(yōu)先級隊列用于硬件相關(guān)任務(wù)中優(yōu)先級用于定時器與事件驅(qū)動任務(wù)低優(yōu)先級用于其他任務(wù)任務(wù)時長控制中優(yōu)先級任務(wù)建議控制在 2mSec 內(nèi)低優(yōu)先級任務(wù)控制在 15mSec 內(nèi)。這是指導(dǎo)值——超過可能仍能穩(wěn)定運行但也可能因 WiFi/網(wǎng)絡(luò)服務(wù)內(nèi)部超時而出現(xiàn)間歇性問題任務(wù)超過 500mSec看門狗定時器會復(fù)位處理器。應(yīng)用層可用tmr.wdclr()復(fù)位看門狗但應(yīng)避免這樣做應(yīng)用任務(wù)可禁用中斷以保護關(guān)鍵代碼段但 SDK 建議關(guān)鍵段超過 10μSec 會導(dǎo)致系統(tǒng) ISR 超時。因此這種操作只能存在于用 C 編寫的硬件相關(guān)庫模塊中Lua 應(yīng)用層不可用SDK 提供 C API包括聲明 C 應(yīng)用函數(shù)為回調(diào)的接口將應(yīng)用任務(wù)與特定硬件/定時器事件關(guān)聯(lián)其執(zhí)行與 SDK 的 WiFi/網(wǎng)絡(luò)處理任務(wù)交錯進行。NodeMCU 固件的本質(zhì)一個 C 應(yīng)用利用 Lua 作為嵌入式語言運行時的能力在 Lua 腳本層鏡像這套結(jié)構(gòu)。SDK 與硬件的所有復(fù)雜性與接口都被封裝在固件庫中翻譯成對應(yīng)的 Lua APISDK 在啟動時調(diào)用固件內(nèi)的啟動鉤子初始化 Lua 環(huán)境并嘗試從 SPIFFS 執(zhí)行init.lua。該模塊可完成應(yīng)用初始化并調(diào)用定時器報警或庫調(diào)用綁定回調(diào)例程以響應(yīng)系統(tǒng)事件默認情況下Lua 運行時還以交互模式監(jiān)聽UART 0串口執(zhí)行通過串口輸入的任何 Lua 命令。這是 ESP8266 上開發(fā)調(diào)試 Lua 應(yīng)用最常用的方式Lua 庫提供聲明 Lua 回調(diào)的函數(shù)存儲在 Lua Registry 中見下文將應(yīng)用任務(wù)與硬件/定時器事件關(guān)聯(lián)。例如mytimer:alarm(interval, repeat, callback)調(diào)用tmr庫中的函數(shù)該函數(shù)用 SDK 為此報警注冊一個 C 函數(shù)C 報警回調(diào)被調(diào)用時再轉(zhuǎn)而調(diào)用 Lua 回調(diào)過長的 Lua 函數(shù)或交互提示符輸入的長代碼塊會導(dǎo)致其他系統(tǒng)功能與服務(wù)超時或耗盡 RAM 緩沖排隊數(shù)據(jù)最終觸發(fā)看門狗或內(nèi)存耗盡導(dǎo)致系統(tǒng)重啟。FAQ 給事件驅(qū)動范式下了三條鐵律如果不用定時器和回調(diào)你就用錯了方法如果使用輪詢循環(huán)你就用錯了方法如果每個回調(diào)執(zhí)行超過幾百行 Lua你就用錯了方法。3.4 哪些 Lua 庫函數(shù)支持注冊回調(diào)Lua 模塊定義或移除回調(diào)的函數(shù)tmrregister([id,] interval, mode, function())nodetask.post([task_priority], function)、output(function(str), serial_debug)wifistartsmart(chan, function())、sta.getap(function(table))net.serversk:listen(port,[ip],function(socket))netsk:on(event, function(socket, [, data]))、sk:send(string, function(sent))、sk:dns(domain, function(socket,ip))gpiotrig(pin, type, function(level))mqttclient:m:on(event, function(conn[, topic, data])uartuart.on(event, cnt, [function(data)], [run_input])以tmr為例從 app/modules/tmr.c 源碼可見其回調(diào)注冊機制t:alarm()依次調(diào)用tmr_register()與tmr_start()注冊時通過luaL_ref(L, LUA_REGISTRYINDEX)將定時器 userdata 存入 Lua Registrytmr.c#L136-L137報警觸發(fā)時用lua_rawgeti(L, LUA_REGISTRYINDEX, tmr-self_ref)取回對象、以luaL_pcallx(L, 1, 0)保護性調(diào)用 Lua 回調(diào)tmr.c#L63-L74。t:unregister()則通過luaL_unref2釋放 Registry 引用并解除 os_timertmr.c#L187-L195——這就是 FAQ 強調(diào)用完必須 unregister否則 Registry 泄漏的底層原因。3.5 變量聲明方式NodeMCU 環(huán)境下為何尤其重要標準 Lua 語義但在 NodeMCU 中理解它尤為重要。所有變量可分為全局global、局部local、上值upvalue。默認情況下任何被引用且未聲明為local的變量都是全局的會一直駐留在全局表中直到被顯式刪除。查看當前全局變量for k,v in pairs(_G) do print(k,v) end局部變量是詞法作用域的可在嵌套塊或函數(shù)內(nèi)聲明而不影響外層作用域內(nèi)層作用域也可引用外層局部變量這類變量稱為上值upvalues。Lua 變量可承載兩類數(shù)據(jù)值數(shù)字、布爾、字符串與引用函數(shù)、表、userdata。把變量a賦給b時值是簡單拷貝引用則讓a、b指向同一個對象不做內(nèi)容拷貝。這會產(chǎn)生反直覺的后果。例如下面代碼退出時tmr2func已不在作用域但 alarm API 調(diào)用已把對該函數(shù)的引用存入 Lua Registry因此它與所用上值會持續(xù)存在直到被完全解除引用如tmr2:unregister()do local tmr2func function() ds.convert_T(true); tmr1:start() end tmr2:alarm(300000, tmr.ALARM_AUTO, tmr2func) end要區(qū)分函數(shù)編譯、綁定為閉包與運行時調(diào)用三個時刻。閉包通常在編譯后立即綁定一次但不必然。以下例來自 FAQ 作者 TerryE 的 MCP23008 模塊-- Bind the read and write functions for commonly accessed registers for reg, regAddr in pairs { IODOR 0x00, GPPU 0x06, -- Pull-up resistors register for MCP23008 GPIO 0x09, OLAT 0x0A, } do dev[write .. reg] function(o, dataByte) write(MCP23008addr, regAddr, dataByte) end dev[read .. reg] function(o) return read(MCP23008addr, regAddr) end end此循環(huán)在模塊被 require 時只編譯一次讀寫函數(shù)的 opcode 向量連同記錄上值與局部變量數(shù)量的頭信息在編譯時創(chuàng)建但這兩個函數(shù)被綁定四次為不同函數(shù)如mcp23008.writeIODOR()每個閉包繼承自己的上值副本該函數(shù)的regAddr為0x00。上值列表在閉包創(chuàng)建時生成即便最初聲明它們的外層函數(shù)已離開作用域并被 GC只要閉包存在Lua RTS 也保證其上值繼續(xù)存活。而局部變量的存儲每次調(diào)用該例程時分配在運行的應(yīng)用中可能分配很多次。性能差異Lua 運行時內(nèi)部用哈希鍵訪問從表取鍵值局部變量與上值則存儲為連續(xù)向量、按下標直接訪問快得多。NodeMCU 對固件側(cè)表的訪問尤其慢因此模塊開頭常見如下語句——用局部變量與上值既快又減少字節(jié)碼指令local i2c i2c local i2c_start, i2c_stop, i2c_address, i2c_read, i2c_write, i2c_TRANSMITTER, i2c_RECEIVER i2c.start, i2c.stop, i2c.address, i2c.read, i2c.write, i2c.TRANSMITTER, i2c.RECEIVER3.6 事件任務(wù)之間如何傳遞上下文單個 Lua 函數(shù)與每個事件回調(diào)任務(wù)綁定由 NodeMCU 庫 C 代碼通過lua_call()執(zhí)行——連執(zhí)行dofile(init.lua)的系統(tǒng)初始化都是它的特例。函數(shù)可繼續(xù)調(diào)用其他函數(shù)但最終必須把控制權(quán)返回 C 庫代碼再由后者返回 SDK結(jié)束該任務(wù)。local變量天然只存在于執(zhí)行中的 Lua 函數(shù)上下文中退出即失去引用局部數(shù)據(jù)除非同時被別處引用的引用類型可在lua_call()之間被 GC。因此事件例程間傳遞上下文只能靠以下機制全局變量天然全局可訪問直到顯式賦nil才解除。可用for k,v in pairs(_G)枚舉使用透明文件系統(tǒng)持久全局的特例原則上可用于傳上下文。但 ESP8266 文件系統(tǒng)基于 FlashSPIFFS 寫入壽命有限應(yīng)避免用于頻繁變化的內(nèi)容除非萬不得已Lua Registry通常隱藏的表庫模塊用它存回調(diào)函數(shù)與其他 Lua 數(shù)據(jù)類型。GC 視 Registry 為在作用域內(nèi)因此其中引用的一切都不會被回收上值NodeMCU 完整實現(xiàn)的 Lua 標準特性。函數(shù)在外層函數(shù)內(nèi)聲明時外層作用域的所有局部變量對內(nèi)層函數(shù)可用。深入原理可參考 Ierusalimschy 的論文Closures in Lua。3.7 Lua Registry 如何工作為何重要所有 Lua 回調(diào)都由 NodeMCU 庫中的C 包裝函數(shù)調(diào)用這些 C 函數(shù)本身是被 SDK 因某事件激活的回調(diào)。C 包裝函數(shù)經(jīng)常需要跨調(diào)用或在包裝函數(shù)間保存狀態(tài)——Lua Registry正是為此服務(wù)的特殊 Lua 表它對 Lua 直接訪問隱藏但用標準 Lua 表作為存儲使標準 GC 算法可對其內(nèi)容操作。需要保存的內(nèi)容以唯一鍵創(chuàng)建。被全局引用或 Registry 引用的函數(shù)的上值會在事件例程間存活故這些上值也可用于傳上下文。內(nèi)存泄漏常見根源如果內(nèi)存耗盡很可能是沒有正確清理 Registry 條目。例如設(shè)置了定時器卻不 unregister又如以下片段on()把 socket 作為第一個參數(shù)sck傳給連接回調(diào)它是回調(diào)內(nèi)的局部變量同時與上值srv引用同一個 socket功能上srv與sck可互換。那為何要傳參因為 GC socket 通常會自動 unregister 其回調(diào)但若把 socket 用作回調(diào)的上值socket 就被 Registry 引用而不會被 GC——Catch-22這是編程錯誤而非 bugsrv:on(connection, function(sck, c) svr:send(reply) -- should be sck instead of srv end)正確的回調(diào)實現(xiàn)示例見 net socket 文檔。檢查 Registry 是否泄漏可用for k,v in pairs(debug.getregistry()) do print (k,v) end如果它在增長說明存在泄漏。3.8 如何跟蹤全局變量參考 Unofficial Lua FAQ 的 Detecting Undefined VariablesFAQ 作者的做法除非有非常充分的理由否則避免使用全局變量。用luac -p -l XXX.lua | grep GLOBAL靜態(tài)過濾新模塊把意外產(chǎn)生的全局變量改成 local 或 upvalued local在 NodeMCU 上_G的 metatable 就是_G本身所以可以創(chuàng)建所需全局變量后關(guān)上大門_G.__newindexfunction(g,k,v) error (attempting to set global ..k.. to ..v) end此后任何創(chuàng)建新全局變量的嘗試都會拋錯并給出 traceback 指出發(fā)生位置。3.9 理解上值實現(xiàn)為何對 ESP8266 編程重要上值使用是 Lua 核心特性外層作用域定義的任何例程都可使用包括被_G全局表或 Lua Registry 直接/間接引用的例程。一個例程關(guān)聯(lián)的上值數(shù)量在編譯期算出閉包綁定時為其分配棧向量。每個上值分open開放或 closed閉合初始都是 open即上值回指外層函數(shù)的寄存器集但上值必須能比外層例程中聲明它的局部變量存活更久。運行時 VM 通過在函數(shù)返回時增加額外檢查來實現(xiàn)掃描其作用域內(nèi)定義的任何閉包的回引分配內(nèi)存保存上值并讓其引用指向該內(nèi)存——這就是 closed upvalue。這是 Lua 5.x 運行時成熟的部分正常應(yīng)用開發(fā)中這些幕后魔法讓上值按程序員預(yù)期工作同時存儲了足夠 GC 元數(shù)據(jù)使這些隱藏值在正確解除引用時被正確回收。一個復(fù)雜化因素部分庫函數(shù)不會隱式解除已過期的回調(diào)引用導(dǎo)致其上值可能不被 GC表現(xiàn)為內(nèi)存泄漏在測試中則表現(xiàn)為更頻繁、更難診斷的 PANIC。因此 FAQ 作者的一般建議初期開發(fā)堅持用全局變量用完的顯式置nil解除引用。3.10 能否把發(fā)郵件這類動作封裝成 Lua 函數(shù)想想前面的幾個答案。發(fā)一封郵件涉及與郵件服務(wù)器在 TCP 上的消息對話需要多次調(diào)用 SDK API且 Lua 代碼必須返回控制權(quán)給 C 調(diào)用庫才能調(diào)度這些請求否則請求只是排隊RAM 耗盡后應(yīng)用 PANIC。因此不可能寫一個模塊讓你這樣調(diào)用-- prepare message status mail.send(to, subject, body) -- move on to next phase of processing.但可以把它寫成事件驅(qū)動任務(wù)并傳入完成時執(zhí)行的回調(diào)。注意因涉及大量異步處理、只有返回調(diào)用庫 C 代碼后才會發(fā)生通常應(yīng)作為函數(shù)的最后一步執(zhí)行最好像這樣用尾調(diào)用tailcall[PiL 6.3]-- prepare message local ms require(mail_sender) return ms.send(to, subject, body, function(status) loadfile(process_next.lua)(status) end)FAQ 的比喻很貼切在 ESP8266 上構(gòu)建應(yīng)用如同把珍珠串成項鏈——每顆珍珠是一個足夠小、能在自身 RAM 資源內(nèi)運行的事件任務(wù)串起珍珠的線是把它們連接起來的變量上下文。3.11 何時、為何避免tmr.delay()過程式編程者自然想用tmr.delay()做時序控制。但在事件驅(qū)動范式下查看 app/modules/tmr.c 中該函數(shù)的實現(xiàn)os_delay_us()忙等循環(huán)期間還會調(diào)用system_soft_wdt_feed()喂軟看門狗它真的只適用于需要對外部硬件 I/O 做較精確時序控制的場合例如把 GPIO 引腳拉高 20μSec執(zhí)行期間中斷是使能的不保證延遲與請求完全一致Lua RTS 本身也可能注入 GC 等操作——若需要這種精度應(yīng)該寫成 C 庫在其他幾乎所有場景它都沒有功能意義任何其他系統(tǒng)代碼活動都會被阻塞最壞情況是破壞應(yīng)用、制造難以診斷的超時錯誤。因此 FAQ 將其一般用途標記為棄用deprecated。3.12 如何避免init.lua的 PANIC 循環(huán)大多數(shù)開發(fā)者都掉進過這個坑init.lua有 bug導(dǎo)致系統(tǒng)反復(fù)重啟進入重啟循環(huán)。此時唯一穩(wěn)妥的解決方案是重刷固件。避免重刷的最簡辦法讓init.lua盡量簡單——例如配置 WiFi 后用一次性tmr.alarm()延遲 2–3 秒再啟動應(yīng)用。這個延遲足夠你在串口發(fā)出file.remove(init.lua)奪回控制權(quán)。另一個技巧啟動時輪詢一個空閑的 GPIO 輸入引腳。FAQ 作者在板子上把該 GPIO 加 Vcc 接到跳線設(shè)置跳線即可進入調(diào)試模式或重新供給軟件。另外新init.lua永遠先測試再啟用先以init_test.lua命名通過串口手動執(zhí)行dofile(init_test.lua)確認正常后再改名。倉庫文檔 docs/upload.md 給出了詳細的 init.lua 示例先dofile(credentials.lua)加載憑據(jù)通過 WiFi 事件回調(diào)wifi_connect_event、wifi_got_ip_event、wifi_disconnect_event管理連接狀態(tài)拿到 IP 后用tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup)延遲 3 秒啟動startup()startup()內(nèi)先檢查init.lua是否被刪除/改名再dofile(application.lua)真正啟動應(yīng)用——這正是 FAQ 建議的啟動窗口內(nèi)可中斷模式的標準實現(xiàn)。4. 編譯與調(diào)試FAQ 建議在開發(fā)主機上安裝 Lua 5.1不僅方便在 PC 上調(diào)試 Lua 片段還可用于編譯校驗luac -p做語法驗證。還可以在開發(fā)主機上構(gòu)建luac.cross若本機裝有 Lua。它運行在主機上具備標準luac的全部功能區(qū)別是輸出代碼文件可在 NodeMCU 下作為.lc文件運行。倉庫中相關(guān)源碼位于 app/lua/luac_cross/Windows 下也可用 msvc/luac-cross/ 工程構(gòu)建。5. 降低 RAM 與 SPIFFS 占用的實用技術(shù)5.1 如何最小化應(yīng)用范圍最基礎(chǔ)的一步是把應(yīng)用范圍搞正確。ESP8266 是 IoT 設(shè)備而非通用系統(tǒng)典型用途是把現(xiàn)實世界的監(jiān)控、控制等接入內(nèi)網(wǎng)。最安全穩(wěn)妥的 IoT 使用方式是通過同一網(wǎng)絡(luò)的專用通用系統(tǒng)控制它們——可以是低成本方案如 Raspberry Pi 服務(wù)器跑自定義代碼或開源家庭自動化應(yīng)用此類系統(tǒng)容量比 ESP8266 高幾個數(shù)量級例如 RPi 有 2GB RAM、SD 卡可達 32GB還能支持 USB 外設(shè)、運行完整 Linux、有豐富的預(yù)配置應(yīng)用也有 $50 以下的諸多替代品以及貴 10–50 倍的自有 HA 系統(tǒng)。采用分層架構(gòu)所有對 ESP8266 的用戶訪問都經(jīng)過控制服務(wù)器意味著用戶界面或手機連接器及其驗證與安全可在為容量設(shè)計的系統(tǒng)上實現(xiàn)ESP8266 應(yīng)用只需實現(xiàn)一組有限的功能——發(fā)送請求或響應(yīng)該系統(tǒng)的請求。如果你想在 ESP8266 里實現(xiàn)用戶界面或 HTTP Web 服務(wù)器那你真的在濫用它的設(shè)計目的。給 ESP8266 應(yīng)用定范圍時KISSKeep It Simple, Stupid原則真正適用。5.2 如何最小化應(yīng)用在文件系統(tǒng)上的占用Lua 可以寫得非常緊湊單位 KB 源碼的功能密度極高但這樣做會極難調(diào)試與維護好的折中方案是用LuaSrcDiet壓縮要下載到 ESP8266 的生產(chǎn)代碼在 PC 或云端版本庫如 GitHub維護主源碼倉庫排版與注釋按易維護、易調(diào)試來組織用 ESPlorer 下載正在調(diào)試的模塊并測試代碼測試穩(wěn)定后先經(jīng) LuaSrcDiet 壓縮再下載到 ESP8266。這樣 SPIFFS 上的代碼占用可減少 2–3 倍。LuaSrcDiet 還有一種模式能達到約 95% 的壓縮效果但保留行號基于行號的錯誤信息仍可用。標準 Lua 編譯代碼包含大量調(diào)試信息幾乎使 RAM 體積翻倍。node.stripdebug() 可改變默認設(shè)置為特定模塊增加調(diào)試信息或去掉行號信息省一點空間。而用node.compile()預(yù)編譯生產(chǎn)代碼會移除所有編譯信息含錯誤行號故只推薦用于不需要行號的穩(wěn)定生產(chǎn)代碼。從 app/modules/node.c 源碼看node.stripdebug()支持 1–3 級剝離級別 3 丟棄局部變量、上值與行號調(diào)試信息可針對具體函數(shù)通過棧級指定 scope剝離并返回估計的剝離字節(jié)數(shù)。5.3 如何最小化運行中應(yīng)用的內(nèi)存占用Lua 垃圾回收器非常激進地掃描與回收死資源采用增量標記-清除策略任何未被最終引用回全局表、Lua Registry 或當前 Lua 代碼在作用域內(nèi)的局部變量的數(shù)據(jù)都會被回收。將變量置nil即解除其先前內(nèi)容的引用。引用型變量如表、字符串、函數(shù)可被多個變量引用同一對象一旦最后一個引用置nil收集器即回收其存儲。與 PHP 等編譯時加載語言不同Lua 編譯代碼在 GC 上與其他變量類型同等對待完全解除引用后即可被回收代碼空間可復(fù)用。默認 GC 模式非常激進每次分配后都觸發(fā) GC sweep。參見 node.egc.setmode() 調(diào)整node.egc.setmode(node.egc.ON_MEM_LIMIT, 4096)這是性能與保留足夠空閑內(nèi)存之間的良好折中。源碼中 node_egc_setmode 校驗 mode 不超過常量組合、且ON_MEM_LIMIT模式下 limit 必須非零node.egc.meminfo()node.c#L613-L620可返回totalallocated, estimatedused兩個值輔助觀察。Lua 執(zhí)行天然被劃分為事件任務(wù)、各綁定一個 Lua 回調(diào)加上解除引用即強回收特性很容易應(yīng)用可追溯到 1950 年代的經(jīng)典技術(shù)——Overlay覆蓋。實現(xiàn)方式之一見 DP Whittaker 的Massive memory optimization: flash functions主題。另一種是使用volatile modules易失模塊。標準 Lua 模塊模板中require()會在package.loaded表里創(chuàng)建已加載模塊的引用該引用阻止模塊被 GC。要讓模塊易失需把package.loaded中對應(yīng)條目置nil來移除該引用。不能在模塊最外層這么做引用要等模塊代碼執(zhí)行返回后才創(chuàng)建但可在任何模塊函數(shù)中做通常是初始化函數(shù)local s net.createServer(net.TCP) s:listen(80, function(c) require(connector).init(c) end)connector.lua用標準模塊模式但M.init()例程必須包含local M, module {}, ...... function M.init(csocket) package.loaded[module] nil... end return M這樣保證模塊在完成后可被完全解除引用。代價是每個到 80 端口的 TCP 連接都要重載模塊但從 SPIFFS 加載編譯模塊只需幾 mSec如果這能幫你把應(yīng)用拆成 RAM 尺寸的塊這是可接受的。注意require()會自動依次搜索connector.lc、connector.lua因此源碼與編譯變體都能工作。另外雖然慣例是模塊返回一個表但 [PiL 15.1] 指出有時返回單個函數(shù)更合適——省去額外表的開銷local s net.createServer(net.TCP) s:listen(80, function(c) require(connector)(c) end)local module _ -- this is a situation where using an upvalue is essential! return function(csocket) package.loaded[module] nil module nil... end注意不要這樣寫監(jiān)聽回調(diào)因為 RAM 必須同時容納創(chuàng)建服務(wù)器的模塊與 connector 邏輯... local s net.createServer(net.TCP) local connector require(connector) -- dont do this unless youve got the RAM available! s:listen(80, connector)5.4 如何減小編譯代碼的體積向 SPIFFS 保存編譯后的 Lua 有兩種方式用node.compile()編譯.lua源文件生成等價字節(jié)碼.lc文件。該方式剝離全部調(diào)試行號與變量信息先用loadfile()把源文件加載進內(nèi)存再用string.dump()轉(zhuǎn)成內(nèi)存中的序列化加載格式寫回.lc文件。保留的調(diào)試信息量取決于 node.stripdebug() 設(shè)置。從 node_compile 源碼可見node.compile()校驗文件名以.lua結(jié)尾加載源碼后以stripping 1調(diào)用lua_dump寫出.lc即默認徹底剝離調(diào)試信息若目標固件為整數(shù)算術(shù)構(gòu)建還可能報 value too big or small for target integer type 等轉(zhuǎn)換錯誤。體積差異方法 1 創(chuàng)建的字節(jié)碼 RAM 占用與直接執(zhí)行源文件相同方法 2 的字節(jié)碼在 stripdebug 級別 3 下比保留調(diào)試信息的 dump小約 10%在級別 1 下小約 60%——因為調(diào)試信息幾乎和代碼本身一樣大。選擇建議方法 2loadfilestring.dump適合希望在盡可能低 RAM 占用下運行的穩(wěn)定生產(chǎn)代碼仍在調(diào)試階段時選方法 1 即可但調(diào)試期代碼改動頻繁直接用.lua文件更省事。關(guān)鍵便利用require(XXX)加載代碼會自動依次搜索XXX.lc、XXX.lua因此無需自己寫條件邏輯判斷加載字節(jié)碼版本還是源碼版本。5.5 如何感知函數(shù)占用多少內(nèi)存想用好有限資源應(yīng)對 VM 模型有整體理解。必備參考資料是A No Frills Introduction to Lua 5.1 VM Instructions它解釋代碼生成器如何工作、每個表/函數(shù)/字符串的內(nèi)存開銷。在 ESP8266 上難以直接得到字節(jié)碼清單但有兩個寬泛途徑在開發(fā) PC 上生成字節(jié)碼清單Lua 5.1 代碼生成器在 PC 與 ESP8266 上基本一致雖非完全相同用標準luac配合-l -s選項即可大致了解代碼會生成什么。兩者主要差異ESP8266 的size_t是 4 字節(jié)而非現(xiàn)代 64 位 PC 的 8 字節(jié)eLua 變體對 ROM 數(shù)據(jù)類型生成不同的訪問引用。想看string.dump()版本生成什么就去掉-s保留調(diào)試信息。也可用本固件構(gòu)建luac.cross生成針對 ESP 架構(gòu)的.lc代碼把.lc文件上傳到 PC 反匯編多種 Lua 反匯編器可列出應(yīng)用模塊生成的編譯代碼前提是有腳本把文件從 ESP8266 上傳到 PC。FAQ 作者用ChunkSpy但需要打補丁讓它理解 eLua 數(shù)據(jù)類型--- a/ChunkSpy-0.9.8/5.1/ChunkSpy.lua 2015-05-04 12:39:01.267975498 0100 b/ChunkSpy-0.9.8/5.1/ChunkSpy.lua 2015-05-04 12:35:59.623983095 0100 -2193,6 2193,9 config.AUTO_DETECT true elseif a --brief then config.DISPLAY_BRIEF true elseif a --elua then config.LUA_TNUMBER 5 config.LUA_TSTRING 6 elseif a --interact then perform ChunkSpy_Interact另一個得力工具是在代碼中經(jīng)常調(diào)用node.heap()node.c#L346 處的node_heap實現(xiàn)返回當前空閑堆內(nèi)存字節(jié)數(shù)監(jiān)控內(nèi)存水位。用這些工具反復(fù)實驗體會每種編碼風格下典型代碼行生成的指令數(shù)。Lua Wiki 給出了一些通用優(yōu)化技巧但要記住那些主要針對執(zhí)行速度優(yōu)化而你要優(yōu)化的是代碼與變量空間——那才是消耗寶貴 RAM 的東西。5.6 使用函數(shù)的代價函數(shù)有固定開銷因此把應(yīng)用代碼分組到較大的函數(shù)中總體 RAM 占用更少。主要告誡是如果開始在函數(shù)間復(fù)制粘貼代碼就是在浪費資源。當然仍應(yīng)使用函數(shù)來結(jié)構(gòu)化代碼、封裝公共重復(fù)處理但要記住每個函數(shù)定義對其頭記錄與棧幀都有相對較高的開銷。盡量別過度使用函數(shù)若函數(shù)只有十幾行左右且合理應(yīng)考慮內(nèi)聯(lián)。5.7 其他可用資源在開發(fā) PC 上安裝lua與luacWindows/Mac/Linux 均可免費獲得但強烈建議用Lua 5.1保持與 ESP8266 代碼的源碼兼容。這不僅能在豐富的開發(fā)環(huán)境中單測部分模塊還能用luac生成字節(jié)碼清單、在下載到 ESP8266 前做新代碼語法校驗并允許以同一種語言開發(fā)服務(wù)端應(yīng)用與嵌入式應(yīng)用。6. 固件與 Lua 應(yīng)用開發(fā)6.1 如何減小固件體積推薦使用定制固件構(gòu)建只包含開發(fā) Lua 應(yīng)用所需的模塊。一旦具備制作與燒錄自定義構(gòu)建的能力還可以把時間敏感或邏輯密集的代碼移入自定義 C 模塊——C 代碼可直接從 Flash 運行能節(jié)省大量 RAM。構(gòu)建固件的詳細方法與選項見 構(gòu)建固件文檔倉庫內(nèi)對應(yīng) docs/compiling.md。這也呼應(yīng)了 FAQ 開篇的團隊實踐現(xiàn)代構(gòu)建通過 LTR 等技術(shù)將常量數(shù)據(jù)移入固件地址空間才使典型構(gòu)建的空閑 RAM 從約 15KB 提升到 40KB 以上你在應(yīng)用層做的每一次裁剪模塊選擇、bytecode 編譯、易失模塊、事件驅(qū)動的短任務(wù)都是這種資源意識的延續(xù)。7. 總結(jié)一套可復(fù)用的 NodeMCU 開發(fā)心智模型范式優(yōu)先任何 ESP8266 Lua 應(yīng)用都應(yīng)是事件驅(qū)動的——回調(diào)注冊、短任務(wù)、無輪詢、無長時間同步阻塞含tmr.delay()與連續(xù)socket:send()的誤區(qū)資源意識從范圍KISS 分層架構(gòu)到運行時局部變量/上值、nil解除引用、易失模塊、node.stripdebug()/node.compile()每一步都在為 45KB 級 RAM 做預(yù)算上下文管理全局、Registry、上值三者各有代價——全局透明但易污染Registry 是庫回調(diào)的存儲基座不清理即泄漏上值優(yōu)雅但可能隱性泄漏開發(fā)期建議先用全局并顯式nil防御性啟動init.lua保持簡單、帶 2–3 秒中斷窗口、先以init_test.lua驗證避免 PANIC 重啟循環(huán)后被迫重刷固件工具鏈主機裝 Lua 5.1 與luac、構(gòu)建luac.cross、用node.heap()監(jiān)控、必要時用 ChunkSpy 反匯編.lc把內(nèi)存當成可觀測、可優(yōu)化的工程指標。贊分享物聯(lián)網(wǎng)嵌入式【免費下載鏈接】nodemcu-firmwareLua based interactive firmware for ESP8266, ESP8285 and ESP32項目地址https://gitcode.com/gh_mirrors/no/nodemcu-firmware點擊查看免費下載相關(guān)推薦TensorZero 網(wǎng)關(guān) OTLP 鏈路追蹤導(dǎo)出實戰(zhàn)把推理 Trace 接入 JaegerTensorZero 網(wǎng)關(guān) OTLP 鏈路追蹤導(dǎo)出實戰(zhàn)把推理 Trace 接入 Jaeger 本文以 TensorZero 倉庫中的 examples/gui物聯(lián)網(wǎng)嵌入式NodeMCU固件深度解析ESP8266/ESP32的Lua交互固件革命NodeMCU是一款基于Lua的開源固件專為ESP8266和ESP32 WiFi SoC設(shè)計。這個強大的固件讓物聯(lián)網(wǎng)開發(fā)變得前所未有的簡單通過Lua腳本語言物聯(lián)網(wǎng)嵌入式sherpa-onnx WebAssembly 關(guān)鍵詞識別KWS實戰(zhàn)模型下載、資源準備與 WASM 構(gòu)建sherpa onnx WebAssembly 關(guān)鍵詞識別KWS實戰(zhàn)模型下載、資源準備與 WASM 構(gòu)建 導(dǎo)讀 本文圍繞 sherpa onnx 倉庫中物聯(lián)網(wǎng)嵌入式上一篇TrollInstallerX終極指南一鍵在iOS設(shè)備上安裝TrollStore的完整教程下一篇3分鐘掌握Zotero谷歌學(xué)術(shù)引用統(tǒng)計插件的完整使用指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情AV| 国产午夜一区二区三区| 婷婷九月狠狠色| 色五月激情网| 影音先锋四区| 免费AV在线| 丁香五月日本| 亚洲性天天| 五月激情婷婷国产精品久久久久久| 思思热视频| 色情成人五月天| 5月色婷婷| 色婷婷久久| 五月丁香婷婷久久| 黄涩毛片| 久热这里精品免费| 色欲五月天| 五月婷婷偷拍| 婷婷色在线播放| www,奇米影视| 91精品激情9| 激情五月综合| 香蕉99网| AA片在线观看视频在线播放| 中文字幕人妻熟女在线| 中文字幕按摩做爰| 色欲一区二区三区精品A片| 婷婷五月天AV| 色五月婷婷综合在线| 五月天色网站| 噜噜久| 久久婷婷网| 色婷婷www| 久热9热| 成人 在线观看国产| 婷婷久久网| 天天干天天做| 婷婷丁香熟妇综合网| 99热综合网| 99热久草| 丁香五月婷婷AV在线| 九九热短视频在线观看 | 99热这里是精品| 五月婷婷啪啪啪| 99国产视频网| 五月综合丁香婷婷| 天天干天干| 97色碰| 婷婷天堂综合| 九九亚洲视频| 99欧美精品99日本精品| 九九Y精品热播| 大香伊人久色| 九热视频精品| 久久9久| 67194成I人在线观看线路1| 蜜乳.comcom| 91porn一起草| 色综久久久| 五月色亭丁香| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 棕合影院色色| www.sd-xiangsu.cpm| 激情五月天黄色小说| 五月婷婷基地| 天天操九九插| 五月天激情久久| 色五月 五月婷婷| 5月婷婷6月六月丁香| 激情综合五月开心狠狠| 狠狠操综合| 深爱综合网| 97五月天| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 丁香九月综合激情| 任你艹| 风流少妇A片一区二区蜜桃| 精品欧美性爱超级爽| 久久五月婷综合| 婷婷激情综合色五月久久91| 99精品久久久久久久婷婷| 丁香五月综合| 色偷偷狠狠| 午夜电影网VA内射| 五月天社区婷婷丁香社区| 久久婷网| 亚洲综合另类| 绿色小导航AV| 99热在线里有精品| www.99热在线| 色五月丁香com| 绿色小导航AV| 噜色精品| 婷婷的99视频网站| 婷婷丁香成人色综合| www.com色播五月天| 亚洲永久四色| 伊人在线视频| 婷婷丁香中文字幕| 久久黄A片| 99热网精品| 草榴视频黄色网| 99资源在线视频| 综合五月天亚洲婷婷| 天天日天天日天天搞| 日本色色网站| 久久精彩视频18| 婷婷五月,偷窥偷拍网| 丁香五月婷婷狠狠色| 精品怡红九九九| 天天色天天操天天射| 久热九九| 天天久久狠狠色综合| 五月丁香综合伦理片| 色婷婷婷婷五月天| 成人超碰网| 丁香六月婷| 久色五月丁香视频| 丁香五月天AV在线| 色婷婷大香蕉| 97色色视频| 婷婷五月av| 婷婷五月综合免费在线| 亚洲AAAA网| 激情五月婷婷网| 九九九九热99超碰| 伊人丁香婷婷东京| 91久操| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 91日视频| 五月天天爽| 日本天天色| 色色色色色五月| 婷婷久久六月费| 大香蕉伊人久久| 人妻中文在线| 欧美色婷婷| 欧美人人草| 99免费| 四季日韩AV无码综合| 六月色婷婷色| 26uuu最新地址| 99热99天堂| 99色综合久久| 婷婷五月天激情视频| 久久香蕉网| 九九九九大香蕉| 99热这里只是精品| 丁香六月婷婷缴情欧美| 亚洲十月婷婷综合| 国产一级片色色| 色播五月婷婷| 丁香五月影院| 五月婷婷亚洲天堂激情在线| 九九热精品视频| 碰97久久| 亚洲激情四射| 天天综合久久| 被男人添B超爽视频| 91人人操人人| 亚洲热久久| 五月天婷婷社区久久综合| 日本久久爱| 婷婷视频在线碰| 99色视频在线观看| 国模九区| 婷婷激情五月色综合| 色哟呦av| 天天做天天爱天天要| 久久综合26p| 色五月丁香激情| 日日夜夜狠狠| 色婷婷色人人射| 伊人九热| 婷婷 丁香 精品| 黄色短视频在线观看| 五月丁香六月婷婷网站| 久久婷婷激情四射五月天| www.婷婷激情网.com| 日韩AAA| 一本色道久久88综合日韩精品| 亚洲天堂亚洲色色色| 久久人人看| 九九热再线九九视频免费在线观看| 另类视频五月天| 第四色色六月色综合| 亚洲色综合| 色色色视频免费无码| 九九亚洲| 高清无码入口| 综合天天综合| 日本综合99| 欧美综合激情五月天| 国内9l视频自拍老熟女九色| 日韩超碰在线| 婷婷五月丁香在线观看| 丁香97综合| 色五月涩涩婷婷| 日本美女上人| av一级棒av| 99这里只有精品99| 一逼色综合| 久久五月天婷婷| 婷婷六月激情丁香| 五月丁香琪琪| 99惹 精品在线| 狠狠干综合网| 在线国产精品色| 亚洲欧洲中文日韩久久AV乱码| 亚洲婷婷成人五月天| 五月丁香婷婷99| 色婷婷偷拍| 乱女乱妇熟女熟妇综合网站| 婷婷五月激情图片| 3pAV| 欧美色色色色色色| 日产精品久久久久久久蜜臀| 五月婷婷日| 激情五月婷黄版| 欧美槡BBBB槡BBB少妇| 色色射| 97人人射| 五月丁香六月婷婷综合| 在线观看国产高清视频免费网站| 婷婷五月天综合网| 99热最新网址| 亚洲小说五月婷婷| 99热精品99| 中文幕无线码中文字蜜桃| 激情综合网五月婷婷| 婷婷精品| 国产99久9在线| 色婷婷香蕉| 色亚洲欧洲| 九九色色| 肏屄色播伊人97婷婷| 丁香五月婷婷啪啪| 日韩九区| 欧美 日韩 成人| 狠狠操天天操天天操| 伊人网啪啪| 99超超碰| 五月天色综合| 99久久婷婷| 亚洲精品国产精品乱码不99| 婷婷综合五月激情| 六月婷婷综合| 91色在线| 丁香婷婷综合色五月激情国产基地| 丁香五月婷婷啪啪| 五月婷婷在线观看黄| 狠狠香婷婷五月| 狠狠色丁香久久| 无遮羞AV| 五月婷婷这里都是精品| 色五月天天在线观看资源站| 91色九| 亚洲AV日韩在线观看| 九九色精品| 亚洲色夜| 人人色婷婷| 天天成人综合视频| 亚洲性图一区二区| 99性爱无码| 丁香六月婷月91婷月| 五月亭亭欧美女人| 99人妻碰碰碰久久久久视| 天天色中文字幕女优AV| 久久AAAA片一区二区| 91日本在线观看| 免费视频99| 激情五月天色婷婷| 五月丁香龟婷婷| 97久久香草精品视频| 九九热在线观看6| 六月婷久久| www.99热这里精品 | 五月丁香婷婷开心| 99热这里只有是亚洲国产| 丁香色啪综合| 丁香五月天欧美在线| 丁香女人五月天| 欧美噜噜噜草| 操笔无码| 三十路磁力链接| 丁香狠狠| 婷婷五月天性| www,婷婷| 国产成人亚洲综合A∨婷婷| 色婷五月| 91精品视频男人的天堂| 五月婷婷综合天天操| 密着浓厚中出乚交尾GvG935| 五月丁香亭亭激情操逼网| 日本欧美成人片AAAA| 99精品成人无码A片观看金桔| 99视频在线| 777色色色| 日韩成人AV在线| 97在线刺激| 亚洲黄色精品| 婷婷色导航| 狠狠狠狠狠| 久久一级AV| 国产免费性爱| 综合激情在线观看| 丁香五月婷婷黑人妻黄色电影院| 激情综合五月激情XXXX| 人妻操操色| 久热网在线视频| 老司机日日夜夜青草| 五月色丁香| 国产精品社区| 少妇做爰免费视看片| 屁股翘好撅高迎合跪趴| 亚洲 欧洲 国产 伦综合| 婷婷欧美激情| 99热精品10| 婷婷五月天熟妇| 婷婷操婷婷干婷婷射| 成人网在线视频| 婷婷午夜天| 大地资源色婷婷视频在线| 99@久久@99精品视频| 五月色婷婷夜色| 插逼综合网| 丁香五月婷婷深爱综合激情| 婷激情五月| 日日操夜夜爽| 久久久国产精品黄毛片| 激情伊人网| 69热在线| 五月天激情啪啪| 一起草无码| 久久久久久久久久久久久久人妻视频| 婷婷五月天日本无码| 99色在线| 国产又爽又猛又粗的视频A片| 狠狠色婷婷综合开心影视| www91在线| 激情com| 五月丁香六月婷婷的女人| 久久色五月天| 亚洲精品第一色色色色色色| 91色五月| 六月丁香VA| 五月婷婷丁香在线| 天天日天天插| 五月婷婷色啪| 亚洲激情 久久| 色色色色色色网站| www.99热| ady狠狠入| 色5月婷婷| 婷婷五月在线免费| 可以免费观看的AV| 久99视频| 欧美久人人| 欧美黑人大吊| 五月丁香色婷婷久久| 久久综合九九| 超级碰碰视频无码| 婷婷五月成年人| 天天干天天插| 黑人巨粗进入警花疼哭A片| 九 九九九AV| 丁香综合婷婷开心激情网| 婷婷五月综合视频| 五月天激情久久| 日本久久九| 国产精品久久99| www.五月.com| 国产精产国品一二三在观看| 亚洲国产成人在线| 伊综合蕉| 色色色色热热| 人妻激情在线| 9久热视频| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 色综合色五月| 婷婷九月在线| 婷婷热色| 色亚洲婷婷| 综合狠狠干| 五月丁香另类网| 欧韩性爱| 日韩另类| 男人的天堂五月丁香| 五月丁香亚洲婷婷| 成人噜噜网| 五月丁香最新| 激情五月深爱婷婷| 五月刺激丁香月综合| 九九热这里只有精品首页| 婷婷成年人免费视频| 成人无码髙潮喷水A片| 99re66热这里只有精品| 一月婷婷色色| 日本久久99久久| 色了色综合| 亚洲精品一区中文字幕乱码| 深爱女色婷婷丁香五月亚洲图区| 99re热在线视频| 国产小网站| 婷婷五月天激情在线| 国产乱子轮XXX农村| 日本久热| 久久性视频| 亚洲成人av在线| 日韩AAAAAAAAAAA片| 色网五月婷婷| 久久网思思| 无码 av电影| 涩涩五月天综合| 五月婷在线| 91九色中文字幕女在线观看| 中文无码婷婷| 97碰碰视频在线观看| 色欲午夜无码久久久久久张津瑜| 98色花堂98t.R| 九九99香蕉在线视频播放| 色色丁香五月天社区| 91精品久久久久久综合五月天| 久久se 综合网| 激情婷婷六月| 大香蕉在线观看9| 婷婷色av| www91在线| 色5月婷婷色| 91成人视频| 中文字幕永久免费| 婷婷丁五月| 五月激情综合网| 五月天激日本色情在线| 日本不卡高字幕在线2019| 婷婷免费成人视频| 免费看片在线观看| 淫视馆AV在线| 成人五月天在线观看| 操一操干一干| 六月丁香婷婷色69| 免费观看日韩成人av| 日日夜夜天天综合| 99九九精品视频| 六月激情网| 国产五月丁香在线| 亚洲妇女熟BBW| 色婷婷五月天堂资源| 久久香视频| 五月激情在线| 99re这里只有精品9| 1024人妻| 五月天桃色深爱网| 伊九九三级区| 伊人久久婷婷五月综合97色| 色五月婷婷五月久久| 色欲资源网| 欧美超碰亚洲| 99热这里只有精品1| 五月天婷婷基地综合网| 性爱久久| 五月婷亚洲精品| 五月激情啪啪| 五月丁香亭亭激情操逼网| 亚洲第一第二网站| 草一草avb| 爆乳熟妇一区二区三区四区| 色99色| 99精品视频免费在线播放| 九九精品丁香花| 99在线观看精品| 99热这里只有在线播放| 婷婷久久女人| 日本欧美成人片AAAA| 成人综合伍月天| 日本婷婷在线| 第四色在线观看| 国产午夜精品一区二区| 婷婷五月天激情综合婷婷五月天激情综合 | 五月天六月丁香| 久久无码成人| 97操操操| www.五月天婷婷| 久热久色| 操逼巨乳91| 天天爽天天操| 五月天激情小说| 婷婷五月色综合| 日韩综合久久| 国产熟妇的荡欲午夜视频| 99视频网址| 我要色综合五月婷婷| 五月丁了香蕉综合| 日本波多野结衣视频| 热久久91| 狠狠做深爱婷婷久久综合一区| 大香蕉520| 五月天色色色色色| 96自拍视频九色在线观看| 国产色网站| 少妇人妻综合色6699| 久久机热这里只有精品免费视频| 九九中文字幕九| 国产精品人人做人人爽人人添| 久久东京热婷婷五月| 色色色色色色色色色影院| 丁香五月激情综合| 欧美激情综合色丁香婷婷五月天| 五月婷综合性中心| 久久精品爱爱| 99干日本| 偷拍91九色| 淫视馆av三区| 综合av在线| 另类少妇人与禽zOZZ0性伦| 欧美色九| 天天舔天天爽| 婷婷五月天激情综合深爱激情| 五月丁香综合啪啪対白| 色五月天天在线观看资源站| 婷婷综合网| 日本久久视频| 久久综合播放| 激情五月婷婷啪啪| 96色婷婷| 婷婷欧美激情| 婷婷五月天毛片| 九一娱乐在线观看视频| 九九精品大香蕉| 婷婷五月天福利| 九九这里都是精品| 色色色五月婷| 91久久久久久久久久久| 欧洲毛片基地c区| 色五月婷婷基地| 丁香五月天成人网站| 久久五月婷天天干| 97五月天婷婷| 成人久久天天x资源站| 袁子仪视频观看| 婷婷她六月天| 人人爱干人人爱草| 激情丁香网| 琪琪理论片| 最新日本A片| 五月天免费色| 5月丁香六月情| 久久这里只有精品视频26| 五月丁香WWW| 99人人操人人摸| 西瓜美女a片| 国产特级毛片AAAAAAA高清| 99噜噜噜在线播放| 婷婷综合中文字幕| 在线亚洲综合| 久久婷婷资源| 激情五月天久久丁香| wWwCom夜操wwW| 成人天天爽| 天天综合干| xfplayav在线| 六月婷婷开心| 婷婷另类小说| 香蕉97碰碰碰欧美| 久久久久久9热不雅视频| 五月丁香狠狠爱婷婷综合| 最新AV在线观看| www.综合久久.com| 99精品久久| 丁香成人综合| 国产成人99久久亚洲综合精品| 五月婷婷丁香俺日污视频| 婷婷五月天免费视频| 夜夜 操无码| 538在线精品| 欧美日韩91| 就爱日五月天| 五月丁香久人妻中文| 激情综合网丁香| 五月久久亚洲| 五月激情天| 99精彩视频| 一级黄色片看看| 色www99| 九月激情综合婷婷| 丁香六月中文| 月婷婷婷婷五月| 五月亭亭六月天| 97久久超碰| 一级片无码| 色噜噜狠狠色综合网| 日本一级一片免费视频| 啪啪啪五月天| AV色婷婷| 少妇水多A片太爽了| 玖玖婷婷色五月| 久久66er久久| 欧美五月丁香| 久久怡红院| 丁香婷婷色五月| 91操片| 国产精品久久久爽爽爽麻豆色哟哟| 五月色婷婷夜色| 99九九在线观看免费| 狠狠色丁婷婷日日,伊人激情综合网| 六月丁香久久| 国产这里只有精品| 久久98热re| 九九精品在线网| 亚洲高清在线| 三级三久久线久久99久目本WW| 日本色99网站| 丁香五月偷拍| 1024操逼| 九九人人操| 亚洲欧美另类在线23p| 91精品久久久久久77777| 色99xx| 五月丁香激情婷婷| 成人丁香五月天Av| 色婷婷伊人激情在线观看| 五月天婷婷在线播放| 日本三级中国三级99| 草草色情综合网| 婷婷中文无码| 99热99热在线| 碰超亚洲| 热的国产,热的综合,热的有码| 色婷婷电影网| 九九久久污| 综合激情网| 另类视频一区| 色婷婷伊人| 久久人妻www| 午夜性做爰电影| 综合婷| 六月婷婷国产| 天天爽天天爽| 夜夜夜天天操| 色婷婷电影网| 九色91国产| 四色 爱 婷婷 精品 亚洲 五月天| 九九久久网| 日韩无码91| 26uuu亚洲欧美| 九九99九九精品免费| 伊人99热| 激情 婷婷| 五月色网| 色色综合网www| 丁香五月天激情网址| 五月婷婷综合激情| 啪啪激情网| 日本色色网站| 婷婷五月丁香啪啪| 国产成人高清| 久久婷视频| 丁香婷婷91在线观看视频| 丁香青青五月天| 伊人深爱综合| 99热很操老逼| 婷婷五月天伊人| 久久色五月天| 97se视频在线| 色五月91| 99久热这里只有精品| 99九九在线视频| 丁XX 成人| www.综合久久| 婷婷综合激情| 五月婷婷另类| 色婷婷久久| 99在线视频精品| 亚洲V国产V欧美V久久久久久| 五月婷婷 六月丁香| www.色色色com| 天天舔日日肏夜夜爽| 狠狠ri| 99综合色| 九九 激情 网| 久热伊人| 久久五月婷综合网| 99天堂在线观看免费视频| 色五月婷婷五月天激情综合| 99精品视频推荐| 亚洲视频操| 人妻爽爽爽久久久久久久久| 国产亚洲成AV人片在线观黄桃| 五月色欧洲| 丁香五月婷婷高清| 五月丁香婷婷综合视频| 天天日天天做天天舔| 亚洲中文字幕在线观看| 亚洲成人黄色网| 成人在线观看一区| 色五月综合网| 精品九九视频在线观看| 色九综合| 99热这里只有精品青草| 激情伊人六| 大香人妻| 日本色色图| 国产精品99久久久久久久女警| 丁香五月av在线| 色色五月丁香婷婷综合| 日韩欧美颜射| 五月草影视| 久操干| 婷婷五月天久久| 天天舔天天插天天干| 中文字幕av网站| 亚洲av骚货| 天天摸日日舔狠狠添婷婷婷| 婷婷九色| 9国产在线视频| 亚洲色婷婷五月天| 99性视频| 一级性感毛片| 九九无码| 狠狠色大香蕉| 四虎婷婷五月天| 婷婷六月色情| 俺也去五月婷婷丁| 久久婷婷五月综合色奶水99啪| 蜜臀A∨在线水帘洞| 久久婷婷五月综合一| 狠狠干综合| 夜夜躁爽日日| 婷婷五月天成人动漫| 操比激情五月| 91妻人人爽人人看片| 色在线99| www,五月天激情| 五月天日日操夜夜操 | 六月激情婷婷| 五月香六月婷| 天堂AV三级| 久久艹网| 亚洲欧洲中文日韩久久AV乱码| 噜噜操操| 天天射色五月天| 婷婷在线五月天观看| 九色 在线| 丁香色婷婷色手机免费在线| 天天日天天舔| 综合网啪| 日婷婷久久开心| 亚洲丁香五月天在线视频| 九热久| 在线综合91| 国产欧美日韩综合精品一区二区| 色噜噜狠狠色综合成人99| 中文字幕色色| 天天干夜夜b| 激情色中文| 9l视频自拍9l九色9l成人| 69超碰在线| 天天干,天天日| 中文无码婷婷| 最新av在线观看| 天天久| 国产精品色一哟哟| 日日干干天天干| 亚洲综合在线伊人婷| 亚洲成人一区| 97碰人人操| 亚洲视频在线网| 1024AV视频| 亚洲精品国产熟女久久久| 婷婷月综合| www.99情趣网| 五月天激情视频五月天| va亚洲中文在线| 我爱婷婷五月天综合88| 中文字幕在线观看视频www| 欧洲亚洲免费视频9| www五月天com| 99九九在线视频| 六月丁香啪| 色噜婷婷| 欧美月久久| 超碰啪啪网| 97亚洲精品| 九九草草逼| 婷婷五月天 丁香五月天 裸体| 九九九激情综合| 亚洲熟妇AV乱码在线观看| 99热这里有精品| 六月丁香婷| 久操大香蕉| 色色日本| 婷婷色中文字幕| www.五月天| 久久小视频| 超碰在线日夜| 九日日夜夜69| 丁香五月婷婷香| 婷婷久久图片| 久久激情天堂| www.zbzhongsen.com| 久操热| 男人的天堂999| 天天天天天色| 丁香六月成人网| 久久机热/这里只有精品| 99精品小视频| 亚城区在线| 丁香五月综合激情性爱| 蜜臀av粉嫩av懂色av| 久久婷婷影院| 人妻久久久| 97婷婷五月丁香| 九九久久精品國產| 久9热视频| 婷五月天天| 狠狠另类视频| 色深爱五月| 欧美天堂久久| 91黄址| h在线看免费版在线看| 亚洲视频一区| 婷婷色六月| 五月婷婷人人人操| 深爱激情四射| 亚洲久热无码| 热久久这里只有精品| 99在线精品视频| 中文字幕中文有码在线| 综合网狠狠| 9久视频| 丁香婷婷伊人| 五月天婷综合| 五月天婷婷无码| 亚洲AV久久久久久久久久久久久久久久| 91熟妇大香蕉| 亚洲色色色色色色色色色| 五月丁香六月婷婷中合网| 五月天狠狠网| 九九这里有精品| 色色色激情网| 婷婷五月色情天| 五月激情丁香五月宗合| 亚洲视频色婷婷| 激情丁香五月天| 丁香婷婷婷婷十二月在线观看视频| 六月婷婷九月丁香| 这里只有精品,日韩视频| 天天日天天干天天爽| 激情五月综合| 久草视频大香蕉99| 99操| 婷婷激情图片| 国产毛片精品一区二区色欲黄A片| 91午夜婷婷狠狠久久综合9色| 99热偷拍| 色五月综合激情| 国产精品美女| 热热99爱爱| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 亚洲视频五区| 亚洲婷婷五月天激情综合| 色情丁香五月婷婷精品| 久热精品免费视频4| 色欲av伊人久久大香线蕉影院| 色情五月天婷婷| 婷婷色在线观看| 超碰京东热av男人的天堂| 五月婷婷在线视频免费观看| 丁香五月激情六月综合| 日本99久久| 色色色色色日韩午夜激情 | 九九色插| 天天 青草 制服丝袜 在线| 五月天伊人久久久久| 亚洲亚洲人成综合网络| 狠狠搞五月天| www.婷婷五月| 九九热精品视频在线观看| 夜夜爱伊人| 丁香五月亚洲| 97热91| 99热在线播放| ww久久| 综合九九日本| 欧美激情-区二区三区| 思思热视频在线| 丁香五月在线自慰| 伊人久久五月天综合| 亚洲成av人影院| 任你艹| 天堂综合久久 | www激情| 亚洲AV成人无码电影| 丁香六月婷婷高清| 五月丁香激情综合| 九九99精品| 久热大香蕉| se99热久久一本| 99热这里只有精品青草| 婷色天堂| 99热骚货| 可以免费观看的av| 九九热九九| 日韩精品一区二区亚洲AV观看| 狠狠色中色| 色综合综合网| 久久精品一区二区三区四区| 五月婷婷熟女| 久久久久久久人妻| 天天日狠狠| 欧美精品999| 激情宗合哪里能看| 天天天天天天操| 亚洲中文字幕网| 五月婷婷色影院| 中文字幕不卡+婷婷五月| 伊人五月天| 色一情一乱一乱一区9| 99免费在线视频| 亚洲AV成人无码电影| 激情五月天开心| 99热超| 婷婷丁香18| 激情人妻综合| 久久女人天堂| 99热只有精品综合| 99在线小视频| 丁香五月花婷婷开心| 丁香五月天之婷婷影院| 99爱免费在线观看| 开心五月婷婷| 热99热9| 99久久婷婷国产综合精品| 国产裸舞表演WWWW| 9久操| 六月婷久久| 激情综合区| 五月色综合| 深爱激情AV| 五月婷婷性爱网| 五月激激激情综合网| 丁香五月激情网| 婷婷伊人久久| 欧洲不卡视频| 大香蕉久| 天天夜天天色天天| 我想看国产大学生口爆吞精的视频| 久久婷婷欧美| 激情丁香五月AV| 91碰在线| 天天草婷婷五月| 丁香五月综合网| 天天日天天舔| 操一区| 色婷婷呢狠禁久禁| 五月丁香六月综合基地| 色碰碰| 噜噜在线| 丁香六月婷婷一区二区三区| 成人网丁香五月| 九九色婷婷| 三十路磁力链接| 日本天堂免费99| 激情五月综合| 婷婷开心激情综合五月天| 色婷婷无吗| 色婷婷视频在线| 丁香成人综合| 九色无码| 婷婷丁香熟妇综合网| 五月天另类图片| 97人凄人人操人人爽| 被强行糟蹋的女人A片| 欧美激情凹凸丁香网| 91九色国产在线| 综合五月天| 久久五月天综合| 亚洲国产精品成人免费一区久久久在线观看AAAA| 超碰免费人| 中文字幕激情综合| 婷婷五月天深爱| 婷五月天六| 性av| 婷婷中文字幕网| 99热在线这里只有精品| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 97色婷| 色小说五月天| se色99| 日韩淑女人妻luan伦激情精品一区二 | 日本熟女三区| 日韩精品一品二区三区的使用体验| 色婷婷久久| 丁香六月婷婷五月婷婷| 亚洲中文无码成人| 操碰久| 午夜天堂一区人妻| 色五月色五天色情网| 婷婷日日天天| www久久99com| 激情久久网 | 五月丁香六月情| 中文字幕婷婷五月天| 久人操| 欧美成人AAA片一区国产精品| 久99久热| 丁香5月婷婷| 激情婷婷内射| 伊人婷婷色| 亚洲AV久久久久久久久久久久久久久久 | 久久婷婷婷| 在热视频精品| 婷婷伊人激情婷婷| 毛片新网地| 91精品综合久久久久久五月天| 9+1视频网址| 婷婷丁香成人| 夜夜爽天天干| 丁香五月天激情网| 婷婷丁香色五月天久久88| 日韩影院三级| 不卡的AV网站| 精品人妻伦九区久久AAA片| 日韩无码专区| 来吧亚洲综合网| 丁香六月色婷婷| 人人色性网| 影音先锋xfplay资源男人网| 日韩欧美成人片| 婷婷99丁香| 99在线资源视频| 中文字幕精品无码一区二区| 91色婷婷综合久久中文字幕二区| 欧美激情五月天| 五月丁香花激情综合网| 丁香五月天激情综合网| 久久草人妻| 日本妈妈乱| 五月婷婷啪啪啪| 久久婷婷国产| 亚洲色婷婷久久99精品91| 色综合女人99| 丁香婷婷五月激情四射网| 亚洲无AV在线中文字幕| 天天日日夜夜| 久久婷婷热| 天天干一干| 色色色综合网| 亚洲精品视频在线| 99精品性爱| 99爱在线免费视频| 婷婷五月天色色| 五月婷色| 九九香蕉网| 婷婷五月天激情小说| 狠狠插狠狠插| 激情综合网五月| 99热精品在线播放| 99热精品在线观看| www.婷婷六月天| 99操99| 无码AV久久久久久久久| 色情五月丁香| 婷婷五月天成人网| 粉嫩AV久久一区二区三区| 激情99| 五月婷A V在线| 北条麻妃九九九国产精品视频| 婷婷丁香综合网| 激情婷婷丁香五月| 91熟妇大香蕉| 国内在线99视频| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 婷婷五月综激情| 99热都是精品| 成人五月天综合网| 五月丁香六月婷婷中合网| 五月天无码视屏播放| 婷婷五月综合啪| 亚洲色 视频| 美女五月天| 97视频91| 丁香五月在线观看| 激情内射人妻1区2区3区| 午夜亚洲AV日韩无码| 丁香五月色色婷| 丁香五月婷婷亚洲另类| 激情五月天色色网| 日日夜夜青青草| 五月情涩综合婷婷| 亚洲成人中心| 色5月婷婷| 少妇性BBB搡BBB爽爽爽视頻| 婷婷丁香六月| 青吴乐视频| 美女黄频aⅴ视频| 精品视频这里只有精品| 久久一二三视频| 婷婷五月天在线观看免费| 亚洲精品视频电影| 99久久性爱| 狠狠噪| 五月丁香自拍| 人人干人人干骚美女| 婷婷五月色亚洲| 狠狠狠狠狠干| 激情五月天色播| 六月婷婷五月丁香| 高清av在线国产| 丁香六月啪啪| 丁香婷五月| www.jiujiujiu| 婷婷色综合| 51XX嘿嘿午夜无码| 狠狠狠婷婷五月综合| 狠狠狠狠狠草| 天堂久久精品| 亚洲视频在线观看| 婷婷婷久久久| 丁香五月中文字幕| 婷婷四色五月| 亚洲无码另类| 色爆五月| 操久久网| 嫩草AV久久伊人妇女超级a| 五月婷婷性爱| 超级碰碰碰久久网站视频| 婷婷丁香五另类网站| www.夜夜騎夜夜狠| 夜色综合网| 丁香,开心成人,久久| 中文字幕黄色电影网址| 日本激情ⅩXX免费视频| 五月亭亭性| 丁香五月综合| av免费在线网站| 成人做爰A片免费看网站找不到了| 五月丁香婷婷潮喷中文字幕| AA丁香综合激情| 综合99在线| oVV4WIB3vFi8D| 开心五月婷婷婷美女| 粉嫩AV久久一区二区三区| 欧美三级欧美一级| 综合网五月天123| 天天干天天插| 激情综合网激情五月婷婷| 激情色播| 日日夜夜天天| 婷婷中合| 色七色九九| 久久久18| 婷婷影院欧美| 99热99这里有免费的精品| 九九香蕉网| 婷婷丁香社区| 色五月丁香伊人| 日韩AAAAA| 国产精品蜜臀99| 九九碰九九爱97| 狠狠色婷婷7777久综合| 五月激情综合婷婷| 综合色久| 五月天大香蕉视频| 五月天婷婷乱| www.yw尤物| 日韩狠狠色| 丁香久久久| 丁香五月综合| 国产婷婷色五月| 九九AV在线| 超级碰人人操人人干| 另类综合国产| 午夜精品久久久久久久爽| 婷婷五月激情网| 综合久久高清| 蜜桃婷婷狠狠久久综合| 开心五月婷婷99| 欧美成人猛片AAAAAAA| 六月丁香婷婷视频综合在线观看| 激情六月丁香| 教师性爱毛片| 五月丁香婷婷中文网| 九九亚洲天堂| 天天五月香欧美| 婷婷丁香熟妇综合网| 青青草原中文字幕| 99热主页日本| 五月丁香六月激情综合| 婷婷五月激情丁香| 97在线干| 玖玖五月丁香| 九热电影av| 99爱精品| 激情综合国产| 99视频激情四射| 久久精品系列| 在线网黄| 丁香五月婷婷偷拍| 超碰不卡在线| 婷婷玖玖五月天| 狠狠色丁香久久婷婷综合五月| 亚洲视频综合网| 五月丁香激情欧洲啪啪| 久久综合婷婷激情| 久久欧洲综合网| 欧美六月婷婷| 婷婷免费视频| 激情婷婷久久| 99视频内射三四| 日韩色色色色色| 天天弄天天操| 狠狠干总合| 日本强伦片中文字幕免费看| 婷婷激情丁五月| 538在线精品| 加勒比色色| 97操资源婷婷| 亚洲欧美另类在线23p| 欧美婷婷九月| 日本精品99| 婷婷综合激情| www.夜夜| 亚洲夜夜操| 久久久久久18| 五月婷精品| jiujiu无码五区| 国产真实乱对白精彩| www.丁香五月| 棕合影院色色| 九九伊人网| 五月综亚洲| 欧美69色| 超碰二区| 99re思思在线视频| 九色成人AV在线| 婷婷五月激情视频在线| 台湾无码A片一区二区| 99热这里只有精品在线观看| 成人色站,在线视频,看片-SS1AV| 亚洲天堂婷婷| 99热免费| 天天色综和网| 97碰碰草| 久久久91| 五月人人丁香婷婷五月人人丁香| 超碰2021| 亚洲欧美综合7777色婷婷| 激情五月天在线观看色婷婷| 狠狠噪| 99狠狠操一| 婷婷激情小说网| 色九九中文字幕| 久久精品9| xx色综合| 丁香五月天激情四射网| 色一情一乱一乱一区91Av| 婷婷五月色网| 超碰在线人人| 97一区二区| 99re热在线视频观看| 色日本丁香婷婷| www.久久久久久久久久久| 超碰日日操| 久久这里只有国产精品视频| 日本操碰碰|