99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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
返回資訊列表
精品AV无码超碰| 国产亚洲精品久久久久久豆腐| 婷五月天丁香婷五月| 久久婷婷五月综合色丁香| 免费观看高清无码| 婷婷五月丁香欧洲| 婷婷五月天首页| 丁香五月激情欧美| 日本不卡高字幕在线2019| 激情美女五月天激情在线| 伊人大香蕉爱聚| 婷香五月| 狠狠色无码| 野外99热| 色五月婷婷7777| 六月婷婷激情| 久久激情五月天| 内射综合网| 日韩一本操| 99热综合在线| 中文不卡一二三区| 激情五月天婷婷激情| 色婷婷基地 | 99这里只有| 五月网激情| 9999热精品| 婷色五月| 婷婷五月天久久久| 五月天成人小说| 色播五月丁香| 先锋五月婷婷丁香草草| 色香久久| 久久久性爱视频| 97 天堂| 国产精品色| 丁香月五月天婷婷久久| 五月天·www·com| 99热9| 狠狠色综合图片| 五月丁香久久| 日日夜夜天天综合| 91久久久久久久久18| 婷婷六月色播| 这里有精品99| 任你艹| 五月婷婷草| 啪啪视频99| 色一情一乱一伦一区二区三区| 色九月婷婷丁香| 色噜噜丁香| 狠狠狠狠狠狠| 色吧五月| 色欲AVV| 丁香六月婷婷久久综合| 人妻丰满精品一区二区A片| 中文资源在线a | 9久精品| 天天色噜| 日本综合色色| www.99热视频| 中文字幕永久在线| 国产精品久久久久久久久久免费| 国产成人AV不卡| 成人美女网| 99热精品在线| 激情AV综合| 无码激情AAAAA片-区区| ai97re99一本| 99精品一二三四视频| 9 1在线视频| 人人操人| 激情婷婷综合网| 婷婷伊人五月| 视频综合网| www.久久爱.c n| 婷婷五月a| 久久久久久久久久久jjjj| 激情AV网| se.久久视频在线观看| 极品五月天| 五月天丁香啪啪啪啪| 婷婷五月综合色小姐小说| 久久五月热| 五月婷九月| 东京热人妻一区二区三区在线| 99热这里是精品| 五月天激情图片| 日日肏夜夜干| 永久免费视频| 久久HD| 五月天婷婷色色| 中文字幕在线日亚洲9| 丁香六月啪啪| 丁香五月婷婷香| 9999热在线| 日韩av高清| 丁香六月av| 激情五月婷黄版| 亚洲激情综| 99热精品在线| 亚洲色情网站| 超碰99热| 久久九九国产| 蜜桃五月天色| 可以免费观看的AV| 六月婷婷香蕉| 五月婷六月丁香| tingtingzonghewang| 婷婷操婷婷干婷婷射| 激情五月婷婷| 人人肏逼视频在线一区二区| 区区久久妻| 激情色情五月天| 激情五月天色婷婷综合| 五月天丁香| 狠狠色综合图片| www.99热视频| 五月天另类激情在线| 伊人五月天| 99免费在线视频| 精品99*| 五月丁香六月香香蕉| 色婷婷影| 26uuu在线观看| 色综合色色| 一本大道熟女人妻中文字幕在线 | 人人摸人人澡人人| 五月丁小婷婷激情四射| 天天射夜夜爽| 婷婷五月天堂| 亚洲超级碰| 超碰av在线| 天天插天天插天天插| 狠狠综合久久| 丁香8月手机综合| 久久久激情视频| 丁香五月中文字幕久色| 无人区码一码二码三码医生系列| 亚洲婷婷五月天综合| 亚洲成人人人操| www.99热| 五月丁香美女| 婷婷成人五月天成人文学| 久久日九九| 五月丁香色婷婷基地| 九九综合久久| 九九热中文| 亚洲成人五月| 色五月婷婷激情基地| 五月丁香六月婷婷亚洲激情综合| 性综合网| 免费的日逼视频| 丁香五月首页| 日韩成人av在线| 五月婷婷综合在线视频小说| 思思热99er| 久久婷婷色丁香| 99久久性爱| 99九九中文字幕视频| 丁香激激情网| 九九99精品视频在线观看| 国产伦亲子伦亲子视频观看| 丁香五月婷婷88在线| 五月丁香成年黄色| 激情六月综合| 色五月婷婷AV| 91久久99久久91熟女精品| 91久久久久久久久18| 国产小网站| av在线超清中文| 99综合网| 九九九午夜影院成人| 久热99| www久久久| 九九久久99| 久久与婷婷| 久久天天| 激情伊人网| 婷婷激情六月| 99热偷拍| 伊人婷婷大香蕉| 丁香六月婷婷综合欧美| 亚洲啪视频| 五月婷婷啪啪啪| 九九热re99re6在线精品| 精品九九网| 日本WWW九九九| 婷婷欧美综合| 五月天激情小说| 丁香六月激情综合网| 一本色综合色| 色丁香五月婷婷综合久久| 天天综合天综合| 丁香五月综合激情久久潮喷| 久久资源网五月婷| 26uuuu精品一区二区| 玖玖99婷婷| www.99热视频| 亚州精品色情无码A片| www.超碰在线| 色色色热| 亚洲人妻一区二区 | 色域五月丁香| 激情久久肏屄视频| 巴基斯坦粉嫰无码视频| 国产色网站| 婷婷综合五月| 思思久热6| 99视频在线观看网址| 色屌丝中文字幕| 99热日韩| 1024AV视频| xx综合网| www.爱婷婷.com| www.henhengan| 亚洲视频久久| 丰满少妇乱A片无码| 激情综合网五月天| 婷婷色五月久久| 五月婷婷黄色毛片| 日韩无码人妻一区二区三区综合| 亚洲综合视频八| 大香蕉婷婷久久| 性 色 婷婷| 狠狠干狠狠干| 狠狠综合| 婷婷开心五月| 99热日本| 深爱 五月天| 国产a视频| 26uuu最新地址| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 天天天天天天天干| 婷婷激情综合| 中文AV网站| 久久一热| 激情综合网址| 月婷婷婷婷五月| 婷婷色五月综合丁香| 丁香五月www| 五月激情婷婷在线| 婷婷五月综合视频免费播放| 亚洲无码成人网| 五月婷婷 自拍| 激情久久久| www,天天干| 日韩成人电影AV| 天天久久婷婷| 91美女啪啪| 日在线V视频在线播放| 六月婷婷最新网址| 婷婷干六月综合旧址| 色五月首页| 久久久97| 999热这里只有精品| 超碰在线综合| www 五月天 com| 丁香五月情色| 性爱AV天堂| 超碰在线视屏| 99色色网| 五月天快乐开心激情网| 就爱操www com| 99色综合网| 免费AV播放| 99自拍视频网站| 久久久精品免费啪啪国| 91大操| 婷婷玖玖五月天| 久热99久热| 久热99狠| 狠狠色婷婷7777久综合| 啪啪黄页网| 色涩视频久久| 91日综合欧美| 丁香五月婷婷亚洲综合精品| 婷婷丁香六月综合激情站| 丁香五月欧美成人| 久久亚洲婷婷综合色五月| 噜一噜免费视频| 丁香六月婷婷缴情欧美| 国产美女精品| 俺去也五月| 九九热在线精品视频| 久久九九免费视频| 91超级碰碰| 色丁香五月婷婷| 91精品久久久久久综合五月天| 婷婷欧美色| 思思99精品视频在线观看| 亚洲激情高潮| 日韩激情人伦人| 九九机热| 五月丁香免费视频| 丁香色婷婷| 激情婷婷| 国产操B| 久久久噜噜噜www成人| 99九九视频精彩在线| 9热视频在线观看| 丝袜大香蕉| 激情婷婷综合| 色五月天电影| 97人人草| 婷婷伊人视婷婷婷| 综合激情网五月激情| 色五月激情综合| 色综合色综合色综合色综合| 婷婷中文字幕| 伊人婷婷五月天av| 五月色婷婷AV| 五月天婷婷av| 国产黄色大片| 亚洲色欲欧美一区二区三区| 久久五月婷婷丁香| 亚洲偷| 亚洲成人av在线| 婷婷五月天xxx| 天天插综合| 伊人网碰碰| 性爱五月婷| 色综合色| 五月激情婷婷综合| 七月丁香婷婷 色色| 9l视频自拍9l九色9l成人| 色婷丁香五月| 五月玖玖| 噜噜五月天综合| 金桔一区二区ab地址| 色综色五月天婷婷| 人妻内射视频| 色欲婷婷五月天丁香| 开心深爱五月天| 久久99热在线观看| 久久密臀婷婷| 夜夜噜夜夜奇| 综合激情五月天| 五月丁香婷婷综合视频| 久爱综合| 操日视频| 天天噜| 河北真实伦对白精彩脏话| 美女激情综合| 91ncm视频| 激情综合色| 伦99热| 五月亭亭综合五码| 少妇高潮呻吟A片免费看软件| 欧美综合五月丁香六月婷| 操你av| 伊人五月天| 二色AV| 激情综合激情综合| 色综合播放| 丁香六月婷婷综合网| av中文在线| 91久久久久久久久久| 五月丁香黄色| 天天日P天天射P| 色婷丨日丨天丨综合久久| 激情五月丁香五月| 亚洲无码成人网| 狠狠色婷婷7777久| 激情丁香五月天综合| A片一曲| 久久在线大香蕉| www.五月丁香| 99精品在线观看视频| 色偷偷综合| 欧美色综合天天久久综合精品| 丁香婷婷人妻| 欧美三级A做爰在线观看| 97碰碰人人| 97操碰视频| 91丁香五月| 国产精品国产| 亚洲欧美成人在线| 日本欧美成人片AAAA| 热久久思思热思思| 天天色天天色天天色天天色天天色| 午夜69成人做爰视频| 色婷婷国色天香综合| 天堂成人A片永久免费网站| 天天日夜夜B久久| www.99色| 97色色在线视频| 超碰在线观看三级片| 激情综合网亚洲色图| 爱操天堂| 五月综合色播播丁香婷婷| 国内自拍97在线| 激情五月,色播五月| 伊人久热91| 噜噜在线| 天天插天天插天天操| 99性爱| 狠狠色丁香久久久婷| 99这里有精品| 情婷婷五月天| 日韩狠狠色| 国产激情视频在线观看| 五月五婷婷| 五月伊人婷婷999| 操逼巨乳91| 久久99久久99精品免视看婷婷| 五月丁香啪啪| 五月草影视| 99精品人人| 五月天综合| 亚洲AV激情五月综合网| 六月婷婷综合网2| 夜夜躁婷婷AV| 99爱最新免费视频在线观看| 国产精品国产| 激情文学综合婷婷五月天丁香花| 亚洲第一综合| 艹| 九九精品热播| 99热这里只有在线| 97久久人人操| 99精品丰满| 丁香五月婷婷啪啪啪| 九九九九九无码| 九九热99在线视频| 思思热在线观看| 婷婷五月天开心网| 丁香婷婷六月天| 欧美性生交XXXXX无码小说| 色播五月| 六月婷婷狠狠| 久综合色| 婷婷色五月天色| 激情五月天婷婷| 色五月婷婷九月| 久色成人| 久久免费丁香| 丁香婷婷五月综合欧美另类| 69精品人人人人| 天天骑天天操| 激情丁香五月婷婷啪啪| 五月丁香少妇A| 亚洲欧洲国产精品| 超碰人人99| 不卡在线视频| 欧美私人家庭影院| 91一起操| 91精品久久久久久综合五月天| 五月丁香婷婷婷婷综合网| 久久色五月| 97操男人的天堂| 亚洲精品国产熟女久久久| 猫咪伊人久久| 香蕉狠狠爱视频| 婷婷激情社区| 婷婷开心激情五月激情网| 思思热在线观看| 综合久久五月天| 五月四色色| 五月天婷亚洲天综合网综合| 2015好吊操| 国产精品视频免费看| 亚洲成人AV电影网| 欧美色偷偷大香| 97综合视频在线| 国产成人精品一区二三区熟女在线 | 色玖玖网| 久草五月婷| 久久婷婷五月综合色和| 97搞在线| 五月婷婷丁香综合,亚洲天堂| 亚洲亚洲人成综合网络| 亚洲深喉aV| AA片在线观看视频在线播放| 中字幕视频在线永久在线观看免费| 亚洲色在线观看| 4399在线日本A片| 91人人爽狠狠狠| 色玖玖综合网| 操99| 99婷婷精品推荐在线视频| 97操操| 久久97| 99热亚洲精品| 欧美成人精品三区综合A片| 97香蕉碰碰人妻国产欧美| 免费看欧美成人A片无码| 99ree6| 亚洲国产成人AV在线| 婷婷丁香五月91| 五月婷婷激情刺激| 五月天婷婷视频30| 亚洲婷婷91丁香| 五月丁香六月玩女人| 久久激情五月| 久久伊人五月天| 九九热精品| 夜夜嗨一区二区三区直播内容 | 国产97色在线| 日日夜夜狠狠婷婷色| 五月激情综合五月| 色五月丁香五月| 六月婷久久| 99热.com| 极品人妻VIDEOSSS人妻| 亚洲情欲久久| 婷婷五月激情网| 丁香 婷婷五月| 日日夜夜综合| 激情五月六月婷婷| 丁香婷婷性爱| 丁香五月婷婷图片综合| 91网站黄| 色五月婷婷啪啪五月| 五月成人天| AV五月婷婷露脸| 亚洲这里只有精品| 久久a热| 久久人妻超碰一区| 亚洲综合草草| 五月开心激情网| 超碰在线超碰| 久草婷婷网| 五月婷婷七月丁香| 激情都市五月天| 噜噜色五月| 国产美女无遮挡裸体毛片A片| 欧美碰碰| 中文不卡一二三区| 性一交一乱一交A片久久四色| 欧美成人AAA片一区国产精品| 天天色天天操天天射| www.日韩国产| 九九精品热| 国产熟妇乱子伦hd| 激情五月天在线观看色婷婷| 国产9色在线/日韩| 国产色网站| 久久婷婷免费| 久色五月婷婷综合| 成人精品视频99在线观看免费| 婷婷久久性爱| 成人丁香| 人妻在线网站| 99这里只有精品|v| 亚洲无码免费看| 五月丁香激情综合六月涩涩爱| 丁香五月久久| 婷婷五月丁香久久| 99久久婷婷五月综合| ady狠狠入| 丁香六月亚洲综合| 4399无码视频二区| 人人草人人爱手机视频看看| 五月天婷婷狂暴白浆| 色丁香五月婷婷婷| 欧美一级色| 色婷婷五月天av在线| 天天综合网91| 激情久久久久| 激情网五月| www.久久| 综合五月婷婷| 很很干在线视频| 第四色在线观看| 翔田千里aV中文字幕| 97人人草| www,五月丁,com| 综合狠久久| 欧美性色五月天| 丁香婷婷九月在线| 啄木鸟丝袜美女福利视频| 九月丁香很很色| 天天爽天天草| 狠狠色色综合| 日本五月婷婷| WWW、日本色丁香、co m| 人妻体体内射精一区二区| 激情网 五月天| 亚洲狠狠终合停停终合| 丁香色五月天| 久久99婷婷| 丁香五月综合| 激情色情五月天| 丁香五月天日韩无码| 99色免费观看全部| 91超碰在线播放| 欧美性爱五月天| 综合激情五月丁香| 九九精品系列| 五月天婷婷色| 久久久久久综合五月婷婷| 丁香五月欧美婷婷| 9久国产精品| 丁香五月六月久久综合| 影音先锋一区二区资源站| 久久久噜噜噜久久人妻| 99re66热这里只有精品| 伊人香大香蕉视频| 日韩欧美颜射| 成熟妇人A片免费看网站| www.99热. com这里只有精品| 六月激情网| 99热精品中文字幕| WWW,婷婷,COM| 五月总合激情网| 久爱综合| 久热9| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 精品久久9| 思思热思在线精品视频| 青青999| 99re8这里只有精品99re8热视频| 伊人色欲五月天| 99在线免费视频| 亚洲深喉AV| 91九色在线视频| 五月丁香婷婷激情久久| 日本久久爽| 五月天婷a在线| 丁香婷婷六月天| 2w在线视频| 综合色五月| 1024成人免费看| 婷婷五月色| 香蕉AV777XXX色综合一区| 超碰人人在线| 加勒比日本一区二区三区| 六月婷婷五月丁香| 99精品自拍视频| 淫荡工a| 思思视频久久| 91青娱乐青青草| 抽插特写| 成人国产欧美大片一区| 九九热在线99| 色综合久久综合中文综合网| 男人的天堂在线婷婷| 亚洲操操| 五月色婷婷综合| 99热97| 天天夜夜六月丁香五月婷婷老师| 99热这里只有精品手机在线观看| 激情五月天色网站| 亚洲综合999| 91在线看片| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 思思热99er| 国产亚洲成AV人片在线观黄桃| 99热日韩| 熟女网站久久| 丁香六月婷婷久久综合| 香蕉AV777XXX色综合一区| 情欲综合网| 婷婷色女| 免费国产VA国产免费| 91黄操| www.日本91| 99草视频在线观看| 大香蕉人人人| 五月婷婷日| 超级碰91| 99啊精典免费视频| 五月天大香蕉AV| WWW色色色COM| 久久月天堂| 欧美天堂婷婷日韩| 黄色AAAA韩国guochansanji| 婷婷操无码| 婷婷五月五月丁香| 99干在线视频| 18久久| 色婷五月天| 五月婷视屏在线观看| 色五狠狠| 天天天天操| 五月激情综合网| 五月婷婷五月天| www,com,五月色色| 婷婷五月花| 99免费在线| 综合色色网| 婷婷操逼| 91麻豆国产三级精品福利在线观看 | xxx.色婷婷| 天天日日夜夜| 另类视频综合| 国产精品18久久久| 婷婷在线五月综合| 日韩激情网站| 亚洲、欧美、国产另类笫二区| 熟女激情网| 激情深爱五月婷婷| 五月婷婷插一插| 丁香激情五月少妇| 综合色色婷婷| 91日韩在线| 九九色婷婷五月天| 五月色亚洲| 久久97| 五月天婷婷青青| 九九精品在线观看视频6| 五月天另类激情在线| 色五月色五天色情网| 成人午夜无码视频| 色五月激情五月天| 秋霞电影一级黄| 99ri国产在线| 激情婷婷视频在线| 色色婷婷综合网| 久久精品日| 国产高清av黄色看片| 99精品一二三四视频| 色婷婷在线视频| 99碰碰。| 婷婷色导航| 婷婷五月天首页| enecarbon-materials.com污K127封锁请涟系@wip1688 | 五月婷婷在线免费| 天天爱天天做天天操| 婷婷碰碰| 五月丁香亚洲校园欧美| 99免费视频在线观看爱| 日日夜夜天天综合| 日本97在线看片| 99热综合在线| 五月丁香五月综合欧美| 99欧美| 婷婷中文字幕网| 亚洲第一色色色色| 五月激情婷婷综合| 99热每日| 99视频精品视频| 欧美色色色色色色| 狠狠色综合五月人人| 五月丁香六月婷| 狠狠干综合网| 777影视理论片大全在线观看| 国产资源在线视频| 五月丁香另类网| 久久小视频| 婷婷五月天激情电影| 日韩欧美骚货| 777精品久无码人妻蜜桃| 超碰无码318604| 五月天激情视频五月天| 99热精品在线在线| 成人av免费观看| 精品久热69| 丁香婷婷综合色五月激情国产基地| 台湾综合丁香五月蜜桃| 97干视频| 天天综合久久| 五月天成人网在线观看| yw国产AV| 丁香五月婷婷国产在线| 蜜臀av无码久久久久久久久| 色婷视频| 丁香五月婷婷超碰在线| 噜一噜在线| 婷婷中文字暮| 欧美精品熟女一区二区| 狠狠爱成人综合网| 色欲五月天| 狠狠色综合网| 深情六月婷婷综合久久| 天天爽夜夜操| site:901-07.com| 日本九九九九| 色欲丁香| 婷婷香蕉| 天天操天天爱天天日| 99精品在线播放| Av九九| 91久久99久久91熟女精品| 丁香激情四射| 人妻九九九九| 婷婷视频网| 色九九综合| www色色com| 亚洲婷婷免费| 日日天天天| 天天干天天拍| 五月激情综合激情五月| 久久精品国产精品| 婷婷五月天a| 久久丁香综合精品综合| 色婷婷在线视频综合| 五月婷婷丁香日韩在线| 五月 婷婷 成人| 九月婷婷在线观看| 99热资源在线| 97人妻碰碰碰久| 噜噜噜久久| 噜综合| 久久人妻少妇嫩草AV| 色五月视频,小说| 9999综合99综合人| 久99久热| 色婷婷色五月另类综合| 性做爰A片免费视频A片直播| 九九热这里只有精品31| 97人妻碰碰碰碰碰久久久久久| 五月婷视频| 另类A片| 丁香六月婷婷| 日本熟女一区二区| 婷婷五月天久久综合88| 精品国产va久久久久| 男男野外做爰全过程69| 无月播播激情在线观看视频| 五月丁香在线观看99| 色爱五月天| 呦呦视频无码播放| 日本毛片内射| 亚洲精品成人| 韩国天天婷婷| 狠狠干综合| 色级停停| 色婷操逼| 亚洲 小说 欧美 激情 另类| 日韩黄色电影| 夜夜操狠狠操| 丁香五月欧美午夜视频| 在线视频色五月| 97ai婷婷| 五月激情在线| 天天日综合| 就要去操亚洲成人精品五月天丁香婷婷| 成人 在线观看国产| 五月天婷婷激情| WWW丁香五月| 亚洲人妻电影| 第四色在线观看| 男女免费视频999| 丁香五月aV| 狠狠第四色| 俺也去五月婷婷丁| 久久婷婷色色| 欧美色五月天| 成人色站,在线视频,看片-SS1AV| 狠狠久久婷婷| 日本强伦片中文字幕免费看| 久久久久亚洲AV无码网影音先锋| 久热这里只有精品99re,久热这里只有精品7 | 久/久精品99看9| 先锋资源91| 国产精品久久7777777精品无码| 激情综合区| 久久婷婷桃花五月天| 久久久久久欧美精品se一二三四| 色爱99| 99青青草| 狠狠色丁香99| 婷婷色亚洲| 97热久久五月婷婷| 激情综合文学| 最近中文字幕2019视频1| 九九综合伊人| 色色亚洲视频| 天天橾夜夜爽| 六月丁香综合网| 天天做天天爱天天摸| 狼友超碰| 午夜日韩久久久网站| 丁香五月激情久久麻豆| www.yw尤物| 一级性爱视频| 色色狼人综合| 五月精品| 丁香色婷婷| 人人爽亚洲| 26uuu91| 天天综合天天做天天综合| www.日本久久videos| 久久婷婷网站| 91九色小视频| 色色色地址| 久久久大香蕉| 久久婷婷五月综合| 色五月中文网| 2025天天日爽| 天天操综合网| 丁香激情五月| 九九热在线视频| 日日干日日| WWW.17C亚洲精品| 26uuu国产| 婷婷五月色| 日本va欧美va国产激情| 人妻操逼视频| 这里只有精品视频99| 天天碰夜夜爽| 久久国产色| 五月天婷婷成人网| 国产97色在线 | 日韩| 激情久久久久久久久久| 91婷婷丁香五月| 久久与婷婷| 九月婷婷久久久| www.国产色| 婷婷五月丁香五月| 91精品久久久久久久久久| 最新无毒无码AV| 亚洲成人网址在线观看| 超级碰碰一区| 任你搞网站| 欧美内射AA| 久久黄色网扯| 久久婷婷一级片| 亚洲精品激情| 激情图片婷婷| 激情小说五月天| 天堂成人A片永久免费网站 | 吊色AV男人的天堂| 97超碰人人操| 包操45分钟网站| 婷婷射图五月天| 色色网站| 日韩成人电影AV| 丁香五月天激情综合| 伊人99久久| 色综合香蕉| 26uuu国自产精品| 思思精品久久艹| 99只有精品| 岛国AV网| 婷婷99视频全集高清| 久草丁香婷婷五月天婷| 九九热a| 五月天久久成人| 婷婷五月丁香在线视频| 97人妻碰碰中文无码久热丝袜| 丁香五月天啪啪| AV片在线观看| 中文字幕视频在线播放| 五月婷婷香蕉| 天天做天天爱天天爽| 99只有精品| 精品婷婷丁香五| 大香蕉五月丁香| 五月天久久成人| 噜噜狠狠色综合久| 99在线精品视频| 久久国产高清| 日本精品。999| 日韩在线一级| 国产精品久久久久久久久久免费| 五月五月婷婷| 亚洲色婷婷婷婷人人爽| 91啪啪网| 丁香88AV五月婷婷| 天天爽天天操| 色原狠狠综合| 欧美丁香六月在线观看视频| 五月久视频| 国产精产国品一二三在观看| 色娸娸综合网| 婷婷丁香五月天亚洲| 婷婷久月| 艹色18p| 色婷婷最爱五月| 91久久综合亚洲鲁鲁五月天| 色涩视频久久| 五月天婷a在线| 精品爆操| 九九色中文| 天天综合干| 操久久网| 久久嘟嘟丁香| 日韩色情亚洲五月天婷婷| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 五月色丁香| 色情成人五月天| 可以免费看av网站| 五月丁香999| 国产婷婷久久| 久久精品永久免费| JAPANRCEP老熟妇乱子伦视频 | 狠狠操天天干| 激情精品久久| 2025天天爽天天摸| 日日操夜夜撸| 色99网| 波多野结衣AV无码Porn| 91九色成人原创视频| 日日肏天天操| 一点色成人网| 五月天综合缴情网网站0| 婷婷五月天久久| 午夜丁香综合婷婷| 色婷婷五月在线| 99超级超级超级碰| 丁香五月婷婷激情123| a久久| 丁香五月婷婷久久久| 九九热免费| 99ri精品| 无码任你操| 天堂A∨在线| 婷婷永久在线| 99久久婷婷国产综合| 五月天婷婷网站888| 亚洲色激情| 第四色五月婷婷| 日韩肏屄网| 亚洲熟妇无码乱子AV电影| www.色情五月天.com| 色婷婷丁香五月天在线观看| 精品视频网| 婷婷色五月在线视频| 五月色情婷婷| 激情图片五月天| 欧美天天搞| 婷婷伊人综合中文字幕| 超碰三级片| 九九热中文| 99re这里只有精品99| 天天日夜夜拍| 激情五月激情综合网一级丸片| www.色婷婷| 亚洲丁香婷婷| 涩婷婷五月天| 大香蕉人人人| 亚洲区视频| 九九热这里有精品视频| 精国产品一区二区三区A片| 黄色99网| 婷婷五月在线| 丁香婷婷色情| 婷婷五月小说色综合| 色色激情| 五月 婷婷 成人| 丁香密臀AV激情网| 色色五月天婷婷| 五月天欧美 另类小说| 精品日本视频444| 99热在线观看免费精品| 91黄操| 五月色综合| 天天操夜夜爽| 丁香五月综合激情性爱| 久久婷婷视频| www,婷婷五月天777me,com| 99热日本精品| 丁香五月天网站| 色综合久久伊伊婷婷五月| 99热综合在线观看| 亚洲综合在线播放| 草操网| 欧美三级大片AA在线看| 激情久久五月天| 丁香婷五月天| 94干大香蕉| 操人91| 91精品综合久久久久久五月丁香 | 欧美碰碰| 五月天婷婷久久视频| 狠狠色精品综合| 超碰在线观看9| 国产精品第一国产精品| 五月开心激情| 狠狠色五月激情| 在线免费观看激情视频| 丁香婷婷影院| 色狠久| 激情综合女人网五月播播| 色婷婷影视99| 激情深爱五月天| 99热国产这里只有精品| 五月婷婷新网站| 婷婷日本色| 精品一二三区久久AAA片| 天天狠狠六月婷丁香影院| 久久婷婷六月| 丁香 亚洲 久久| 久久久国产精品黄毛片| 国産精品| 婷婷开心久久| 婷久看人爽| 伊人网碰碰| 九九精品丁香花| 久久婷五月| 97色女人在线| 天天干天天爽天天操| 九九综合色| 人人干人人操外国| 久久久国产精品黄毛片 | 狠狠va| 操久久网| 玖玖五月丁香| 超碰天堂网| 99热超碰| 91狠狠色丁香婷婷综合久久精品| 天天日夜夜拍| 久久99久久99精品免观看软件 | 丁香五月五婷| WWW五月天| 亚洲欧洲另类| 超碰日日操| 精品动漫 无码av| 综合AV网| 激情开心五月天| 99自拍视频| 91狠狠综合网| 色五月丁香婷婷久草| 五月天夜夜爱夜夜操| 久久九九免费大视频| 久久99免费视屏| 影视av久久久噜噜噜噜噜三级| 亚洲第一影院高清无码网站| 日韩精品一区二区三区,四区,五区视频| 九九热在线观看视频| 人人摸人人操人人爽| 色色色在线观看| 丁香婷婷情色五月天| 99热日韩| 五月婷婷视频28| 天天摸日日舔狠狠添婷婷婷| 色综啪啪网| 欧美成人AAA片一区国产精品| 亚洲精品婷婷| 狠狠色狠狠操| 九九精品免费| 丁香五月天啪啪| 思思热视频在线观看| 99热最新| 日日夜夜天天综合| 五月婷婷中文字幕| 少妇高潮一区二区三区99欧美| 亚洲婷婷91丁香| 97视频91| 五月大香蕉| 日本婷婷| 99在线精品观看99| 精品影院| WW婷婷五月天com| 1024人妻无码中文字幕| 亚洲国产网址| www.99精品视频| 久久久婷婷五月亚洲97号色| 五月婷婷色播| 9 1超碰九色| 2015好吊操| 五月婷婷六月丁香激情综合网| 激情综合色五月六月婷婷| 九九亚洲小视频| 国产精品热搜丁香五月婷婷| www激情婷婷com| enecarbon-materials.com污K127封锁请涟系@wip1688 | 五月丁香激情综合六月涩涩爱| www.99热在线观看| 久久之人妻| 天天艹夜夜爽| 蜜桃五月天| 丁香六月激情四射| 99热老网站| 丁香婷婷综合激情五月色| 婷婷大香焦| aaaa.黄| 五月丁香色色网| 久久狠色噜噜狠狠狠狠97| 99精品在线下载| 婷婷色导航| 97碰碰人人| 国产亚洲成AV人片在线观黄桃| 日韩AC在线免费观看| 久久玖玖综合| 色婷婷丁香网| 人人操人av| 婷婷综合97| 日韩成人精品中文字幕| 色婷婷91激情小说| 99热热这里只精品996小说| 天天爽夜夜爽夜夜爽精品| 亚洲99在线| 操逼六区| 欧类av怡春院| 亚洲成人av在线播放| j久久性爱视频| 国产精品香蕉| 九月丁香| 国产99久| 亚洲啪啪啪啪| 夜夜爽天操| 丁香五月天堂| www,setingting| 97色婷| 看国产探花操逼三级片| 九九热黄色| 久久婷五月影院| 337p大胆噜噜噜噜噜91Av| www.lingjunshare.com| 久久人操| 中文AV网站| 毛片网站谁有| 99热激情| 成人片黄网站色大片免费毛片 | 一级操逼内射在线视频| 九九精品热| 欧美色色日韩| 青青草a在线| 五月丁香六月婷婷久久肏| 最近中文字幕2019视频1| 一区视频网站| 五月婷色激情五月| 99久久99九九99九九九| 五月丁香花激情综合网| 97碰碰人人视频| www。狠狠干。com| 99丁香五月婷| 情欲禁地| 91九色视频| 天天插天天插天天插天天插| 99综合网| 激情综合九月| jiqingliuyuetian| CHINESE熟女老女人HD视频| 综激情网| 开心深爱激情网| 欧美内射AAAAAAXXXXX| 五月综合激情| rr天天操| 久久免费少妇高潮99精品| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 六月激情网| 影视av久久久噜噜噜噜噜三级| 俺去啦综合网| 午夜不卡久久精品无码免费| 激情五月丁香五月| 精品99在线| 天天网曰日曰夜夜综合永久免费| 五月丁香婷婷婷婷综合网| 婷婷色综合| 久热婷婷| 婷婷五月花| A1片久久久| 五月婷婷五月天在线| 色婷婷精| 色五月婷激情| 99ER热精品视频| 五月丁香激情片| 久久九九网| 亚洲综合婷婷五月| 丁香久久五月婷综合| 丁香婷婷性久久| 夜夜爱网站| 精品国产a| 色99热| 亚洲情欲久久| 天天射色五月天| 日韩av在线播放综合网| 六月天丁婷婷| 五月婷婷伊| 99色免费视频| 色吊丝99| 狠狠干夜夜干| 亚洲免费电影2| 天天日综合| 超碰在线中文字幕| 99视频网址| 国产精品操| 另类激情五月| 久er免费视频| 91婷婷| 亚洲另类婷婷五月综合| 9视频在线成人网站|