免费国产精品自在自线-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
返回資訊列表
日日干日日| 美女xx不卡| 五月丁香啪啪啪啪| 亚洲精品影视| 欧美婷婷综合| 日本欧美成人片AAAA| 久久A V无码视频| 婷婷无码视频| 丁香激情五月少妇| 久久久久久久11111111111| 女人天堂 AV| 激情综合久久| www.五月丁香| 婷婷五月天性爱视频| 婷婷色五月丁香六月欧美啪| 婷婷五月色激情欧美激情| 十月丁香婷婷| 亚洲另类婷婷五月丁香在线播放| 另类激情码| 香蕉人妻AV久久久久天天| 99九九综合久久九九| AⅤ色区| 五月天久久www| 99热香港| 婷婷亚洲在线| 婷婷五月丁香综合网| 丁香婷婷大香蕉| 日韩在线五月天婷婷| 看婷婷五月天网| 日韩三及成人AV片| 色婷婷五月影视| 天天射天天插天天干| 国产亚洲色婷婷久久99精品91| 91久久婷婷人人澡草| 九九99视频精品| 五月天婷婷綜合院| 91精品人妻少妇无码影院| 91热视频| 色天堂在线| 天天插天天射| 中文字幕五月久久婷| 国产无遮挡又黄又爽免费网站| 日韩av在线电影| 在线1青婷| 丁香婷婷五月天色播| 丁香五月天激情网址| 狠狠五月激情丁香六月| 欧美视频五区| 九九香蕉网| 超色欲天天| 婷婷丁香精品视频在线观看| 秋霞网在线免费基地五月婷婷丁香| 日本熟妇乱妇熟色A片蜜桃| 五月丁香六月激情| 激情五月激情综合网| 91热99| 色噜噜狠噜噜视频| 日韩爱操视频| 26uuu精品一区二区| 亚洲色a| 色爱综合视频| 天天舔天天摸天天透| www,欧美干干干干干干| 66精品成人免费网站在线观看| 久色视频首页| 激情婷婷色五月| 色五月天本日| 超碰com| 婷婷五月色综合| 大天天伊人| 婷婷九月丁香| 99色婷婷| 9热网站| 婷婷五月激情黄色| 五月婷婷六月丁香首页| 草综合网| 六月婷婷私欲| 伊人五月天在线| 天天插天天插天天插天天插| 人人综合久| 丁香色综合| 色丁香五月天射婷婷爱婷婷| 五月丁香婷色| 激情五月丁香六月| 成人午夜无码视频| 天久综合91综合首页| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 婷婷五月天性| 婷婷亚洲在线| 午夜激情婷婷| 九九色情网站| 99riAV国产精品视频| 91chinese 在线| 亚洲综合婷婷五月| 第一区久久网站| 婷婷五月亚洲一本在线丁香| 五月丁香六月激情综合| 欧美交换配乱吟粗大25P| 成人中文网| 色呦呦在线| 91人碰| 亚洲欧洲99| 婷婷五月天com| www婷婷| av狠狠操| 51XX嘿嘿午夜无码| 欧美性丁香色色五月天综合爱爱| 五月天成人在线视频网站| 日本高清久| 第五色婷婷| 天天操夜夜肏| 超碰在线免费| 免费V片在线| 99九九综合久久九九| 婷婷欧美偷拍综合| 五月天婷婷乱论小说| 99久久99九九99九九九| 99热免费18| 婷婷在线综合| 婷婷开心五月| 日本色99网站| 久久久中文| 久久伊人日日夜夜| 丁香五月成人社区| 操逼巨乳91| 精品人妻伦| www.国产色| 色色色色色色网站| 婷婷内射视频在线| 久久久精品色色色| 午夜伊人大香蕉| 人妻久久婷婷| 开心深爱激情网| 婷婷色婷婷| 69人妻人人澡人人爽久久| 激情精品久久| 五月婷婷色色| 婷婷五月香蕉| 精品爆操| 婷婷五月丁香国产| 婷婷五月开心中文字幕在线| 丁香五月影院| 开心五月激情| 五月丁香六月在线欧美| 能看的AV| 99啪视频在线观看| 五月婷婷开心亚州在线| 大伊香蕉精品视频在线| 婷婷五月天成人娱乐| 五月综合无码| 色婷婷女优有码五月亭| 五月丁香在线看| 国产日韩精品SUV| 婷婷色导航| 五月婷婷激情综合av| 九九热狼人| 综合五月草| 五月丁香花视频| ztEJj| 亚洲色婷婷婷婷人人爽| 内射爽无广熟女亚洲| 99福利导航| 99久久网站| 超极99精品| 五月丁香在线精品| 在线看片h站| 激情综合4月| 色色免费网站| 婷婷99狠狠| 婷婷五月天激情电影| 在线亚洲综合| 久久综合天天综合| 精品国婬伦V无码久久久| 五月丁香六月婷婷色| 丁香五月综合| 丁香五月98| 91狠狠综合久久| 性爱综合网| 人妻AV在线观看| 欧美日韩国产一区| 丁香成人五月天| www,色婷婷| 五月开心网| 国精产品一区二区三区| 久久激情五月天| 色情久久久| 综合性爱网| enecarbon-materials.com污K127封锁请涟系@wip1688 | 另类天堂| 五月情四婷婷| 亚洲正能量欧美| 九色色| 久久久噜噜噜操操操| 综合久色五月| 九九伦子片| 久久人妻视步| 欧洲亚洲免费视频9| 婷婷伊人网| 丁香六月啪啪| 色婷婷五月天av在线| 丁香五月人妻熟女| 婷婷五月天丁香社区| 五月天色五月| 激情深爱婷婷网| yazhou seshipin| 99国产精品久久久久久久久久久| www.亭亭五月天| 九九热青青草| 综合激情视频| 五月丁香在线国产| 91九色国产熟女| 欧美啪啪9| 婷婷天堂综合| 两性婷婷丁香五月| 欧美五月婷婷| 五月丁香六月婷婷综合伊人| 激情九色| 日本人妻伦在线中文字幕| 色区域网站视频| 日韩啪图| 99熟女| 播五月丁香六月| 大香av| 天天做天天爱| 欧美中文五月天| 五月玖玖| 久久久亚洲成人无码A片| 色五月激情五月开心五月| 九热视频| 久婷自拍视频| 五月丁香综合精品欧美| 桃色五月天| 五月综合六月婷婷| 操笔无码| 婷婷九月丁香| 久久综合9| 就要去操亚洲成人精品五月天丁香婷婷| 国产全是老熟女太爽了| 超碰93在线观看| 亚洲 25P| 91无码视频| 成 人片 黄 色 大 片| 九九婷婷网五月天| 怡红院院久久| 久久婷婷六月| 五月婷婷影| 亚洲五月六月婷婷| 99热6精品| 99精品22| 天天综合图片| 丁香五月天激情五月天激情五月天激情网| 综合五月丁香六月婷婷| 久久婷婷丁香花综合网| 五月丁香婷婷综合| 日韩久久视频| 激情综合五| 人人舔人人色人人高潮| 另类在线| 狼人婷婷久久| 1024久婷| 三日本无码| 日本色99| 开心激情站| 69激情小说| 九九色影视| 欧美激情-区二区三区| 99∨VTV| 九九热免费视频| 99热精品一| 五月丁香啪| 日日爽夜夜爽| 开心五月婷婷婷美女| 婷婷成人综合五月| 五月综合777| 日本三级韩三级99久久| 久热爱大香蕉在线蜜臀悦色 | 色综合久久伊伊婷婷五月| 五月天天堂久久| AV中文字幕夜夜操b天天摸bb| 被男人添B超爽视频| 伊人婷婷大香蕉| 思思热精品在线| 五月丁香综合伦理片| 婷婷亚洲色| 九九九九大香蕉| 亚洲欧洲美女在线观| 99精品偷自拍| 国产3p露脸普通话对白| BBWCUCKOLD精品熟妇| 久久婷婷六月综合| 99爱在线免费视频| 免费视频99| 99热主页日本| 丁香六月婷婷久久综合| 色色色色色色网| 九九色色网| 99热资源在线| 亚洲AV网站| 色婷婷导航| 色色色国产| 九九热这里只有精品5| 国产一区18| 无码一级片| 99热九九九九| 亚洲AV成人无码电影| 九月色婷婷综合亚洲| AV成人在线网站| 日日影院 | 精品久久穴| 无码少妇高潮喷水A片免费 | 色播五月丁香婷婷| 色色欧美色色| 成功精品影院| 大香蕉婷婷丁香天堂AV| 婷婷丁香六月| 午夜伊人大香蕉| 一级视频网址| 婷婷 伊人 久久| 久99久视频免费观看| 中文字幕黄色电影网址| 久久久18| 思思热在线视频观看精品| 性爱网久久| 激情五月激情综合俺也去婷婷小说| 久久婷婷激情五月天一区二区| 婷婷久久视频| 天天干天天爽| 久久精品99国产精品日本| 91se精品国产| 亚洲成人网站在线播放| 丁香婷婷五月天网站| 26uuuu精品一区二区| 狠狠草狠狠草| 五月丁香影视| 国产高清视频91九九九久久久| 综合婷婷五月天| 久久久五月五丁香| 丁香五月天堂| 国产婷婷久久| 丁香五月天信号| 夜夜天天久久婷婷| 91.com男女操| 亚洲亚洲人成综合网络| 东京热免费视频网站| 91九色网| www天天干| 影音先锋777xfplay色资源网站| 久99久精品| 久久久天堂国产精品女人| 碰99在线| 久久婷色| 99视频在线精品免费观看2| 狠狠色丁香| 高清无码网址| 99精品97| 99色一| 亚洲免费99| 成人无码髙潮喷水A片| 日本99婷婷| 色婷婷综合网站| 天天热夜夜操| 婷婷五月丁香基地| 五月间天堂综合| 人人操Av| 婷婷综合97| 激情五月婷婷综合| 久久精品日| 26uuu国自产精品| 五月丁香婷爱在线| 99精品偷自拍| 成人片在线播放| 亚洲殴洲精品Av在线| 成片免费播放| www.狠狠| 亚洲欧洲美女在线观| 超碰碰碰碰| 免费观看欧美成人AA片爱我多深 | 99国产精品久久久久久久久久久 | 黑人糟蹋人妻HD中文字幕| 91在线操逼视频| 色伊人婷婷| 色五月五月天| 色激情五月天| 婷婷五月大| 五月久久婷婷成人网| 五月天激情色色| 99色色热热| 99热66| 六月婷婷综合网2| 激情图片亚洲| 欧美精品999| 婷婷久久天堂网| 婷婷五月六月丁香综合| 欧美性生交A片免费看| 天天射综合网站| 天天草比天天爽| 久久五月婷6 9| 人妻性操逼中文字幕 国产| 久久免片| 狠狠色狠狠色综合日日91| 亚洲五月综合色播| 精品成人无码A片观看香草视频| 亚洲永久免费| 国产亚洲在线| 亚洲精品视频在线播放| 99re热视频这里只有综合亚洲| 五月婷婷丁香狠狠撸久久| 九九这里只有精品| 一个色的综合| 日本人人超碰| 五月天玖玖狠狠色色| 开心五月婷婷| 亚州视频九九99| WWW.桔色成人.COM| 五月丁香婷婷久久| 综合色色五月| 丁香五月欧美色综合| 国产在线aaa片一区二区99| 美女亚洲五月丁香| 最近中文字幕大全免费版在线 | 五月丁香综合激情| 婷婷成人AV| 亚洲第一综合| 五月婷婷狠狠干| 久久免费操| 99男人的天堂| 色人久久| Av性爱网| 婷婷的五月天另类视频| 丁香成人色情五月天| 伊人久久丁香狠狠婷婷综合香蕉 | 欧洲激情五月天| 图片区 小说区 区 亚洲五月| 台湾综合丁香五月蜜桃| 国产精品涩涩涩视频网站| 激情99热| 久久丁香综合香蕉| 日韩aaaaa| 日本99在线| 99九九久久| 这里只有精品视频视频在线观看| 无码激情AAAAA片-区区| 色狠狠色综合| 另类精品视频在线观看| 管管補管管紱| Www.se.久久| 国产激情综合五月久久| 久99久视频| 99久久婷婷国产综合| 在线,国产,色,热视频| 日本欧美成人片AAAA| 色情一区二区播放| 丁香亭亭激情四射| 色婷视频| 久久国产性爱A V| 亚洲色婷婷五月天| 五月婷护士| 九九热视频首页/这里只有精品| 色五月婷婷老师| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 久热69| 99精品在线观看视频| 色三级色三级| 成人午夜天| 天天拍夜夜爽日日| 97亚洲婷婷| 这里只有精彩视频| 91精品综合久久久久久五月丁香| 九九青青草成人| 人妻丰满精品一区二区A片| 亚洲五月色| 欧美熟女99| 99噜噜噜在线播放| 91人人网| 色综色五月天婷婷| 亚洲九区| 特黄三级又爽又粗又大| 久久这里精彩免费在线观看| 久久99网站| 狠狠色狠狠色综合日日91| 日韩美女羞羞网站在线观看| 能看的AV| 9精品在线| 3p日韩网站视频| 97se视频在线| 99久久97| 色婷婷五月综合| 日日色综合| 【乱子伦】黄色| 久久狠婷婷| 99爱视频| 九九热视频精品| 人人爱人人摸人人澡| 婷婷丁香五月天婷婷| 综合婷| 欧美人与性动交CCOO| 日本爆乳片手机在线播放| 婷婷丁香五另类网站| 狠狠爱婷婷丁香| 玖玖爱伊人网| 九九热精品| 久久92| 99色最新在线视频网站| 国产 A片 自拍| 五月丁香激情怕怕| 99啪在线| 99精品久久久久久久久| 丁香五月电影| 色五月婷婷大香蕉| 婷婷色五月在线视频| 中文不卡一二三区| 五月激情婷婷图片基地| 操碰99| 婷婷丁香www视频日本韩国| 99热这里是精品| 九九热中文| 色香欲综合| 五月婷六月丁香| 都市激情久久| 五月婷婷深深的爱| 亚洲操逼网| 色九月欧美| 国产婷婷久久| 亚洲欧洲一二| 婷婷亚洲综合| 啪啪91| 精品久久艹| 999婷婷综合| 丁香五月偷拍| 亚洲激情综合免费| 天天干com| 激情五月婷婷综合网| 六月婷婷之青青草| 亚洲国产精品五月天| 九九性爱网| 任你干嘛免费视频播放| 91性人人| 九月婷婷激情| 亚洲情色一区| 操日本三片99| 伊人网碰碰| www99久久| 九艹在线| 五月丁香婷婷色| 97碰超级人人看| 婷婷午夜精品久久久| 六月丁香天堂| 色五月婷婷1| 婷婷五月,偷窥偷拍网| 狠狠久综合| a在线免费v| 超碰在线观看9| www999日韩精品| 中文字幕 中文字幕明步| 色婷婷香蕉| 中文字幕五月久久婷婷| 五五月五月| www.国产色| 婷婷综合亚洲| 久久久精品AV| 五月 激情视频| 99这里有精品视频视频| 丁香五月婷婷图片综合| 九九操综合网| 丁香网五月天| 激情五月色综合国产精品| 丁香色五月 97干| 激情九月综合| 激情五月久久| 国产91在线视频| 色婷婷色人人射| 国产精品91抖高| 青青热久久综合| 另类激情中文| 99热热九九| 色色五月天激情| 五月丁香色情| 丁香婷婷大香蕉| 深爱五月月天| 在线日韩视频| 99热在线中文字幕| www99精品在线观看| 99热九九在线| 伊人大香蕉毛片| 九九九九这里只有精品| 九九精品大香蕉| 偷拍视频五月天| 婷婷综合激情| 1995年关宝慧版蜘蛛女| 国产探花一片区| www色五月| jiujiujiuwuyuetian| AV在线大香蕉| 天天做天天爱天天日| 天天日日夜夜| 五月停停丁香| 在线资源av-超碰中文在线-成人AV| 综合伊人久久| 丁香五月天激情婷婷丁香六月| 婷婷综合在线| 激情小说之五月| 五月丁香综合久久夜夜| 丁香九月婷婷综合| 欧美综合激情五月丁香| 欧美日韩成卜| 亚洲精品99| 99人人干人人| 色婷婷丁香A片区毛片区女人区| WwW天天干| 色婷婷播放| 思思99久久| 五月天婷婷基地综合网| 99视频内射三四| 激情网婷婷婷| 婷婷九月| 色综合播放| 综合XX网| 啪啪啪啪五月天| 99啪视频在线观看| 丁香伊人网| 亚洲五月天综合色| 男人的天堂av俄罗斯热| 欧美人妻一区二区| 久久人妻在线| 久这里只有精品99| 综合九九久久| 最近中文字幕2019视频1| 天天草天天摸| 五月丁香久久综合| 国产综合A片| 99性视频| 深爱综合网| 狠狠夜夜五月丁香| www.cao.com久久| 97香蕉碰碰人妻国产欧美| 六月丁香婷婷天堂| 日本超碰在线| 五月丁香久久婷| 99综合免费视频| 欧美激情VA永久在线播放| 婷婷5月天激情综合| 91亚洲天堂| 国产精品久久久久久久久久| 91超级碰在线视频| 婷婷五月天激情五月天深爱五月天| 婷婷,五月天,丁香,第一| 久热精彩视频98| 久久婷婷色| 99热热这里只精品996小说| 99久久综合| Www.狠狠| 91日本在线免费| 性无码专区无码| 色啪影院| 五月婷婷片| 99爱最新免费视频在线观看| 丁香五月在线视频| 天天弄天天爽| 丁香婷婷精品视频| WWW,激情五月天,COM| 久久大香蕉同僚| 婷婷色在线视频| 婷婷久久影院| 99碰| 激情啪啪五月| 丁香六月婷婷综合啪啪| 久久久五月天婷婷成人网| 99热 精品在线| 婷婷丁香六月天| 超碰97人人操| 天天肏视频| 色偷偷综合| 婷婷五月天六点丁香五月| 久久久99精品| 久久深爱激情网| 秋霞簧片| 天天透天天摸天天舔| 深爱激情九九五月天| 99惹在线精品免费观看| 色10月婷婷视频| 人人操日| AV激情五月| 色综合99| 这里只有精品99视频| 99黄色性生活| 久久五月天精品视频| 1024人妻| 婷婷五月天色网久| 亚洲欧美999| 九九无码| 丁香五月天激情综合| 91精品综合久久久久久五月丁香| 亚洲乱码日产精品BD| 三级毛片视频| 亚洲另类av| 久久丁香五月婷婷| 五月天婷婷久色| 岛国AV网站| 丁香五月色五月| 久青草影院| 日韩国产在线精品| 99ri精品在线| 99热久只有| 五月网在线| 色婷婷www| 天天色情站| 人人操人| 天天搞夜夜叫| 夜夜夜夜夜骑撸| 91日韩在线| 99人妻碰碰久久久禁片| 日本成人综合| 99热这里只有精品96| 狠狠干婷婷| 九九色精品| 婷婷丁香五月基地| 日韩色色色99| www激情| 中文字幕在线观看视频www| 久久亭亭电影| 婷婷五月天改成什么了| 色色亚洲视频| 92久久精品一区二区| 91碰九色| www.狠狠色.com| 九色七七| avh片在线观看| 91婷婷丁香五月天免费视频网站| 五月婷婷综合在线视频小说| 深爱激情五月天| 操逼国产91| 婷婷性爱无码视频| www激情| 大香蕉伊在| ss99热| 伊人五月天在线| 丁香激情五月少妇| 日本欧美国产| 少妇高潮呻吟A片免费看软件| 伊人玖玖网| 婷婷五月噜噜| 日产精品久久久久久久蜜臀| 日韩黄黄| 亚洲免费99| 91日综合欧美| 99免费视频在线观看爱| 亚洲色五月| AV在线观看网站| 日日操夜夜爽| 久久五月天 91| 亚洲天堂AAA| 91操人视频| 大香蕉九操| 99操免费视频| 久久影视婷婷五月| 青草少妇激情| 婷婷日韩| 这里只有精品9| 人人插操| 天天添天天摸天天天天做| www.狠狠操| 丁香九月激情| 六月婷婷色综合| 天天综合网91| 五月色婷婷中文字幕| 久久精品系列| 久久99激情| 98永久精品| 五月天精品| 激情婷婷九月| 丁香六月婷| 99超级碰碰| 久久激情天堂| 9久久久久久久久久久| 亚洲成人网站在线播放| 97人操人免费视频| 色五月天丁香婷婷| 日本一级| 五月激情婷婷丁香| 色激情综合狠狠婷婷| 九九精品热| 色国产五月| 久久人妻熟女一区二区| 九九热手机在线视频| 人妻日日日| 亚洲综合婷婷六月丁香五月| 伊人天堂婷婷| 伊人玖玖婷婷| 欧美一级色| 亚洲操逼网| 色五月婷婷激情五月| 亚洲狠9| 色五月婷婷一二| 欧美在线看| 丁香六月激情| 99久久综合网| 日本欧美999久久久三级片| 丁香五月成人网| PORNY九色9l自拍视频成人| 99色视频| 五月婷婷综合色啪首页| 大香蕉在线观看9| 98色花堂98t.R| 99激情网| 就去色色五月丁香婷婷久久久| 色婷婷亚洲六月婷婷中文字幕| 九九色院| 丁香激情网| 婷婷激情网五月天| 97欧美在线| www.zbzhongsen.com| 五月丁香黄色| 婷婷射图| 99热热热99精品丁香| 665566 无码| 99玖玖在线视频| 小视频aaa久久久| 99操不停| 激情五月五月婷婷| 五月婷婷之美女图片| 91婷婷搞| 在线看片h站| 日本久久婷婷| 丁香五月天激情AV| 欧美大香蕉视频| 熟妇人妻中文字幕无码老熟妇| 日本在线va| 狠狠色狠狠干| aaaa.黄| 超碰av在线| 色爱五月天| 激情久久四色| 99操免费视频| 亚洲宗合激情| 丁香五月影院| 五月丁香婷婷综合视频| 色之综合网| 天天综合91入口| 国产又爽又猛又粗的视频A片| 久色激情| 欧美亚洲婷婷五月| 久久中文人妻系列| 射久久丁香五月| 少妇出轨做爰高潮A片| 久久免费操| 思思热久久爱| 狠狠草天天草| 超碰在线免费| 热婷婷在线视频| 无码成人AAAAA毛片AI换脸| 99久久久久久| OUMEIRIHANCHENGREN| 99这里有精品视频| 99色五月| 在线1青婷| 激情五月综合ì香亚洲| 久久婷婷精品| 91视频五月丁香| 大鸡巴伊人网| 丁香五月花| 色色国产| 五月丁香影院| 99综合自拍| 五月丁香综合在线| 99在这里有精品| AV美美午夜| 9九热视频| 久久久com| 99 re视频一区| 六月婷婷视频| 久99精品视频| 超91在线视频| 青青操成人福利| 久久综合五月天激情小说网站 | 欧美色狠婷久| 丁香五月大香蕉| 色色五月天丁香| 九月综合| 六月婷欧美| 99热在线资源| 亚洲精品在线视频| 在线成人视频免费| 狠狠九九婷婷韩| 亚洲视频无| 九九超碰人人| 久久hd| 91精品婷婷国产综合| 婷婷九色| 久久五月天色婷婷| 黄网免费观看| 色综合久久99色| 深爱激情av| 在线18av | 欧美久久五月婷婷| 丁香六月婷婷久久综合| 精品在线| 99色在线| 婷婷色五月婷婷姐妹| 色五月激情综合网| 大香蕉精品视频| 婷婷五月天堂| 色色免费网站| 激情床戏| caop在线| 九九色精品| 久操热| 五月天伊人网| 天堂AV三级| 狠狠色婷婷7777久| 欧美美女国产日韩一区二区久| 日日干夜夜干| 五月丁香日本片| 久久久婷婷| 婷婷六月婷婷| 九九视频在线观看视频6| 五月丁香六月婷婷不卡免费无码| 亚州美女| 俺去也在线官网| 91黄色五月天视频| 女高怪谈在线观看| 婷婷五月天情色| 棕合影院色色| www.狠狠| 国产乱妇无乱码大黄AA片| 日在线V视频在线播放| 久久婷婷青青草| 激情五月四色| 综合激情sV| 五月丁香久久网| 99免费热在线精品| 午夜69成人做爰视频| 亚洲婷婷乱乱丁香| 97超碰欧美中文字幕| www.婷婷,com| 丁香婷婷六月激情文学 | 中文字幕成人网站| 色五XX| 色色九九五月天 | 成人在线网址| 超碰在线91| 婷婷五月伦理| 伊人婷婷五月天av| 99热精品在线播放| site:esunnet.com| 色婷婷狠狠久久综合五月| 亚洲精品永久久久久久| 亚洲成人影视在线观看| av大香蕉| 五月丁香操亭亭网| 五月丁香亭亭操逼| 婷婷伊人| 欧州色色| 99热啪啪| 久久婷婷青青| 91视频精品99| 欧美美女国产日韩一区二区久| 婷婷五月丁香基| 色哟哟www| 性小说五月天| 色五月大香蕉婷婷| 色情五月综合婷婷| 久久久久久久久久人妻| 日本97在线视频| 欧美精品XXXXBBBB| 97热这里只有精品| 亚洲婷婷视频| 五月天婷婷Av| 天天日天天爽夜夜爽| 严洲天天插| 久婷婷婷| 久久久久久五月天| 日本久久综合| 五月婷色啪| 超碰免费人妻| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 六月综合在线| 亭亭玉立国色天香| 大香人妻| 开心激情婷婷| www.99日本| 亚洲综合婷婷五月| AAA久久久| 五月激情综合婷婷| 天天爽天天日| 婷婷深爱五月天| 久久婷婷原创视频| 先锋资源婷婷| 久久一二三视频| 色五月婷婷久久| 欧美碰碰碰| 熟妇人妻中文字幕无码老熟妇 | 亚洲天堂热| av中文网站| 深情六月婷婷综合久久| 婷婷久久精品| 五月婷婷伊| 三级三久久线久久99久目本WW| 激情综合激情五月一起草| 六月色日韩| 日本久久视频| 丁香五月婷婷久久久| 99热这里| 99操99| 天天干一干| 亚洲情a| 五月婷婷六月丁香综合视频在线| 99热1| 久久99日本精品视频免费观看| 免费看欧美成人A片无码| 五月丁香婷婷中文| 亚洲综合五月| 夜丁香五月婷婷| 五月天色综合服务平台| 一起草AV| www.91.com黄| 99re热在线视频观看| 亚洲黄网在线| 九九视频在线观看视频6| 婷婷激情社区| 91碰| 99爱视频| 欧洲亚洲精品| 99热这里只有免费精品| 六月婷婷网站| 五月香蕉婷婷| 蜜桃婷婷五月| 丁香五月香蕉在线| 久久停停超碰| 亚洲成人高清在线| 色色色在线观看| 狠狠综合区| 九月av在线| 综合 蜜月 婷婷| 五月婷婷综合色啪首页| 婷久久高清| 丁香情色五月| 91久久日日| 丰满少妇猛烈A片免费看观看| 欧美在线视频99| 色情五月丁香| 丁香五月电影| 亚洲激情综合| 成人无码髙潮喷水A片| 婷婷色导航| 欧美日韩999| 五月天婷婷色| 搡BBBB搡BBB搡18| 被男人添B超爽视频| 午夜少妇在线观看视频| 精品一二三区久久AAA片| 亚洲人妻av| 免费无码毛片一区二区A片| 激情小说五月天| 九九在线视频| 日本乱子人伦在线视频| 熟女人妻视频| 伊人久久丁香狠狠婷婷综合香蕉 | 97超碰在线免费观看| 99九九视频| 人妻AV在线观看| 91久久久久久| 婷婷欧美色| 色欲香综合网| 免费视频这里只有精品| 九九这里都是精品| 色欲午夜无码久久久久久张津瑜| 久草狼人| 亚洲九九夜夜| 六月丁香五月婷婷| 中文字幕婷婷9月天| 免费色婷婷| 天久久久久| 色色色色五月天| 婷婷五月成人有| A A色色| 婷婷丁香五月激情| 丁香五月欧美成人| 啪啪一区| 色吧网91| 日韩精品成人在线| 狠狠操狠狠爱| 日韩六十路91性交电影| 99er精品视频| 99热天堂| 丁香六月综合| 色五月丁香com| 五月天丁香欧美激情| 丁香五月婷婷啪| 亚洲视频丁香网va| 婷婷五月天激情在线| 伊人久久大香蕉网| 99热免费| 国模狼狼| 日本美女上人| 五月丁香五月激情综合色综合| 五月香六月婷| 婷婷综合精品| 极品少妇XXXX精品少妇偷拍| 97se在线视频| 激情综合亚洲| 99热这里只是精品| 97色97干| 亚洲精品V天堂中文字幕| 色色综合热| 丁香五月天激情| 久久久久久综合五月婷婷| 成人色图情色成人网 www.5b5b5bcom 五月天 | 六月婷婷色五月| 99精品热| 亚洲激情综合| 欧美在线视频9| 九九热99re8热免费观看| 丁香婷婷成人在线播放| 特黄三级片| 五月丁香婷婷钟和色图| 五月丁香六月综合基地| 夜夜夜夜做天天天做无码视频| 国产这里只有精品| AA片在线观看视频在线播放| 97艹| 激情婷婷人妻| 国产精品色婷婷久久久精品| 国产成人精品一区二三区熟女在线| 婷婷综合av| 五他月天啪啪啪| 婷婷五月天AV| 4438全国最大视频成人网站在线观看| 九九99免费视频| 久久久五月婷婷| 依人大香蕉| 91九色成人原创视频| 69堂午夜视频最新地址| 色婷婷小说网| 成人午夜视频精品一区| 久9热视频在线观看| 天天操夜夜肏| 五月天色丁香| 丁香五月综合无码趴趴| 日日夜夜青青草| 久9久9热久热| 婷婷丁香综合在线| 激情五月天啪啪| 99综合网| 正宗黄色毛片| 婷婷丁香五月,狠狠综合| av狠狠操| 国内久久亭亭| 五月婷婷我| 色99在线| 另类天堂| 99久久www| 91在线观看www| 亚洲AV无码久久精品色欲| 婷婷丁香五月综合| 婷婷九九视频| 青青草原福利在线| 亚洲精品一区无码A片| 久操大香蕉| 久久小视频| 天色色综合网| 99热这里有精品2| 国产一级片| 97人人射| 玖玖色综合网| 性热视频99精品| 桔色成人在线| 99久久婷婷国产综合精品| 五月天六月天| 五月婷婷香| 激情六月丁香| 99热精品在线观看| 婷婷丁香www视频日本韩国| 丁香九月婷婷色| 免费看欧美成人A片无码| 天天做天天爱天天日| 九月激情网| 久久五月天视频| 五月婷婷AV| 大香蕉人人人| 九九99久久| 精品久久艹| 五月婷久草| 深爱激情丁香五月| www.cao.com久久| 婷婷五月天激情五月天| 婷婷99视频在线| 欧美性丁香色色五月天| 免费视频WWW在线观看网站| 六月欧美综合色情| 99精品网| 亚洲小视频免费看| 五月丁香六月婷| 五月丁色AV| 九九热免费视频| 激情伊人六| 爽tv | 天天色天天舔天天爱天天爽| 五月婷婷色色爱| 这里只有精彩视| 久色大香蕉| 色婷婷的五月天| 国产婷婷综合| 91九色丨国产丨爆乳| 99热这里只有精品1025| 免费无码毛片一区二区A片| 99精品在线观看| 丁香六月婷婷综合激情欧美| 国产熟女一区二区三区五月婷| 99热国产婷婷| 色婷久九| 色色色999| 综合激情婷婷| renre人人操国产超碰在线| 丁香婷婷五月香蕉91| 丁香五月婷在线| 婷婷丁香色性爱| 久久 婷婷 五月天| 九九成人精品免费视频| 婷婷五月天网| 久久久区区一久久久久久| 亚洲永远av在线播放| 五月丁香六月情| 久草a片| 日本不卡中文字幕| 六月婷婷五月丁香首页| AV片一区在线观看| 综合激情网激情五月。| 性爱激情小说AV五月丁香花| 九九综合伊人| 99r久久这里只有精品| 成人AV在线中文版| 99精品福利视频| 五月丁香激情婷婷| 国产成人网| 夜丁香五月婷婷| 一区二区乱码视频| 亚洲超碰在线| 66精品成人免费网站在线观看| 色综合久久88| 五月婷婷在线视频| 99精品在线下载| 五月天婷婷色色网| 99这里有精品视频| 色99欧洲色19| 996热re视频精品视频| 极品人妻VIDEOSSS人妻| 九九99一区| 99九色视频在线观看| 老美AA片| 婷婷丁香五月综合免费视频百花| 久久九九综合| 另类丁香五月天区图| 色综合久久中文| 色国产五月| 色婷婷影| 97精品人人A片免费看| 丁香六月情| 色五月xxx| 色久一| 五月丁香网站| 久久少妇视频| 成人五月天综合网| 91主播在线| 99热这里只有精品8| 婷婷丁香五月亚洲| 综合激情五月四射婷婷|