免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

ESP32上WebAssembly實戰(zhàn):.wasm為何不能當(dāng)應(yīng)用跑?

ESP32上WebAssembly實戰(zhàn):.wasm為何不能當(dāng)應(yīng)用跑? 前幾天有個朋友找我聊 ESP32 上的 WebAssembly 方案開口就是一句“我邏輯用 Rust 編成 .wasm 了是不是可以直接燒進去當(dāng)應(yīng)用跑”我愣了一下然后意識到這不是他一個人的困惑。最近各種技術(shù)社群里“把應(yīng)用編譯成 wasm 塞進 ESP32”的說法越來越多但很多人其實還沒完全理清 .wasm 文件到底屬于哪個層級的東西。這個標(biāo)題問得很到位為什么一個 .wasm 文件還不能算真正的 ESP32 應(yīng)用答案并不復(fù)雜但背后的整套工程思路值得展開聊一聊。先說結(jié)論.wasm 文件只是字節(jié)碼它在 ESP32 上的角色類似“插件數(shù)據(jù)”而不是“可執(zhí)行固件”。要讓它真正跑起來你至少需要一個駐留在設(shè)備里的運行時比如 wasm3 或 WAMR還要有一整套宿主固件去給它提供 GPIO、UART、I2C 這些外設(shè)能力。換句話說真正算 ESP32 應(yīng)用的是那個“裝得下 Wasm 并幫它干活”的宿主程序.wasm 更像是被宿主加載的一塊可更新業(yè)務(wù)邏輯。1. 先把一個矛盾點擺清楚.wasm 是字節(jié)碼不是可執(zhí)行程序1.1 字節(jié)碼和機器碼之間隔著一位“翻譯官”WebAssembly 最初是為瀏覽器設(shè)計的設(shè)計目標(biāo)就是體積小、加載快、可移植。它定義了一套虛擬指令集這套指令跟具體的 CPU 架構(gòu)無關(guān)。也正是因為“無關(guān)”同一個 .wasm 模塊才能既跑在 x86 服務(wù)器上又跑在 ARM 嵌入式板卡上理論上也能跑在 ESP32 的 Xtensa 或 RISC-V 核心上。但這個“跑”是有前提的必須有一個運行時負責(zé)解釋或者即時編譯這些字節(jié)碼。芯片上電后直接執(zhí)行的是二進制機器指令不是 .wasm 的字節(jié)碼。ESP32 經(jīng)典款用的是 Xtensa LX6 雙核ESP32-S3 是 Xtensa LX7ESP32-C3 則是 RISC-V RV32IMC。它們各自只認自己的指令集.wasm 文件里那些i32.add、call_indirect指令芯片根本不知道是什么。我習(xí)慣把 .wasm 比作“一份菜譜”而不是“菜”。菜譜里寫清楚了需要哪些食材、每個步驟怎么做但你拿著菜譜直接啃是吃不飽的你得先有一個會照著菜譜執(zhí)行的廚師。在 ESP32 上這個廚師就是運行時解釋器。沒有廚師菜譜只是一張寫滿字的紙放到設(shè)備里.wasm 只是一段躺在 flash 里的數(shù)據(jù)。1.2 Wasm 只能活在宿主環(huán)境里它自己干不了硬件的活還有一個被很多人忽略的約束WebAssembly 規(guī)范刻意沒有提供任何操作系統(tǒng)或硬件訪問能力。它不直接操作 GPIO不直接讀寫 I2C 總線連往串口吐一個字節(jié)都得靠外部函數(shù)。Wasm 模塊運行之前需要從宿主環(huán)境“導(dǎo)入”一批函數(shù)然后通過這些導(dǎo)入函數(shù)間接使用硬件資源??梢赃@樣理解.wasm 相當(dāng)于一個搬到新城市的人生活里的一切都要依賴外部服務(wù)——水電煤、外賣快遞都得別人上門。對應(yīng)到 WASM 里這個“別人”就是宿主固件里用 C/C 實現(xiàn)的導(dǎo)入函數(shù)。你在 Rust 側(cè)寫extern C { fn gpio_write(pin: i32, level: i32); }編譯器生成的是一個“對宿主的調(diào)用請求”而不是真正的寫寄存器操作。最終把電平推到引腳上的是宿主固件里那個注冊過的原生函數(shù)。所以一個孤立 .wasm 文件連“程序”都算不上沒有宿主、沒有導(dǎo)入函數(shù)實現(xiàn)它根本沒法執(zhí)行哪怕最簡單的邏輯。這就像你把一堆 Python 字節(jié)碼扔進一個沒裝 Python 的設(shè)備它不可能跑起來。2. ESP32 真正能跑的東西長什么樣和 .wasm 差在哪2.1 一份正經(jīng)的 ESP32 固件里面至少有這些東西我查過不少開發(fā)者的困惑他們把.wasm直接拖進 Flash Download Tool 燒錄然后問我為什么設(shè)備起不來。這里的問題不在于燒錄工具不對而在于對 ESP32 啟動鏈路理解有偏差。一顆 ESP32 芯片上電后它的 ROM bootloader 會先去 flash 的固定偏移位置加載二級引導(dǎo)程序然后由二級引導(dǎo)程序加載應(yīng)用鏡像。整個啟動鏈路上需要的東西大概有三樣bootloader.bin負責(zé)初始化內(nèi)存、校驗分區(qū)表并引導(dǎo)應(yīng)用默認燒在 0x1000 偏移。partition-table.bin定義 flash 里有哪些分區(qū)應(yīng)用、OTA、SPIFFS、NVS 等默認燒在 0x8000。app.bin真正的應(yīng)用二進制默認從 0x10000 開始。這些 .bin 文件是從 ELF 可執(zhí)行文件轉(zhuǎn)換出來的里面每一段都是 ESP32 能直接執(zhí)行的機器碼。你使用idf.py build、PlatformIO 或 Arduino ESP32 工具鏈交叉編譯 C/C 代碼得到的是一個project.elf再通過esptool.py elf2image轉(zhuǎn)成可燒錄的 bin。這個過程和 .wasm 完全沒有交集。如果你想用 Arduino IDE 搭建環(huán)境或者用 ESP-IDF 管理開發(fā)環(huán)境網(wǎng)上大量資料提到的國內(nèi)鏡像源、離線安裝包、工具鏈下載本質(zhì)上都是在幫你湊齊這套原生編譯工具鏈。它們的目標(biāo)產(chǎn)物只有一個——機器碼固件不是 WebAssembly。2.2 沒有運行時.wasm 燒進 flash 也只是一趴數(shù)據(jù)有人會反駁我把 .wasm 放到 SPIFFS 文件系統(tǒng)里應(yīng)用代碼再去讀它這不就有用了嗎對這個思路是對的但請注意這時候你的 ESP32 應(yīng)用是那個“讀 .wasm 并執(zhí)行它的宿主程序”而 .wasm 本身依然只是數(shù)據(jù)文件。舉個例子你可以在分區(qū)表里配置一個 SPIFFS 分區(qū)然后用idf.py spiffsgen.py或 PlatformIO 的uploadfs命令把 .wasm 文件打包進文件系統(tǒng)鏡像一起燒錄。上電后你的原生固件啟動打開 SPIFFS讀取這個 .wasm 文件解析字節(jié)碼然后通過運行時逐條解釋執(zhí)行。如果斷電后把 .wasm 從 SPIFFS 里刪掉固件照常運行只是少了一個“業(yè)務(wù)插件”。反過來如果你把一個 .wasm 文件單獨燒到 0x10000 位置也就是 app 分區(qū)ESP32 的引導(dǎo)程序會把它當(dāng)作一個有效應(yīng)用來加載然后大概率直接崩潰或卡在啟動日志里。因為那根本不是機器碼CPU 拿去執(zhí)行必然產(chǎn)生非法指令異常。2.3 內(nèi)存和性能這兩個現(xiàn)實問題先把期望值拉平就算你給 ESP32 配好了運行時也得對性能有個理性的預(yù)期。經(jīng)典 ESP32 的片上 SRAM 大約 520KB實際可用的堆內(nèi)存通常 300KB 上下ESP32-C3 是 400KB SRAM。wasm 運行時本身要占掉一塊不小的空間wasm3 解釋器在裁剪后大約 50KB 左右的 codeWAMR 解釋模式帶完整功能可能要 100KB 以上。你內(nèi)存里同時要放被加載的 wasm 模塊實例、導(dǎo)入函數(shù)的參數(shù)棧每個函數(shù)調(diào)用都有獨立的 runtime stack再疊加上 Wi-Fi/藍牙協(xié)議棧的消耗可用內(nèi)存會非常緊張。性能方面純解釋執(zhí)行 .wasm 通常會比原生 C 編譯的機器碼慢 5 到 20 倍。這個倍率差異在計算密集場景下非常直觀我在 ESP32 上用原生 C 跑一個斐波那契(30)大概幾十毫秒同一個函數(shù)編譯成 wasm 再用 wasm3 解釋可以跑到數(shù)百毫秒甚至秒級。原因很簡單每條字節(jié)碼都要經(jīng)過解釋器主循環(huán)取出、解碼、分發(fā)到對應(yīng)執(zhí)行邏輯這比 CPU 直接執(zhí)行一條機器指令要重得多。所以我的態(tài)度很明確不要指望 .wasm 在 ESP32 上帶來計算性能優(yōu)勢它的價值在于部署靈活和隔離安全而不是速度。這一點想不清楚后面做出來的工程很容易翻車。3. 把一個 .wasm 變成 ESP32 應(yīng)用需要搭起整條工程鏈3.1 邊界別搞反宿主固件才是應(yīng)用.wasm 只是插件我見過不少初學(xué)者方案喜歡把業(yè)務(wù)邏輯全寫進 wasm然后宿主編得很薄只留一個加載器。這種思路在 PC 端服務(wù)器上可能還行但在 ESP32 上會碰得頭破血流。為什么因為設(shè)備上真正復(fù)雜、占資源、和硬件強相關(guān)的工作——Wi-Fi 連接、MQTT 長連接、外設(shè)驅(qū)動、低功耗電源管理——這些全都不適合塞進 wasm。正確的分層是這樣宿主固件負責(zé)所有硬件相關(guān)、穩(wěn)定不常變的功能.wasm 負責(zé)那些需要隨時調(diào)整、邏輯相對獨立、又不需要高頻計算的部分。比如一個傳感器網(wǎng)關(guān)采集頻率、上報閾值、告警規(guī)則這類業(yè)務(wù)參數(shù)可以做成 wasm 規(guī)則腳本下發(fā)而 I2C 讀取、Wi-Fi 重連、MQTT 心跳這些底層機制留在原生代碼里。打個比方宿主固件是公司的正式員工熟練掌握所有內(nèi)部系統(tǒng).wasm 是外包來的臨時顧問他只會在特定接口上提建議把建議翻譯成行動的還是那位正式員工。讓臨時顧問去動公司核心數(shù)據(jù)庫那是災(zāi)難。3.2 加載 .wasm 的核心流程運行時初始化、模塊注冊、導(dǎo)入函數(shù)綁定把 .wasm 加載進 ESP32 的典型流程可以拆成五個環(huán)節(jié)選擇運行時引擎常用的是 wasm3輕量解釋器和 WAMRIntel 出品的 WebAssembly Micro Runtime。選好之后把它作為組件加入 ESP-IDF 工程或者用 PlatformIO 的 lib 依賴方式引入。初始化運行時環(huán)境創(chuàng)建解釋器環(huán)境對象、配置棧大小和內(nèi)存限制。注冊導(dǎo)入函數(shù)把你要暴露給 Wasm 的原生能力比如gpio_write、uart_send綁定到模塊命名空間里。這一步最容易出錯函數(shù)簽名必須嚴(yán)格匹配。加載并實例化模塊從文件系統(tǒng)或 OTA 分區(qū)拿到 .wasm 的字節(jié)數(shù)組交給運行時解析生成模塊實例。調(diào)用入口函數(shù)通過函數(shù)名找到執(zhí)行入口比如_start或app_main傳入?yún)?shù)并讀取返回值。這套流程聽起來不復(fù)雜但實際工程里坑很多。尤其第 3 步WebAssembly 是強類型且要求函數(shù)簽名精確匹配的你在宿主側(cè)注冊v(ii)而 wasm 側(cè)導(dǎo)出的函數(shù)接收(i64, i64)鏈接直接失敗。為了少踩坑建議把所有導(dǎo)入函數(shù)收斂到一套統(tǒng)一的接口用結(jié)構(gòu)體或者std::variant做參數(shù)傳遞而不是每加一個函數(shù)就手搓一份綁定代碼。3.3 實操代碼wasm3 ESP-IDF 跑起一個 WASM 函數(shù)我以 wasm3 為例給一個最小可用的骨架代碼。先把 wasm3 作為 ESP-IDF 組件放進components/wasm3然后在main.c里這樣寫#include wasm3.h #include m3_env.h // 導(dǎo)入函數(shù)讓 wasm 側(cè)通過它點亮 LED static void m3_gpio_write(int32_t pin, int32_t level) { gpio_set_level(pin, level); } // 注冊導(dǎo)入函數(shù)簽名 v(ii) 表示返回 void兩個 i32 參數(shù) static void link_imports(IM3Module module) { m3_LinkRawFunction(module, env, gpio_write, v(ii), m3_gpio_write); } void app_main(void) { // 初始化 GPIO gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT); // 從 SPIFFS 讀取 wasm 文件 FILE *f fopen(/spiffs/app.wasm, rb); fseek(f, 0, SEEK_END); size_t size ftell(f); fseek(f, 0, SEEK_SET); uint8_t *wasm_bytes malloc(size); fread(wasm_bytes, 1, size, f); fclose(f); // 創(chuàng)建運行時環(huán)境 IM3Environment env m3_NewEnvironment(); IM3Runtime runtime m3_NewRuntime(env, 8 * 1024, NULL); IM3Module module; M3Result result m3_ParseModule(env, module, wasm_bytes, size); if (result) { ESP_LOGE(MAIN, parse failed: %s, result); return; } // 注冊導(dǎo)入函數(shù)并加載模塊 link_imports(module); result m3_LoadModule(runtime, module); if (result) { ESP_LOGE(MAIN, load failed: %s, result); return; } // 找到入口函數(shù)并調(diào)用 IM3Function func; result m3_FindFunction(func, runtime, blink_loop); if (result) { ESP_LOGE(MAIN, find function failed: %s, result); return; } m3_CallV(func, 2, 1); // 注意這里參數(shù)按 m3_CallV 的變參規(guī)則傳實際項目中建議用 m3_Call(argv) 顯式傳參 }對應(yīng)的 Rust 側(cè)代碼你可以用wasm32-unknown-unknowntarget 編譯extern C { fn gpio_write(pin: i32, level: i32); } #[no_mangle] pub extern C fn blink_loop(pin: i32, times: i32) { for _ in 0..times { unsafe { gpio_write(pin, 1); } // 簡單的忙等待實際工程里應(yīng)該調(diào)用 host 提供的延時函數(shù) for _ in 0..100000 {} unsafe { gpio_write(pin, 0); } for _ in 0..100000 {} } }編譯這段 Rust 代碼用cargo build --release --target wasm32-unknown-unknown拿到blink.wasm后放進 SPIFFS命名成app.wasm燒入設(shè)備即可。這是最經(jīng)典的“宿主調(diào)用 Wasm 控制 GPIO”的路徑你實際跑一遍就會明白真正讓燈亮起來的是 host 函數(shù).wasm 只是發(fā)號施令的“領(lǐng)導(dǎo)”。4. Wasm 在 ESP32 上的正確打開方式以及那些熱門場景怎么理解4.1 插件化把易變業(yè)務(wù)邏輯和穩(wěn)定固件徹底分離傳統(tǒng)嵌入式固件最大的痛點是業(yè)務(wù)需求一變整個固件要重新編譯、重新 OTA。OTA 本身不復(fù)雜但大規(guī)模設(shè)備群里頻繁做整包升級風(fēng)險很高——升級過程中斷、分區(qū)燒壞、回滾失敗每一樣都讓人頭疼。Wasm 插件化方案把“需求變更”的粒度從整機固件縮小到一個幾百 KB 甚至幾十 KB 的邏輯模塊。典型玩法是這樣的設(shè)備上跑一個穩(wěn)定的宿主固件連接云端管理平臺平臺下發(fā)新的 .wasm 文件到設(shè)備設(shè)備校驗后寫進文件系統(tǒng)或 OTA 分區(qū)然后熱加載運行。下一次業(yè)務(wù)規(guī)則調(diào)整只要重新下發(fā) .wasm 就行宿主固件完全不動。這套思路我在實際項目里驗證過對整個運維體系來說是質(zhì)的變化。以前改一條業(yè)務(wù)規(guī)則要排期升級現(xiàn)在平臺后臺一鍵下發(fā)十分鐘內(nèi)所有設(shè)備生效。4.2 沙箱隔離讓第三方邏輯崩潰也必須影響不到主系統(tǒng)原生 C 語言的插件機制最怕的就是內(nèi)存越界和野指針。第三方寫的業(yè)務(wù)模塊一旦崩了輕則設(shè)備重啟重則把主程序的堆棧寫壞。Wasm 的沙箱模型天然屏蔽了這類問題Wasm 模塊運行在線性內(nèi)存里所有內(nèi)存訪問都有邊界檢查模塊自身能訪問的只有打開接口暴露給它的那部分能力。換句話說即使下發(fā)的 .wasm 代碼里有惡意行為比如故意上越界寫運行時也會把這種訪問擋下來返回一個 trap 錯誤而不是真的把宿主的可控內(nèi)存搞壞。我自己的體會是Wasm 沙箱帶來的不是“絕對安全”而是“把風(fēng)險邊界畫清楚了”。你能集中精力在導(dǎo)入函數(shù)的參數(shù)校驗上而不是天天擔(dān)心內(nèi)存被誰寫壞。4.3 一次編寫多處運行的邊緣側(cè)復(fù)用還有一個很實際的價值Wasm 的跨平臺能力不只是在“理論上能用”它真的能讓業(yè)務(wù)邏輯從設(shè)備端和云端共用。我在邊緣網(wǎng)關(guān)的方案里同一套 .wasm 規(guī)則模塊既被設(shè)備內(nèi)置的 WAMR 加載又上傳到服務(wù)器用 Go 側(cè)的 wazero 虛擬機做預(yù)演測試。兩邊的行為完全一致因為跑的字節(jié)碼是同一份。這種“跨端復(fù)用”最直觀的場景是規(guī)則引擎。你在 PC 上調(diào)試好一套數(shù)據(jù)處理流水線編譯成 .wasm放到 ESP32 上它能跑放到樹莓派上它也能跑放到服務(wù)器上用 wasmtime 跑也行。只要宿主側(cè)把標(biāo)準(zhǔn)接口實現(xiàn)好讀取傳感器、發(fā)送結(jié)果、寫日志這份 .wasm 就是一行都不改的通用資產(chǎn)。4.4 從“街機模擬器”到“ROS2 小車”熱門玩法背后的共同規(guī)律最近看到不少熱門項目正好能印證上面這幾條規(guī)律這里簡單拆幾個wasm 街機模擬器核心模擬器邏輯編譯成 .wasm瀏覽器里那個 JS 引擎負責(zé)加載執(zhí)行顯示畫面和音效走前臺接口。放到 ESP32 場景玩法其實是相似的模擬器核心可以 Wasm 化但屏幕驅(qū)動、按鍵掃描、音頻輸出必須由宿主固件提供。懂了這個邊界你就能明白為什么“純 .wasm 模擬器”在 ESP32 上跑不起來——你缺一個把像素推到渲染器、把按鍵送進模塊的宿主。ROS2 humble 串口橋接 ESP32 小車ROS2 的正式協(xié)議棧非常重直接塞進 ESP32 不現(xiàn)實。常見的做法是 ESP32 上跑一個精簡的串口橋接固件小車主控板通過串口發(fā)指令ESP32 轉(zhuǎn)發(fā)到電機驅(qū)動。如果你想加入 Wasm 層適合放的是上層決策邏輯——比如巡線算法、避障規(guī)則——這些邏輯由 .wasm 提供、通過宿主橋接固件控制電機而不是讓 .wasm 直接操作串口寄存器。Go 集成 wasm 虛擬機這更多是后端側(cè)玩法。邊緣網(wǎng)關(guān)上用 Go 寫管理服務(wù)里面塞一個 wazero 或 wasmtime-go用來給不同設(shè)備下發(fā)、執(zhí)行不同的 .wasm 規(guī)則。這種做法和你直接在 ESP32 里跑 wasm3 并不沖突相反它正好構(gòu)成了“云端統(tǒng)一下發(fā)—設(shè)備端熱加載”的完整鏈路。設(shè)備端跑 wasm 的宿主是 C 固件云端跑 wasm 的宿主是 Go 進程但兩份字節(jié)碼的接口定義是同一套。你看這些熱門玩法本質(zhì)上都繞不開同一句話.wasm 負責(zé)“決策邏輯”宿主負責(zé)“物理世界”。誰把這句話理解透了誰就能在 ESP32 上把 Wasm 用出真正的價值。5. 我把 Wasm 跑上 ESP32 的時間線以及踩過的坑5.1 運行時選型wasm3 和 WAMR 怎么挑這是所有項目起步都會遇到的第一個選擇題。我直接把實測結(jié)論放出來維度wasm3WAMRWasm Micro Runtime體積解釋器約 50KB 起步非常緊湊完整模式普遍 100KB 以上可裁剪性能純解釋執(zhí)行偏慢支持 AOT 編譯和快速解釋性能更好功能基礎(chǔ) Wasm 指令集簡單直接支持 WASI、多線程、內(nèi)存64位、AOT 等豐富特性移植成本極低一個文件就能跑有完整構(gòu)建系統(tǒng)需要熟悉它的配置維護狀態(tài)項目長期穩(wěn)定變化少Intel 持續(xù)維護活躍度更高典型定位快速原型、內(nèi)存極小場景產(chǎn)品級、需要 AOT 或 WASI 的場景我的經(jīng)驗是純研究、驗證想法先上 wasm3半小時就能跑起來做產(chǎn)品、且對性能和功能有更高要求的直接上 WAMR它的 AOT 模式能把執(zhí)行速度拉到你更容易接受的范圍。ESP32 這種資源受限設(shè)備不要一上來就上滿臉國產(chǎn)化的 WasmEdge 之類的重運行時內(nèi)存吃不消。5.2 最小可復(fù)現(xiàn)工程從 Rust 編譯 wasm 到串口打印假設(shè)你已經(jīng)配置好 ESP-IDF 或 PlatformIO 環(huán)境下面這條鏈路是我驗證過最順的本地裝 Rust執(zhí)行rustup target add wasm32-unknown-unknown。建一個 Rust 庫工程寫一個導(dǎo)出函數(shù)add(a: i32, b: i32) - i32cargo build --release得到lib.wasm。ESP-IDF 工程里加 wasm3 組件寫一段加載代碼從 SPIFFS 讀lib.wasm并調(diào)用add。在宿主的add返回處加日志打印驗證傳入?yún)?shù)和返回值都正常。燒錄后觀察串口輸出如果能看到正確結(jié)果說明整條 Wasm 執(zhí)行鏈路是通的。我第一次做這個實驗時卡在了 SPIFFS 分區(qū)沒配置這件事上。分區(qū)表里沒有 spiffs 分區(qū)fopen(/spiffs/lib.wasm)直接返回 NULL加載失敗。后來在partitions.csv里加了一行spiffs, data, spiffs, 0x200000, 0x100000,然后用idf.py spiffsgen生成鏡像并燒錄才真正跑通。這個細節(jié)看似簡單但非常容易漏。5.3 驗證細節(jié)RAM、性能數(shù)據(jù)、看門狗這些容易被忽略的點第一個只測了add函數(shù)的工程跑通后我去做了更貼近真實的數(shù)據(jù)測試。寫了一段循環(huán)計算分別用原生 C 和 wasm3 執(zhí)行記錄串口日志的時間戳算出來的性能差距大概是 8 到 12 倍。RAM 方面wasm3 在 8KB 棧配置下加上模塊實例和導(dǎo)入函數(shù)棧額外占了大約 20KB 到 40KB。這個量級對經(jīng)典 ESP32 來說還能接受但對 ESP32-C3 這種小內(nèi)存設(shè)備就要提前做減法了。還有一個特別坑的細節(jié)——看門狗喂狗。解釋器在跑一段很長的 Wasm 循環(huán)時會長時間占用 CPU中斷里喂狗可能來不及導(dǎo)致系統(tǒng)看門狗觸發(fā)復(fù)位。我當(dāng)時跑一個“計算斐波那契(32)”的 Wasm 測試程序執(zhí)行幾秒后整個設(shè)備重啟串口日志停在半路。排查了半天才想到是任務(wù)里的while(1)太長了把喂狗任務(wù)餓死了。解決方式有兩種一種是在宿主側(cè)把 Wasm 調(diào)用拆成可中斷的多次調(diào)用另一種是在 Wasm 里提供yield導(dǎo)入函數(shù)每跑一段就交回控制權(quán)給喂狗任務(wù)。這類問題在原生 C 里基本不會碰到因為它足夠快幾毫秒就跑完了可換成解釋執(zhí)行的 Wasm事情就變得不一樣。如果你把 Wasm 用在時間敏感的應(yīng)用里一定得把這個“長任務(wù)回讓”機制設(shè)計好否則設(shè)備會以你完全想不到的方式反復(fù)重啟。6. 常見問題與排查技巧實錄現(xiàn)象可能原因排查與對策燒錄 .wasm 后設(shè)備起不來把 .wasm 當(dāng)成 app.bin 燒進了應(yīng)用分區(qū)確認燒錄的是 ELF 轉(zhuǎn)換后的機器碼 bin.wasm 應(yīng)該放入 SPIFFS 或自定義數(shù)據(jù)分區(qū)m3_ParseModule返回錯誤運行時版本太舊不支持新 Wasm 指令特性更新運行時組件或限制 Rust/LLVM 編譯時不用新特性加載模塊時報 unresolved 導(dǎo)入宿主注冊的導(dǎo)入函數(shù)簽名與 Wasm 聲明不一致用wasm-objdump查看導(dǎo)入函數(shù)簽名逐一核對參數(shù)類型和返回值設(shè)備跑一段時間后看門狗復(fù)位Wasm 長任務(wù)占用 CPU喂狗任務(wù)被餓死提供yield導(dǎo)入函數(shù)或把 Wasm 調(diào)用拆成小步執(zhí)行SPIFFS 里明明有文件卻讀不到分區(qū)表沒有配置 spiffs 分區(qū)或鏡像沒燒進正確偏移檢查partitions.csv用parttool.py查看實際分區(qū)布局調(diào)用 Wasm 函數(shù)后返回值異常變參傳遞的問題或 WASM 棧和宿主?;煊媒y(tǒng)一使用顯式傳參數(shù)組例如 wasm3 的m3_Call(argv)方式云端用 Go 加載 .wasm 規(guī)則但行為和設(shè)備端不一致兩端運行時版本或特性開關(guān)不同固定兩端運行時版本必要時使用同一份字節(jié)碼做對比測試想用 .wasm 做某個外設(shè)驅(qū)動方向上就不對Wasm 沒有直接訪問硬件的能力外設(shè)驅(qū)動留在宿主原生層Wasm 只做策略層邏輯還有一些我在實際項目里總結(jié)出來的避坑心得可能比表格更有用所有導(dǎo)入函數(shù)必須做參數(shù)校驗。.wasm 側(cè)代碼不可完全信任你可能從網(wǎng)絡(luò)上下發(fā)它惡意或 buggy 的模塊傳一個越界 pin 值宿主如果不去校驗直接操作寄存器輕則驅(qū)動異常重則燒壞外設(shè)。我的習(xí)慣是每個導(dǎo)入函數(shù)入口先做范圍檢查非法參數(shù)一律返回錯誤碼。浮點運算能不用就不用。wasm3 這類純粹解釋器對f32、f64指令的處理效率很低我在性能測試?yán)锟吹礁↑c運算比整數(shù)運算慢更多。能轉(zhuǎn)成定點數(shù)運算的先轉(zhuǎn)成定點數(shù)再說。WAT 格式是調(diào)試神兵。我在排查 Wasm 模塊行為時經(jīng)常用wasm2wat把字節(jié)碼轉(zhuǎn)回可讀文本逐行查看指令。很多“宿主演繹錯誤”其實根本不是宿主代碼問題而是模塊邏輯本身就沒生成對看 WAT 一眼就能發(fā)現(xiàn)。善用wasm-tools/wasm-objdump驗證模塊結(jié)構(gòu)。燒錄之前先在本機把 wasm 文件解析一遍確認導(dǎo)出函數(shù)名、導(dǎo)入函數(shù)簽名都符合預(yù)期能省掉大量上板后的排查時間。另外如果你在一個邊緣網(wǎng)關(guān)上同時管理多臺設(shè)備Go 側(cè)建議優(yōu)先考慮 wazero純 Go 實現(xiàn)、零 CGO 依賴交叉編譯和部署都省心。還有人問我在服務(wù)器側(cè)用 wasmtime-go 還是 wazero我的答案很直接團隊里對 Rust 工具鏈?zhǔn)炀陀?wasmtime 追求性能想要部署零依賴、快速起服務(wù)wazero 更穩(wěn)。設(shè)備側(cè)和服務(wù)器側(cè)解耦設(shè)計后兩邊可以各自選型沒必須強行統(tǒng)一。最后說一點個人的總結(jié)性體會。我最初接觸 ESP32 上的 Wasm反復(fù)折騰性能總覺得它“慢、浪費內(nèi)存、不如直接寫 C”。直到我把思路從“用 Wasm 寫整個應(yīng)用”扭轉(zhuǎn)到“用 Wasm 承載易變業(yè)務(wù)規(guī)則、用原生代碼承載系統(tǒng)能力”之后真香。你手里那個 .wasm 文件不是終點它是你整個 ESP32 應(yīng)用架構(gòu)里的一塊拼圖。真正要花心思設(shè)計的是跑在它下面那層宿主固件是那些導(dǎo)入函數(shù)怎么裁剪、怎么校驗回傳是怎么在你改業(yè)務(wù)需求的時候不用重新折騰整個設(shè)備。想通這一點再回頭看標(biāo)題那個問題——一個 .wasm 文件確實還算不上真正的 ESP32 應(yīng)用它需要的東西比你以為的多得多但也正是多出來的這些東西構(gòu)成了嵌入式 WebAssembly 真正的價值所在。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久这里只有国产视频| 91色呦哟| http://www.lingjunshare.com/| 色爱综合五月| 婷婷综合仓库中文| 99激情视频| 99爱视频免费看| 激情综合色婷婷啪啪六月天| 久久婷婷五月天丁香| 婷婷综合网| 武则天精品久久| 六月婷综合| 草草操操| 天天综合色| 天天综合天天玩夜夜玩天天玩夜夜玩 | 99er6| 无码九九九九| 天天插操| 婷婷五月性感| 五月婷婷丁香91| 99热精品观看| 婷婷五月丁香五月| 中文在线成人| 另类图片激情五月| 中文字幕av久久爽一区| 婷婷99中文字幕| 五月激情婷婷开心| 97婷婷五月天| 丁香五月Av| 午夜九九电影| 天天撸夜夜爽| 这里只有免费的精品| 97人人操人人爽| 日本在线wwww| 久久久久久久久久久44| 大香AV| 91久女| 天天日夜夜| 日本超碰在线| 99热99色| 99久久国产宗和精品1上映| 九月婷婷色色| 亚洲中文乱字字幕在线永久| 99热在线播放| 超碰cap| 久久视频在线视频| 天天色2017| 9热网站| www久久久| 五月天色不卡| 亚洲乱码日产精品BD| 久久激情网| 爱久综合| 亚洲日韩一页精品发布| 久久综合久色欧美综合狠狠| 午夜]香婷婷深深爱| AA片在线观看视频在线播放| 真实的国产乱XXXX在线91| 国产婷婷色综合AV蜜臀AV| 六月色婷婷| 欧美槡BBBB槡BBB少妇| 天天爽天天爽| 丁香九月色| 婷婷久综合| 免费视频WWW在线观看网站| 图片区 小说区 区 亚洲五月| 26uuu国产| 久热这里只有精品99re| 国产AV熟妇人震精品一品二区| 亚洲欧洲另类| 人人草碰| 丁香五月AV综合| 99久久丝| 五月婷婷丁香综合网| www,天天干| 亚洲无码99| 九九色播五月丁香| 成人国产欧美大片一区| 激情婷婷综合网| 色噜久| 热99免费在线| 思思热精品免费视频| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 伊人激情| 超碰99成人在线| 97超级操操| 五月丁香成人| 婷婷激情社区| 欧美日韩精品人妻狠狠躁免费视频| 99色综合久久| 五月丁了香蕉综合| 欧美日韩成人在线网| 丁香五月色情| www.婷婷五月.com| 天天爽天天爽天天爽天天爽天天爽天天爽天天 | 欧美性猛交99久久久久99按摩| 丁香8月手机综合| 任你干嘛免费视频播放| 秋霞电影理论| 婷婷精品| 色婷婷视频| 青青福利网| 婷婷六月丁香五月| 伊人激情AV一区二区三区| 综合另类激情| 五月婷在线色视频| 狠狠狠狠狠狠| 99热自拍| 99综合一区| 国产精品久久久久9999小说| 91色综合| 97热这里精品在线视频| 丁香婷婷午夜| 天天色天天色天天色天天色天天色| 色婷婷成人网| 无码yw| 亚洲综合五月天综合| 色爱亚洲| 五月丁香亭亭A片| 色婷婷久久| 99久久6| 五月丁香久久| 天天综合激情| 日本丁香五月| 性一交一乱一交A片久久四色| 五月天久久综合婷婷丁香| 婷婷色五月丁香六月欧美啪| 啪啪综合| 久久精品99| 91丨九色丨老熟女激情| 丁香五月激情视频| 国产九月婷婷| 丁香五月天在线| 久久久国产精品黄毛片| 久草久青福利| 偷偷与邻居做爰完整视频| 亚洲综合999| 五月婷婷激情综合拍| 婷婷五月天堂| 思思网站| http:色情日本com| 日日射天天射| 大香蕉伊人丁香五月| 婷香五月网在线| 久re热视频| 另类图片五月天激情| www·五月天| 狠狠操狠狠操AV| 激情综合99| av操一操| 欧美天天搞| 啄木鸟丝袜美女福利视频| 欧美私人家庭影院| 99热中国| 丁香五月先锋| 日韩色色视频| 6080av| 亚洲亚洲人成综合网络| 99爱免费在线视频| 久9热插入| 亚洲人人操BD| 色色综合激情| 丁香六月啪啪| 婷婷色基地| 影音先锋91男人资源在线播放| 久久A V无码视频| 99草在线免费观看视频| 五月婷婷激情综合av| 高清 码 免费看片短视频| 五月天婷婷成人网| 婷婷五月综合婷婷| 日本www免费九九| 婷婷六月天亚州| 91大屁股在线| 婷婷五月丁香久久| 思思re视频在线| 百度一下国产精品A| 五月婷婷丁香六月在线| 日本一级大片| 日韩色色视频| 婷婷丁香五月高清| 亚洲成人网站在线观看| 色婷丁香91| 噜噜色噜噜网| 丁香五月1页| 26uuu| 欧美天天综合网站上去吧| 亚洲字幕AV一区二区三区四区| 天堂草在线观| 性爱网久久| 亚洲热久| 丁香五月花婷婷开心| 无人区码一码二码三码医生系列| www.国产色| 丁香玖玖| 国产又爽又猛又粗的视频A片| 久久思思热视频| 91免费啪视频| 五月天婷婷在线视频| 天天成人五月天| 欧美精品狠狠色丁香婷婷| 五月婷婷六月激情| 色婷婷成人影片| 天天色凹凸| 日本系列_4页_777FP| 丁香五月六月久久综合 | 婷婷五月伦理网站| 婷婷五月天成人在线视频| 久久精品99国产精品日本| jiqingliuyuetian| 都市激情五月婷婷综合| 日韩一级A片黄色| 欧美日韩999| 婷婷五月丁香在线视频| 97深爱伊人综合| 久久大香蕉视频| 少妇高潮A片无套内谢麻豆传| 91wwmm导航| 只有精品在线观看| 91九色精品女同系列| 91蝌蚪窝视频在线| 免费无码毛片一区二区A片| 精品色| 在线五月色播| 五月天色播网| 丁香色五月直播| 久碰久| 五月婷婷六月激情| 成人av免费观看| 色激情五月天| 亚洲国产精品VA在线看黑人| 五月天激情视频五月天| 天天爱天天做天天爽| 四虎成人精品永久免费AV九九| 99热有精品在线观看| 色五月婷婷丁香五月| 狠狠五月激情丁香六月| www.五月天激情| 色婷婷在线综合色播网| 色丁香五月天射婷婷爱婷婷| 99热精品在线观看| 激情五月开心五月在线视频| WWW色综合| 丁香色五月 97干| 在线不卡中文字幕| 色色婷婷色色| 婷婷 伊人 久久| 91五月花丁香| 五月丁香婷婷99| 婷婷五月激情综合网| 中文字幕无码人妻少妇免费视频| 风流少妇A片一区二区蜜桃 | 99色色热| 开心亚洲久久开心| 久久有码| 狠狠色噜噜狠狠| 五月丁香六月激情综合在线| 五月丁香花婷婷玉莉AV| 99热这里只有精品在线| 神马欧美精| 操逼巨乳91| 天天搞天天爽| 综合色情网| 男女99免费视频| 97操碰视频| 99久在线观看| 婷婷五月天网| 色婷婷色丁香色欲av| 96丁香婷婷九月蜜桃综合久久| 婷婷丁香社区| 丁香五月天亚洲综合| 色色网91| 色九月婷婷| 人妻操逼视频。| 久月丁香爱婷婷综合| 99rewww| 丁香婷婷久久激情| 这里只有精品免费| 免费亚洲婷婷| 五月 婷 久| 婷婷五月综合啪| WWW色色色COm| 婷婷五月天激情综合| 激情亚洲色图片丁香综合| 久久人妻人人槡| 五月激情婷婷国产精品久久久久久| 夜夜爽天天爽| 99久久综合网| 亚洲色色五月| 色婷婷成人丁香| 久久婷婷五月天激情| 这里只有免费精品| 激情色播| 婷婷日韩| 伊人五月天日日夜夜久久久天天| 九九精品网| 九热视频在线精品15| 99精品热| www.五月丁香| 天天日夜夜操五月| 亚洲超碰在线| 97色综合视频| 色婷婷五月天激情久久| 亚洲色图五月丁香| 色色色色色色综合网| 婷婷色五月天色色| 国产性色蜜乳| 五月丁香婷婷六月| 丁香五月婷婷亚洲色图| 五月婷婷激情69| 色婷久| 国产又黄又爽又色的免费| 丁香啪啪中文字幕| 日日色五月天| www色色色com| 九色 在线| 五月开心六月婷婷在线播放网站| 五月婷婷啪啪啪| 九九九激情综合| 婷婷五月激情欧美| 思思热久热| 九九热精品| 欧美 日韩 成人| 五月天婷婷网站| 猫咪伊人久久| 日韩xx在线| caopeng97日韩| 91久久久久久久| 啪啪色激情五月天| 亚洲色激情| 激情第四色| 五月综合丁香婷婷| 丁香五月六月| 日韩无码乱轮| 开心激情网五月| 曰韩少妇内射免费播放| 99re6热在线精品视频播放速度| 激情综合网五月天| 婷婷五月a| 偷拍视频五月天| 99视频只有精品| 色色狼人综合| 色情五月天丁香社区| 六月丁香AV| 天天干肏夜夜| 久久丁香综合香蕉| 色欲五月婷婷| www.色欲丁香婷婷| 99热这里只有精品搜| 欧美成人AAA片一区国产精品 | 激情综合色婷婷六月天| 色啪久| 天天色色婷婷| AV操一操| 99这里只有精| 欧美色色色色色色色色色色| 婷婷情色五月天| 草榴视频网| 99热思思| 欧洲亚洲免费视频9| 丁香六月婷婷久久综合| AA久久| 中文久久婷婷| 亚洲五月婷婷| 开心激情站| 丁香婷婷人妻综合网| 天天日天天插| 这里只有精品2| 婷婷色色丁香| 午夜色婷婷| 天天情天天狠天天透| 久久九九99| 思思热久久阴99| 婷婷六月色| 玖玖精品视频99| 日日夜夜九九| 99热久草| 天天日狠狠| 亚洲精品国产A久久久久久| 影音先锋 婷婷| 久久玖玖99| 久久亚洲无码| 五月丁香六月激情综合啪啪| 五月综合激情网| 六月综合在线| 久久久婷婷| 五月天电影网| 九九大香蕉黄色影院| 色婷操逼| 五月丁香婷婷伊人| 91人人网| 视频这里只有精品16| 97色五月丁香婷婷| 丁香六月婷婷综合| 99热这里只有的精品视| 色婷婷久久综合| 天天操综合网| 亚州色色色| 久久综合无| 久久久GOGO无码啪啪艺术| 亚洲十月婷婷综合| 久大香蕉| 超碰在线网站9| 天天干天干| 久久综合爱| 538在线精品| www.99热| Va另类视频| 色婷婷超碰| 国产精品VIDEOSSEX久久发布| 婷婷五月激情视频| 十月丁香婷婷| 成人av在线网址| 欧美性猛交99久久久久99按摩| 婷婷五月花| 噜色精品| 日韩免费乱轮网站| 991国产精选视频在线播放下载| 99爱在线视频| 色三级色三级| 婷婷丁香五月色| 色八月婷婷| 大胆伊人久久| 人五月天婷婷喷水| 202丰满熟女妇大| 色九九九九| 开心五月深爱五月婷| 六月激情婷婷| 欧美超级视频97| 91919191919久久成人视频| 亚洲色夜| www.婷婷五月天| 五月婷婷综合色啪首页| Av性爱网站| 欧美在线看| 五月丁香 狠狠爱| 99热国产| 97碰在线视频| 色墦五月丁香| 成人av在线电影| 五月天激情久久| 六月丁香婷婷在线波多| 色五月视频无码播放| 久久9视频| 丁香密臀AV激情网| 九月婷婷在线观看| 色婷婷精| 9 大屁股在线视频精品| 久久久.www| 天天狠狠综合精区| 综合色在线| 五月天婷婷色| 日本欧美成人片AAAA| 五月婷色| 欧美色色色| 激情综合亚洲| 26uuu成人网| 九九re精品视频在线观看 | 97色碰| www,色婷婷| 婷婷五月免费视频| 五月天操逼网| 婷婷99| 九九亚洲视频| 这里只有精品久久| 91色呦哟| 七七色综合| 天天久久九九| 成人在线高清| 久久久香| 丁香六月AV| 丁香六月天AV| 久久这里只有国产视频| 六月婷婷中文字幕| 色狠狠综合| 九九99精品视频在线观看| 婷婷天堂综合| 无码日本精品XXXXXXXXX | 极品少妇XXXX精品少妇偷拍| 日韩欧美成人网| 丁香六月天婷婷| 久久五月天网| 99操99| 高清无码.com| 丁香婷婷在线| 中文字幕综合| 曰韩少妇内射免费播放| 日本操B片| g00d人体西西| 如何安全看伊人婷婷| 六月色日韩| 婷婷激情丁五月| 五月天天天色| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 色操综合| 中文AV在线播放| 丁香六月天婷婷在线| 综合视频五月| 综合久久97| 婷婷久久五月天| 丁香五月伊人| 26UUU一区二区| 九九热短视频在线观看| 婷婷丁香97| 99热在线观看| 激情 婷婷| 亚洲激情99| 另类综合婷婷五月天欧美视频| 日本WWW九九九| 色播五月婷婷| 欧美婷婷丁香五月| 婷婷色播六月无码| 婷婷丁香五月色| 久草五月天| 91女人18毛片水多国产| 婷婷六月激情小说网| aaa日韩| 9|无码久久久久久| 婷婷字幕在线| 丁香五月图片| 香焦网五月天| 91无码一起草| 激情丁香婷婷五月天| 久久婷婷成人综合色怡春院| 五月丁香六月激情| 亚洲最大在线| 色噜噜狠狠一区二区三区| 久久xxxx| 超碰在线99热| 亚洲亚洲永久无码777777| 天天干天天干天天干| 久久网婷婷| 亚洲激情五月婷婷日日| 色色婷| 日本久久9| 色情五月天se| 激情综合婷婷| 亚洲精品视频在线| 五月天色综合| av线电影| 婷婷五月天小说网| 亚洲精品第一国产综合亚AV| 啪啪婷婷五月天激情| 97干视频| 亚洲AV第二区国产精品| 丁香五月六月综合欧美| 日日操无码| 丁香久久五月天视频在线观看| 99精色| 肏屄色播伊人97婷婷| 色色欧美色色| 91色性感五月婷婷丁香| 五月综合六月丁| 久久婷婷六月综合综合| 久久草人妻| 亚洲综合九九| 色婷五月| 激情小说五月天| 天天日夜夜欢| 天天综合网91| 五月色婷| 狠狠狠狠狠狠| 这里只有精品视频国产| 久久激情综合| 婷婷六月网| 色偷偷AV亚洲男人的天堂| 国产99美少妇| 中文字幕丰满孑伦无码专区| 日本成人噜噜噜噜噜| 亚洲亚洲人成综合网络| 亚洲男人的天堂婷婷色五月| 丁香婷婷六月| 九九无码| 婷婷色色五月天| 五月停亭六月,六月停亭的英语| AV在线中文| 激情综合无码| 色久婷婷网| 少妇出轨做爰高潮A片| 天天日人人爽| 伊人大蕉香| 激情图片婷婷丁香五月| 99精品在线观看| 91九色精品熟女内射| 天天日夜夜高潮| 专区无日本视频高清8| 亚洲狠狠狠色婷婷综合激情久久久| 熟女少妇内射日韩亚洲| 99精品视频网站| 五月丁香六月婷婷久久肏| 五月丁香婷婷色色| 亚洲色婷婷网站| 九色综合五月天婷五月| 99热免费精品| 国产色色网址网站| 婷婷婷五月香蕉| 五月丁香六月婷婷久久肏| 亚洲综合九九| 精品视频二级九九| 九九九九综合| 欧美婷| 婷婷五月无码| 性无码专区无码| 人人妻久久妻| 桃色Av色哟哟| 日本nghangse中文字幕| 婷婷丁香人妻天天爽| A色色| 久久一级片| 九九视频这里有精品| 亚洲人成人五月天| 亚洲旡码| 婷婷伊人五月天| 色婷婷偷拍| 六月婷婷视频| 97婷婷在线视频| 婷婷五月天基地| 色色综合网络| 夜夜躁狠狠 | 综合五月天婷婷色| 婷婷五月丁香五月| 五月天丁香欧美激情| 婷婷丁香人妻天天爽| 26uuu欧美激情另类| 91人妻人人做人碰人人爽九色| 午夜天堂一区人妻| 97狠狠色| 久色婷婷200| 99热6这里之有精品| 玖玖色资源| 免费黄网不卡AV| www久久99| 五月开心激情| 婷婷丁香成人网址| 99re这里只有精品9| 亚洲情欲久久| 久久caop| 中文字幕人妻熟女在线| 9色在线| 丁香婷婷影院| 狠狠操狠狠做| 五月婷婷综合色啪首页| 五月六月播婷婷| 丁香五月天婷婷91| 国产激情一区| 韩日另类| 丁香五月社区| 99激情| 五月丁香久久久久| 天天色视频| 伊人色欲五月天| 免费的日逼视频| 大香蕉五月天| 爆乳熟妇一区二区三区爆乳照片| www.91在线看| 婷婷激情啪啪| 亚洲AV永久无码影院黑人 | 婷婷涩涩网| 97干97色| 第五婷婷伊人丁香色| 婷婷丁香黄色| 9色免费网| 99视频免费播放| 亚洲妇女熟BBW| 荡乳尤物3HP1V5| 久久久中文| www.色综合| 亚洲天堂99| 久久这里只有精品热在99| 久久激情网| 成人短视频在线| 九九AV在线| 欧洲综合视频| 婷婷99| www.婷婷五月| 五月丁香综合| 98国产精品综合一区二区三区| 中文字幕成人| 亚洲乱码日产精品BD| 国产黄色在线观看| 亚洲中文AV| 色五月色情| 人人看人人97| 久久婷婷色色| WWW.激情| 狠狠插狠狠| 99er精品视频| 91成人电影| 五月婷婷色| 99精品在线| 九九婷婷激情综合网| 日本道久久91| 婷婷射综合| 思恩热国产视频右线观看| 成人视频九九| 婷婷五月天综合色| www.久久爱.com| 久久免费精彩视频| 9热超碰| 韩国19 主播内部福利vip免费播放| 婷婷内射视频在线| 丁香激情五月综合网| 久色网五月| 亚洲另类视频| 性综合网| 五月色情婷婷| 美日韩成人| 激情五月六月丁香| 久久综合影院| 国产乱人偷精品人妻A片| 182.t午在线观看| 玖玖激情五月天| 亚洲激情无码久久| 色99在线观看| 色婷婷电影网| 人人干人人操外国| 亚洲美女婷婷五月天| 99在这里有精品| 97干97色| 色色丁香婷婷五月天| 日本啪啪网| 涩涩婷婷五月| 99ri在线视频| 七七久久婷婷| 久久成人性爱| www99在线观看视频| 色欲一区二区三区精品A片 | 涩丁香91| 丁香五月天信号| 99精品在线观看视频| 欧美人与性动交CCOO| 婷婷之玖玖| 成人婷婷五月天| 综合性爱网| 综合福利网| 大香蕉久久伊人婷婷五月丁香| 华人在线免费| 午夜天堂一区人妻| 97精品在线| 天天天操天天天日| 涩涩五月天| 色婷婷9| 丁香六月久| 亚洲色五月| 婷婷爱爱蜜臀天天操| 婷婷丁香五月天在线| 人人爱人人草| 丁香婷婷六月天| 五月丁香啪啪伦理电影| 国产精品久久久爽爽爽麻豆色哟哟| 超碰色综合| 美女五月狠狠| 91欧美日韩| 翔田千里无码| 无码AV免费精品一区二区三区 | 97热精品| 天天做天天爽| 五月婷婷黄色毛片| 五月播播| 丁香五月激情五月| 欧美性爱5月天天天看| www.狠狠操| 久思思久视频| 亚洲第一第二网站| 亚洲成人一区| 五月婷婷丁香综合| 97精品欧美91久久久久久久| 五月丁香色婷婷色| 黄色一级影片| 婷婷五月天亚洲综合| 激情丁香久久久久久| 国产婷婷五月色情综合| 丁香五月婷婷高清| 天天插天天插天天插天天插| 日本偷拍九九九| 香蕉AV777XXX色综合一区| 超碰人人插| 丁香婷婷五月基地| 丁香五月婷婷激情中文| 亚洲视频99| 婷婷丁香综合| 色情久久久| 婷婷的99视频网站| 操骚货在线| 亚洲激情 久久| 激情婷婷五月天| 五月婷色丁香| 9|人妻人人操| 日欧大屏操| 99久久玖玖| 亚洲啪啪视频| 丁香五月在线视频| 日本操B视频在线观看| 五月色俺婷婷| 97在线日本| 久久五月激情| 综合激情啪啪| 五月丁香亭亭激情操逼网| 亚洲色 视频| 色婷婷色| 五月丁香婷婷综合网| 99成人网站| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 第四色五月婷婷| 久久激情五月| 亚洲综合五月天综合| 91碰操| 婷婷色丁香五月| 激情五月伊人婷婷| 色五月色开心开心五月| 67194中文字幕| 久久精品爱爱| 九月婷婷人人操人人舔人人爱| 另类激情综合| 天天操夜夜爽天天操| 免费黄网不卡AV| 亚洲综合五月| 看黄的网站18禁| 亚洲mm免费| 五月天丁香久久| 五月婷婷久久开心网| 狠狠色狠狠色综合日日91| 婷婷综合精品| 激情五月天免费视频| 99视频91| 另类小说五月天| 婷婷六月综合激情| 丁香五月婷婷亚洲色图| 综久久久| 亚洲色五月| 噜噜狠狠色综无码久久合欧美| www.99在线| 色99久草在线| 久久丁香五月天| www.henhengan| 丁香五月在线伊人| 在线99色| 精品欧美一区二区三区久久久| 色五月婷婷基地| 狠狠va| WWW.久久久久久久| 欧美久久九九| 欧美99热| 任你爽精品免费视频6| 丁香五月亚洲综合| 另类在线| 国产精品国产| 99热有精品在线观看| 色情五月婷婷| 五月婷婷啪啪综合网| 天天干天天干天天干天天干天天干天天 | 麻豆雪千夏| 四色女婷婷| 九九热这里只有精品5| 岛国资源站| 激情操逼婷婷| 五月天丁香网| 色色免费网站| 天天插天天插| 色婷婷丁香香香蕉视频| 九九视频这里是精品五月| 婷婷五月综合啪| 狠狠色激情在线| 九九色之九九色88| WWW、日本色丁香、co m| 99re热视频这里只精品| 激情五月婷婷五月丁香五月开心五月| 色的色综合| 天天色天天爽| 丁香五月婷婷狠狠色| 五月丁香少妇| 丁香狠狠操| 日韩一级淫乱片一区二区三区| 在线只有精品| 日本狠狠色| a在线观看| 香蕉国产2013| 亚洲一区二区无遮挡A片| 99综合激情久久精品久久| av中文字幕免费观看| 亚洲精品无码一区二区| 欧美色色色色色| 97碰啪啪| www狠狠| 久久色区| 中文字幕在线免费观看视频| 午夜成人天堂久久无码日韩久久| 欧美色五月| 狠狠狠狠狠| 伊人色综合网| 久久精品系列| 激情五月色婷婷| 很很干天天干| 丁香五月社区| 婷婷成人AV| 六月丁香色色| 丁香综合网| 99热手机在线精品| 天天色播| 91人人人人人| 丁香五月婷婷综合激情哟哟哟| 99热草草| 五月激情婷婷四射| 99玖玖人人| 久久婷婷五月综合精品蜜芽| 久久性视频| 久久久久久久综合狠狠综合| 日本在线免费中文com.| 亚洲成人乱码av网站| 亚洲五月天婷婷在线| 五月激激激情综合网| 野战毛片三一3| 国产三级片91| 五月天婷婷在线播放| 五月天色综合| 婷婷六月天国产综合| 久久五月情| 亚洲视频五区| 婷婷丁香五月视频| 激情五月四色| 91碰碰视频| 激情综合亚洲| 国产av第一专区| www,色婷婷| 久久99这里只有精品| 第四色婷婷色五月| 五月天啪啪啪| www.久久99| av中文字幕免费观看| 五月天大香蕉AV| 亚洲综合字幕色色| www.六月丁香看AV| 六月丁香婷婷综合狠狠爱夜夜爱| 六月丁香网| 色亭亭九月| 婷婷成人综合| 色婷婷五月天激情综合| 亚洲精品色| 97福利视频| 九九激情| 久久66er久久| 五月丁香在线看| 婷婷五月天丁香| 国内自拍97在线| 操B五月天| 99热这里只有精品50| 97色色网| 中文字幕日产A片在线看| www.AV在线| 色五月婷婷在线视频| 天天做天天爱| 无码AV免费精品一区二区三区| 色综合色婷色基地| 五月天色狠狠| 六月份天丁香婷婷| 日本精品人妻无码77777| 99人人操人人操人人精| www,色中色| 婷婷丁香五月麻豆| www,99色| 六月激情婷婷综合| 婷婷丁香五另类网站| 九九色婷| 综合欧美五月婷婷| www.夜夜操| 一二线视频 另类| 中文字幕不卡+婷婷五月| www.亚洲激情| 99色色| 亚洲天99| 色色色成人网| 日韩成人中文| 天天操夜夜啊| 久99久视频| 中文字幕性爱视频| 婷婷五月天在婷| 天天干天天干天天干| 久超超碰| 99热激情| 丁香五月婷婷五月基地| 婷婷久久国产视频| 天天爽天天日| 91色色色18| AV性爱网| 色婷婷色综合| 丁香五月婷婷欧美成人色图| 综合五月天| 99热在线爱| 色婷婷电影网| 丁香五月婷婷AV| 久草狼人| 五月婷婷婷| 久机视频这只有精品| 97人碰人操| 成人网丁香五月| 色噜噜狠狠色综合日日| aaa丁香五月天| 免费黄色片子| 99热在线精品观看| 色九月婷婷丁香| 久久婷婷亚洲无码一起| 99热精品中文字幕| 色级婷婷| 激情六月综合| 五月丁香六月婷婷的女人| http://www.sd-xiangsu.com/| 香蕉婷婷五月| 日日做夜夜爱| 国产特黄色精品一区二区三区精品无广告| 色综合久久天天综合网 | 国产成人+综合亚洲+天堂| www.色色五月天.com| 综合一区二区三区| 狼人狠狠操| 色综合久久天天综合网| 色丁香五月婷婷| 色色色色色热| 色五月网址| 色综合播放| 在线18av | 人人干AV| 狠狠爱丁香婷| 丁香五月手机在线| 亚洲综合草草| 天天日夜夜拍| 少妇激情五月婷婷| 九月丁香久久网| 婷婷六月五月| 超碰在线中文字幕| 综合色久| 五月丁香激情婷婷综合字幕| av免费在线看不卡无毒| 79精品视频| 在线观看亚洲AV| 久久9久| 九九热10| 日本波多野结衣视频| 激情五月天婷婷五月天| 亚洲AV中文在线| 99精品免费| 久狠日av| 日本色99| 白人荫道BBWBBB大荫道| www,99热| 色婷婷狠| 做爰丰满少妇1313| 欧美xx激情视频在线观看| 六月丁香综合| 97精品人人A片免费看| 99re思思久久| 亚洲永久免费| 婷婷丁香五月天综合激情| 99热激情| wwW天天干| 日本在线观看aaa 99| www.91.com黄| 99精彩视频在线观看| 九九九午夜视频| 亚洲va综合va国产va中文| 久久aaaa片一区二区| 久久9热| 国精产品一区一区三区免费视频| 激情五月丁香五月| 99re思思热在线视频| 伊人婷婷99热精品| 久久9久| 婷婷六月伊人| 五月丁香婷婷色| 国产免费一区二区三州老师F1……| 国产.亚洲.欧洲视频在线| 激情五月综亚网| 婷婷99狠狠躁天天躁中文| 国产欧美精品AAAAAA片| WWW.桔色成人.COM| 五月的婷婷六月丁香| 97色色婷婷五月天| 丁香婷婷老熟女综合网| 99人妻碰碰碰久久久久禁片| 丁香五月婷婷欧美成人色图| 亚洲中文字幕网| 激情五月婷色| JAPANRCEP老熟妇乱子伦视频| 六月婷婷色综合| 人人爽人人爽人人爽人人爽| 殴美日比视频| 综合激情九月婷婷,激情综合婷婷中文字| 亚洲操B| 日本爆乳片手机在线播放| 第四色婷婷色五月| AV大香蕉| 日本色色网站| httpwww色com日本| 婷婷伊人綜合中文字幕| 99操无码视频观看| 激情五月综合网最新 | 五月丁香六月婷婷在线播放| 99久久亚洲精品视频| 热久69| 九月停停| 国产AV影片| 亚洲综合激情五月久久| AV在线免费网站| 韩国激情五月天综合网| 另类综合网| 日本五月丁香| 狠狠看狠狠| 9久久精品| www.97碰碰com| 91久久九色| 97超碰9久热婷婷热| 日韩AV免费看| 日本欧美成人片AAAA| 99热伊人| 91美女被操| 91成人电影| 人人操AV| 五月在线| 五月丁六月香| 婷婷色欧美激情| 怡红院精品视频久久久久久久久| 狠狠色综合777| 台湾综合丁香五月蜜桃| 91蜜桃婷婷狠狠久久综合9色| 中文字幕,综合,91| 99热线观看9| 色播五月综合网| 亚州激情九月| 毛v一区二区视频| 超碰99热在线观看| jiuse91在线| 九九热99精品| 吾爱AV导航| Www.狠狠| 天天综合色丁香| 婷婷五月丁香91| 日日噜噜夜夜狠狠久久丁香六月| 久操福利| 丁香婷婷久久| WWW·天天操·视频?| 婷丁五月| 天堂五月婷婷| 99视频精品8| 99热只有这里才是精品| 九九热精品6| 欧美中文五月天| 99精品国产在热久久婷婷| 秋霞成人毛片一级A片| 色狠狠综合| 婷婷在线视频| 丁香五月天久久| 九一牛视频探花| 67194中文字幕| 九月影院義母在线播放| 日本片日本片祼观看网站在线看中文版网页在线看 | 99ri6在线视频| 98色丁香五月婷婷综合网| 婷婷五月天综合久久| 天天情天天狠天天透| 五月激情开心婷婷| 色婷婷基地| 九九99精品视频| 五月天桃色深爱网| 野战J办公桌椅H| 狠狠色噜噜色狠狠狠综合色 | 丁香五月开心婷婷| 色色欧美。| 综合久久综合五月天婷婷| 色综合色综合色综合| 丁香九月综合激情| 77799热| 久热精品视频| 夜色综合网| 99热99色| 黄色片avv| 99热免费精品| 天天摸天天舔天天爽| 色五月婷婷丁香五月| 97人人干人人操| 欧美69久成人做爰视频| 激情骚五月| 婷婷激情伍月网| 五月天久久丁香| 婷婷久久五月| 色和综合网| 999激情视频| 熟女五月天久久综合| 亚洲激情五月| 婷婷色导航| 婷婷人妻激情| 久久久色婷婷五月天| 丁香六月婷婷激情| 五月丁香成人网| 婷婷五月天亚洲综合网| 久久婷婷五月天懂色| 丁香五月丁香伊人| 色99在线视频| 久久婷婷原创视频| 日日爱678| 婷婷成年人免费视频| 色九月| 国产三级片91| 婷婷六月中文字幕| 色爱综合网| 在线一起草av| 超黄亚洲瑟瑟网站| 丁香婷婷色情| H亚洲| 2050人人操免费工开爱| 日本爆乳片手机在线播放| 91男同视频| 开心五月激情网| 五月天啪啪啪| 日本乱子人伦在线视频| 色色爽爽天天| 99热这里只有精品66| 八戒青柠影视剧在线观看| 人人妻人人澡| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 狠狠狠婷婷五月综合| 久久久婷婷五月亚洲97号色| 丁香五月欧美婷婷综合| 婷婷亚洲五| 99精品热视频| 无码九九九九| 久久婷婷五月天激情唯美| 激情五月天丁香| 久久久www| www.五月天婷婷| 日本三级日本黄色| 99久久思思| 色色五月丁香| 激情五月综合网| 婷婷五月综合社区| 激情久久婷婷| 五月丁香六月婷婷综合| 久久无码成人| 五月激情精品视频| 九九热免费视频| 九热视频| 99在线热| 超碰不卡在线| 五月天婷婷基地| 色五月开心久久网| 激情五月综合网最新 | 99视频这里有精品| 久热在线观看视频9| 99热这里只有精品最新| 超碰日韩成人| 五月天激情国产综合AV| 性色做爰片在线观看WW| 日本人妻丁香婷婷久久寝取熟女五月| 五月亭亭六月天| www久久99| 五月丁香啪啪网| 婷婷综合五月| www,天天干| 性爱AV天堂| 狠狠综合| 亚洲综合网激情小说| 丰满老熟妇BBBBB搡BBB| 日日噜噜久久婷婷五月天 | 五月丁香在线视频观看| 激情伊人五月天| 狠色狠色狠狠色综合网| 精品亚洲国产成AV人片传媒| 91啪级电影|