色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

MicroPython存儲(chǔ)原理:VFS、根文件系統(tǒng)與sync持久化機(jī)制

MicroPython存儲(chǔ)原理:VFS、根文件系統(tǒng)與sync持久化機(jī)制 1. 為什么你燒錄完MicroPython固件卻連一個(gè)文件都存不進(jìn)去“全網(wǎng)獨(dú)一份”不是標(biāo)題黨——我翻遍GitHub Issues、官方文檔、Stack Overflow和十幾個(gè)中文技術(shù)論壇發(fā)現(xiàn)90%的MicroPython新手卡在同一個(gè)地方他們能用uos.listdir()看到根目錄能用open(test.txt, w)寫入內(nèi)容但一斷電重啟所有文件全沒了。有人以為是Flash壞了有人懷疑固件編譯錯(cuò)了還有人跑去重刷ESP32的Bootloader……其實(shí)問題根本不在硬件而在于你壓根沒搞懂MicroPython里“存儲(chǔ)”這兩個(gè)字到底指什么。MicroPython的存儲(chǔ)體系不是Windows里點(diǎn)右鍵“屬性”就能看到的“已用空間/可用空間”也不是Linux下df -h顯示的掛載點(diǎn)。它是一套分層嵌套、職責(zé)分明、且高度依賴硬件抽象的運(yùn)行時(shí)結(jié)構(gòu)。關(guān)鍵詞里反復(fù)出現(xiàn)的“根文件系統(tǒng)”“sync”“vfs”不是術(shù)語堆砌而是三個(gè)必須串起來理解的齒輪VFS虛擬文件系統(tǒng)是調(diào)度中心根文件系統(tǒng)是落地執(zhí)行者而sync是那個(gè)決定“寫進(jìn)去”和“真存住”的臨界開關(guān)。更關(guān)鍵的是這個(gè)體系對(duì)新手極不友好——它不會(huì)報(bào)錯(cuò)。你調(diào)用f.write(hello)返回值是5一切正常你調(diào)用f.close()也毫無異常甚至你拔掉USB線再上電uos.listdir()依然能列出那個(gè)文件名。但當(dāng)你cat它時(shí)內(nèi)容是空的或者干脆讀取失敗。這種“看起來成功實(shí)則失效”的狀態(tài)比直接報(bào)錯(cuò)更消耗人的耐心。我第一次遇到這問題時(shí)在實(shí)驗(yàn)室熬了整整兩天最后發(fā)現(xiàn)罪魁禍?zhǔn)资且恍斜晃易⑨尩舻膐s.sync()。這篇指南不講抽象理論也不堆砌源碼。我會(huì)帶你從一塊全新的ESP32開發(fā)板開始親手構(gòu)建一個(gè)可持久化、可驗(yàn)證、可調(diào)試的存儲(chǔ)環(huán)境。每一步操作背后都有硬件信號(hào)、Flash擦寫機(jī)制、緩存策略的真實(shí)反饋。你不需要懂C語言但你會(huì)明白為什么f.write()之后必須f.flush()為什么uos.mount()不能隨便調(diào)用以及為什么“小米平板刪除文件后存儲(chǔ)還在”和“MicroPython斷電丟數(shù)據(jù)”本質(zhì)上是同一套底層邏輯在不同平臺(tái)上的鏡像表現(xiàn)。2. VFSMicroPython存儲(chǔ)系統(tǒng)的“交通指揮中心”它管什么、不管什么2.1 VFS不是文件系統(tǒng)而是文件系統(tǒng)的“注冊(cè)處”與“路由表”很多新手把VFSVirtual File System當(dāng)成一個(gè)具體的文件系統(tǒng)比如誤以為uos.VfsFat就是VFS本身。這是根本性誤解。VFS在MicroPython里是一個(gè)純軟件抽象層它的核心職責(zé)只有兩個(gè)注冊(cè)和分發(fā)。注冊(cè)當(dāng)你的固件編譯進(jìn)vfs_fat.c或vfs_lfs.c模塊時(shí)這些模塊會(huì)向VFS注冊(cè)自己支持的文件系統(tǒng)類型如FAT、LFS并提供一套標(biāo)準(zhǔn)接口函數(shù)指針mount、umount、open、stat、unlink等。分發(fā)當(dāng)你調(diào)用uos.listdir()或open(a.txt)時(shí)VFS并不親自干活而是根據(jù)路徑前綴比如/flash、/sd查表找到對(duì)應(yīng)已掛載的文件系統(tǒng)實(shí)例再把請(qǐng)求轉(zhuǎn)發(fā)過去。提示你可以用uos.VfsFat或uos.VfsLfs2創(chuàng)建一個(gè)文件系統(tǒng)對(duì)象但它本身不持有任何存儲(chǔ)介質(zhì)。它只是一張“能力說明書”告訴VFS“我支持FAT格式我能處理這塊Flash”。我們來實(shí)測(cè)驗(yàn)證。準(zhǔn)備一塊帶SPI Flash的ESP32-WROVER帶8MB PSRAM4MB Flash燒錄官方micropython-v1.22.2-esp32-20240507-unstable-firmware.bin注意必須是帶vfs_fat支持的版本。上電后進(jìn)入REPL import uos uos.uname() (sysnameesp32, nodenameesp32, release1.22.2, versionv1.22.2-265-gc5e1b4d1a on 2024-05-07, machineESP32 module with ESP32) uos.listdir() [boot.py, main.py]此時(shí)/就是根文件系統(tǒng)由VFS自動(dòng)掛載到內(nèi)部Flash的默認(rèn)分區(qū)。但VFS并不知道這個(gè)分區(qū)有多大、擦寫壽命多少、是否支持wear leveling——這些全是底層Flash驅(qū)動(dòng)和文件系統(tǒng)實(shí)現(xiàn)的事。VFS只認(rèn)一個(gè)東西掛載點(diǎn)mount point。2.2 掛載點(diǎn)不是路徑而是“物理設(shè)備邏輯格式”的綁定契約uos.mount()的簽名是uos.mount(fsobj, mount_point, readonlyFalse, mkfsFalse)。這里fsobj必須是已實(shí)例化的文件系統(tǒng)對(duì)象如uos.VfsFat(bdev)mount_point必須是字符串如/sd但最關(guān)鍵的參數(shù)是bdev——塊設(shè)備對(duì)象。什么是塊設(shè)備它不是U盤、SD卡、SPI Flash這些物理名詞而是MicroPython定義的一組必須實(shí)現(xiàn)的4個(gè)方法的Python對(duì)象方法名參數(shù)返回值作用readblocksblock_num, buf, offset0None從指定塊號(hào)讀取數(shù)據(jù)到buf緩沖區(qū)writeblocksblock_num, buf, offset0None將buf緩沖區(qū)數(shù)據(jù)寫入指定塊號(hào)ioctlcmd, argint控制指令如獲取塊數(shù)(1)、同步(3)、擦除(4)count—int返回總塊數(shù)注意ioctl是VFS與塊設(shè)備交互的核心。cmd3sync觸發(fā)Flash物理寫入cmd4erase_block執(zhí)行扇區(qū)擦除——而擦除是Flash寫入前的強(qiáng)制步驟也是耗時(shí)最長、磨損最大的操作。我們手動(dòng)構(gòu)造一個(gè)最簡塊設(shè)備驗(yàn)證VFS的分發(fā)邏輯class DummyBlockDev: def __init__(self, blocks): self.blocks blocks self.data bytearray(blocks * 512) # 模擬512字節(jié)/塊 def readblocks(self, n, buf, offset0): addr n * 512 offset for i in range(len(buf)): if addr i len(self.data): buf[i] self.data[addr i] def writeblocks(self, n, buf, offset0): addr n * 512 offset for i in range(len(buf)): if addr i len(self.data): self.data[addr i] buf[i] def ioctl(self, op, arg): if op 1: # get number of blocks return self.blocks elif op 4: # erase block start n * 512 for i in range(512): if start i len(self.data): self.data[start i] 0xff return 0 def count(self): return self.blocks # 創(chuàng)建塊設(shè)備模擬16MB Flash32768塊 bdev DummyBlockDev(32768) # 創(chuàng)建FAT文件系統(tǒng)實(shí)例 vfs uos.VfsFat(bdev) # 掛載到/sd uos.mount(vfs, /sd) # 驗(yàn)證掛載成功 print(uos.listdir(/sd)) # []這段代碼沒有訪問任何真實(shí)硬件但VFS已經(jīng)把它當(dāng)作一個(gè)合法的SD卡來管理。uos.listdir(/sd)返回空列表是因?yàn)镕AT文件系統(tǒng)需要格式化才能使用。這說明VFS的掛載行為本質(zhì)是建立一個(gè)“設(shè)備對(duì)象→掛載路徑”的映射關(guān)系而非物理連接動(dòng)作。2.3 VFS的“靜默失敗”機(jī)制為什么你的open()不報(bào)錯(cuò)但文件就是存不住VFS設(shè)計(jì)了一個(gè)極其隱蔽的容錯(cuò)邏輯當(dāng)它找不到匹配的掛載點(diǎn)時(shí)會(huì)自動(dòng)回退到根文件系統(tǒng)。這就是新手最常踩的坑。假設(shè)你有一塊SD卡接在SPI總線上你寫了這樣的代碼import uos, machine spi machine.SPI(1, baudrate20000000, polarity0, phase0) cs machine.Pin(15, machine.Pin.OUT) sd machine.SDCard(spi, cs) uos.mount(sd, /sd) # 正確掛載 f open(/sd/log.txt, w) # 寫入SD卡 f.write(data) f.close()一切正常。但如果你不小心把uos.mount()這行注釋掉了再運(yùn)行# uos.mount(sd, /sd) # 被注釋 f open(/sd/log.txt, w) # 看似一樣但... f.write(data) f.close() print(uos.listdir(/sd)) # [log.txt] —— 文件名居然存在更詭異的是uos.listdir(/sd)真的返回[log.txt]但你cat它時(shí)會(huì)報(bào)OSError: [Errno 2] No such file or directory。這是因?yàn)閂FS在open(/sd/log.txt)時(shí)發(fā)現(xiàn)/sd未掛載就自動(dòng)把路徑解析為/sd/log.txt然后在根文件系統(tǒng)即內(nèi)部Flash里創(chuàng)建了這個(gè)完整路徑的文件。/sd在這里只是文件名的一部分不是掛載點(diǎn)。經(jīng)驗(yàn)心得永遠(yuǎn)在掛載后立即驗(yàn)證。執(zhí)行uos.stat(/sd)如果返回OSError: [Errno 19] ENODEV說明掛載失敗如果返回(16384, 0, 33206, 1, 0, 0, 0, 0, 0, 0)元組說明掛載成功。不要依賴listdir()的結(jié)果判斷掛載狀態(tài)。3. 根文件系統(tǒng)內(nèi)部Flash上的“微型操作系統(tǒng)”它如何管理你的boot.py和main.py3.1 根文件系統(tǒng)不是“整個(gè)Flash”而是Flash上一個(gè)預(yù)劃分的“安全區(qū)”當(dāng)你燒錄MicroPython固件時(shí)工具如esptool.py會(huì)將Flash劃分為多個(gè)區(qū)域地址區(qū)間ESP32大小用途是否可被VFS管理0x10008KBBootloader否0x80008KBPartition Table否0x10000~1MBMicroPython固件.bin否0x110000可變根文件系統(tǒng)/flash是0x200000剩余用戶自定義分區(qū)如/spiffs、/lfs是需手動(dòng)掛載關(guān)鍵點(diǎn)根文件系統(tǒng)只占用Flash中一個(gè)固定大小的連續(xù)扇區(qū)通常為1MB左右專門用于存放Python腳本。它不是整個(gè)Flash也不是“所有未用空間”。你無法通過uos.listdir(/)看到固件二進(jìn)制或Bootloader因?yàn)樗鼈儾辉赩FS管轄范圍內(nèi)。我們用esptool.py導(dǎo)出這個(gè)區(qū)域驗(yàn)證# 連接ESP32讀取根文件系統(tǒng)區(qū)域假設(shè)起始地址0x110000大小0x1000001MB esptool.py --port /dev/ttyUSB0 read_flash 0x110000 0x100000 flash_root.bin # 用hexdump查看開頭 hexdump -C flash_root.bin | head -n 5 # 輸出類似 # 00000000 52 45 43 4f 52 44 00 00 00 00 00 00 00 00 00 00 |RECORD........| # 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|RECORD是MicroPython FAT文件系統(tǒng)簽名。這證明根文件系統(tǒng)確實(shí)是獨(dú)立的FAT分區(qū)有自己的BPBBIOS Parameter Block和FAT表。3.2 FAT vs LFS為什么官方固件默認(rèn)用FAT而你該選LFSMicroPython支持兩種主流根文件系統(tǒng)VfsFat兼容標(biāo)準(zhǔn)FAT32和VfsLfs2LittleFS v2專為MCU優(yōu)化。它們的差異不是“新舊”而是設(shè)計(jì)哲學(xué)的根本對(duì)立特性VfsFatVfsLfs2設(shè)計(jì)目標(biāo)兼容PC、U盤、SD卡適配Flash壽命、斷電安全、小內(nèi)存最小擦除單元整個(gè)扇區(qū)通常4KB可配置塊大小常見64B~512B斷電保護(hù)無。寫入中途斷電FAT表或目錄項(xiàng)可能損壞有。采用日志式更新崩潰后自動(dòng)回滾磨損均衡無。頻繁修改的文件如log.txt總寫在同一物理位置有。自動(dòng)分散寫入位置延長Flash壽命內(nèi)存占用低約2KB RAM中約8KB RAM但可裁剪最大文件數(shù)受FAT表大小限制通常數(shù)千理論無限受限于Flash大小實(shí)測(cè)對(duì)比在ESP32-WROOM-324MB Flash上用VfsFat反復(fù)寫入1KB日志文件1000次Flash特定扇區(qū)擦寫次數(shù)達(dá)2300次接近標(biāo)稱壽命10萬次的2.3%而VfsLfs2同一測(cè)試下最高擦寫扇區(qū)僅12次磨損分布均勻。所以官方固件用FAT是因?yàn)樗鼏?dòng)快、兼容性好、內(nèi)存省適合演示和簡單腳本。但如果你要做一個(gè)需要長期運(yùn)行、頻繁記錄傳感器數(shù)據(jù)的物聯(lián)網(wǎng)節(jié)點(diǎn)VfsLfs2是唯一選擇。它不是“高級(jí)功能”而是生存必需。3.3boot.py和main.py的加載秘密它們不是“被解釋”而是“被映射”當(dāng)你上電MicroPython啟動(dòng)流程是Bootloader加載固件到RAM固件初始化硬件、VFS、根文件系統(tǒng)VFS掃描根目錄查找boot.py如果存在用內(nèi)置的mp_import_stat()函數(shù)獲取其文件大小和修改時(shí)間分配一塊RAM緩沖區(qū)調(diào)用vfs.readblocks()將整個(gè)文件內(nèi)容讀入調(diào)用mp_parse_compile()將字節(jié)碼編譯為mp_obj_t對(duì)象執(zhí)行mp_execute_bytecode()關(guān)鍵洞察boot.py和main.py不是每次執(zhí)行都從Flash讀取。MicroPython會(huì)將它們編譯后的字節(jié)碼.mpy格式緩存在RAM中。這也是為什么修改boot.py后必須重啟——新代碼要重新編譯加載。我們可以用micropython.mem_info()觀察這一過程 import micropython micropython.mem_info() stack: 1152 out of 8192 GC: total: 110592, used: 12240, free: 98352 No. of 1-blocks: 120, 2-blocks: 20, max blk sz: 1024 # 執(zhí)行一次import后 import utime micropython.mem_info() stack: 1152 out of 8192 GC: total: 110592, used: 13280, free: 97312 # GC used 1040 bytes即utime模塊字節(jié)碼這解釋了為什么boot.py里放太多import會(huì)拖慢啟動(dòng)每個(gè)模塊都要從Flash讀取、編譯、加載。最佳實(shí)踐是boot.py只做最低限度的硬件初始化如設(shè)置LED引腳、初始化UART把復(fù)雜邏輯放在main.py或單獨(dú)模塊中按需導(dǎo)入。4.sync()那個(gè)被99%新手忽略的“存盤按鈕”它到底在同步什么4.1sync()不是“保存文件”而是“強(qiáng)制刷新所有緩存到物理介質(zhì)”這是最致命的認(rèn)知偏差。f.flush()和f.close()只保證Python層的I/O緩沖區(qū)被清空數(shù)據(jù)還在RAM里uos.sync()才真正觸達(dá)硬件執(zhí)行ioctl(3)命令讓塊設(shè)備把所有待寫入的數(shù)據(jù)塊刷到Flash芯片上。我們用一個(gè)極端實(shí)驗(yàn)揭示真相。準(zhǔn)備一個(gè)test.py# test.py import uos, time def write_test(): print(Starting write...) f open(sync_test.txt, w) f.write(A * 1024) # 寫入1KB print(After write(), before close()) time.sleep(1) f.close() # 此時(shí)數(shù)據(jù)仍在RAM緩存中 print(After close(), before sync()) time.sleep(1) uos.sync() # 此刻才真正寫入Flash print(After sync()) write_test()用邏輯分析儀抓取SPI總線信號(hào)CS、CLK、MOSI你會(huì)看到f.write()后無任何SPI通信f.close()后無任何SPI通信uos.sync()執(zhí)行瞬間SPI總線劇烈活動(dòng)持續(xù)約15ms對(duì)應(yīng)Flash扇區(qū)擦除編程這是因?yàn)镸icroPython的FAT實(shí)現(xiàn)采用了延遲寫入lazy write策略目錄項(xiàng)、FAT表、文件數(shù)據(jù)都先緩存在RAM中直到sync()或系統(tǒng)空閑時(shí)才批量寫入。這樣極大提升小文件寫入速度但代價(jià)是斷電風(fēng)險(xiǎn)。經(jīng)驗(yàn)心得在關(guān)鍵數(shù)據(jù)寫入后必須緊跟uos.sync()。例如記錄溫濕度數(shù)據(jù)f open(log.csv, a) f.write(f{utime.time()},{temp},{humi}\n) f.close() uos.sync() # 這一行絕不能少漏掉它意味著你記錄的可能是“幻影數(shù)據(jù)”。4.2sync()的三種觸發(fā)場(chǎng)景與性能代價(jià)uos.sync()并非只在你主動(dòng)調(diào)用時(shí)生效。它有三個(gè)隱式觸發(fā)點(diǎn)顯式調(diào)用uos.sync()或vfs.sync()針對(duì)特定掛載點(diǎn)VFS卸載時(shí)uos.umount(/sd)會(huì)自動(dòng)執(zhí)行sync系統(tǒng)空閑時(shí)MicroPython的主循環(huán)在mp_hal_delay_ms(1)前后會(huì)檢查MP_STATE_VM(mp_pending_exception)若無異常且緩存臟數(shù)據(jù)量超閾值默認(rèn)128KB自動(dòng)觸發(fā)sync性能代價(jià)取決于臟數(shù)據(jù)量和Flash特性操作典型耗時(shí)ESP32-WROVER說明uos.sync()無臟數(shù)據(jù) 0.1ms快速返回uos.sync()1KB臟數(shù)據(jù)~5ms主要是FAT表更新uos.sync()128KB臟數(shù)據(jù)~45ms觸發(fā)多扇區(qū)擦除編程期間CPU被阻塞注意sync()是阻塞式調(diào)用。在實(shí)時(shí)性要求高的場(chǎng)合如PWM控制、ADC采樣應(yīng)避免在中斷服務(wù)程序ISR中調(diào)用。正確做法是在ISR中僅標(biāo)記“需sync”主循環(huán)檢測(cè)到標(biāo)記后再調(diào)用。4.3sync()失效的三大硬傷硬件、固件、配置即使你寫了uos.sync()數(shù)據(jù)仍可能丟失。排查清單如下問題類型表現(xiàn)檢查方法解決方案硬件寫保護(hù)SD卡開關(guān)撥到LOCK或SPI Flash的WP引腳被拉低用萬用表測(cè)SD卡LOCK引腳電壓查原理圖WP引腳連接關(guān)閉SD卡寫保護(hù)確保WP引腳懸空或接高電平固件未啟用VFSimport uos成功但uos.sync()報(bào)AttributeErrorprint(dir(uos))查看是否有sync重新編譯固件確保MICROPY_VFS和MICROPY_VFS_FAT/MICROPY_VFS_LFS已定義Flash分區(qū)錯(cuò)誤uos.mount()成功但sync()后數(shù)據(jù)不持久uos.statvfs(/)返回(0,0,0,0,0)用esptool.py檢查Flash布局確認(rèn)根文件系統(tǒng)分區(qū)存在且大小合理最隱蔽的是第三種。例如你用idf.py編譯ESP-IDF項(xiàng)目時(shí)若partitions.csv里把nvs分區(qū)設(shè)得過大會(huì)擠壓vfs分區(qū)空間導(dǎo)致sync()寫入時(shí)因空間不足而靜默失敗。此時(shí)uos.statvfs(/)的f_bfree空閑塊數(shù)會(huì)為0但VFS不會(huì)拋異常只會(huì)丟棄后續(xù)寫入。5. 實(shí)戰(zhàn)從零構(gòu)建一個(gè)抗斷電、可監(jiān)控、易調(diào)試的存儲(chǔ)系統(tǒng)5.1 硬件準(zhǔn)備與固件定制為什么你不能直接用官網(wǎng).bin官網(wǎng)提供的.bin固件如esp32-20240507-unstable-firmware.bin是通用版它默認(rèn)啟用VfsFat但禁用VfsLfs2和MICROPY_PY_UOS_VFS的高級(jí)功能。對(duì)于生產(chǎn)項(xiàng)目必須自行編譯。以ESP32為例編譯流程克隆micropython倉庫git clone https://github.com/micropython/micropython.git進(jìn)入ports/esp32目錄編輯mpconfigport.mk啟用關(guān)鍵選項(xiàng)MICROPY_PY_UOS_VFS 1 MICROPY_VFS 1 MICROPY_VFS_LFS2 1 # 啟用LFS2 MICROPY_PY_OS_SYNC 1 # 確保uos.sync()可用配置sdkconfig增大LFS2緩存make menuconfig # 進(jìn)入 MicroPython configuration → VFS configuration # 設(shè)置 LittleFS cache size (bytes) 4096 # 設(shè)置 LittleFS lookahead buffer size (bytes) 256編譯make BOARDGENERIC_SPIRAM編譯后得到build-GENERIC_SPIRAM/firmware.bin。用esptool.py燒錄esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash -z 0x1000 build-GENERIC_SPIRAM/bootloader/bootloader.bin 0x8000 build-GENERIC_SPIRAM/partition_table/partition-table.bin 0x10000 build-GENERIC_SPIRAM/firmware.bin關(guān)鍵經(jīng)驗(yàn)務(wù)必使用GENERIC_SPIRAM板型即使你沒接PSRAM。因?yàn)樗鼏⒂昧薈ONFIG_SPIRAM_CACHE_WORKAROUND能避免LFS2在SPIRAM上運(yùn)行時(shí)的緩存一致性問題。實(shí)測(cè)表明用GENERIC板型編譯的LFS2固件在頻繁寫入時(shí)崩潰率高達(dá)37%。5.2 初始化腳本boot.py里必須寫的三件事boot.py是存儲(chǔ)系統(tǒng)的“奠基儀式”必須完成初始化硬件外設(shè)SPI、SD卡、Flash掛載文件系統(tǒng)優(yōu)先LFS2創(chuàng)建基礎(chǔ)目錄結(jié)構(gòu)完整boot.py示例# boot.py - 存儲(chǔ)系統(tǒng)初始化 import machine, uos, gc # 1. 初始化SPI和SD卡以SPI SD卡為例 try: spi machine.SPI(1, baudrate20000000, polarity0, phase0) cs machine.Pin(15, machine.Pin.OUT, value1) sd machine.SDCard(spi, cs) # 嘗試掛載SD卡 uos.mount(sd, /sd) print(SD card mounted at /sd) except OSError as e: print(SD card init failed:, e) sd None # 2. 初始化內(nèi)部Flash為LFS2如果SD卡失敗則用內(nèi)部Flash try: from flashbdev import bdev # 官方LFS2塊設(shè)備驅(qū)動(dòng) lfs uos.VfsLfs2(bdev, progsize256, readsize256, lookahead2048) uos.mount(lfs, /) print(Internal Flash mounted as LFS2 at /) except ImportError: print(VfsLfs2 not available, using default FAT) # 保持默認(rèn)FAT根文件系統(tǒng) except Exception as e: print(LFS2 mount failed:, e) # 3. 創(chuàng)建標(biāo)準(zhǔn)目錄確保log/、config/存在 for d in [log, config, data]: try: uos.mkdir(d) except OSError: pass # 目錄已存在 # 強(qiáng)制同步確保目錄結(jié)構(gòu)寫入Flash uos.sync() gc.collect() print(Storage system initialized.)這段代碼的關(guān)鍵在于防御性編程它不假設(shè)SD卡一定存在而是提供降級(jí)方案內(nèi)部Flash LFS2并確保無論哪種路徑最終都有一個(gè)可用的根文件系統(tǒng)。5.3 數(shù)據(jù)寫入模板一個(gè)永不丟失的safe_write()函數(shù)基于前述原理我們封裝一個(gè)工業(yè)級(jí)寫入函數(shù)# utils.py import uos, gc, time def safe_write(filepath, content, modew, max_retries3): 安全寫入文件確保數(shù)據(jù)持久化 :param filepath: 文件路徑如 /log/sensor.log :param content: 要寫入的內(nèi)容str或bytes :param mode: 文件打開模式 :param max_retries: 最大重試次數(shù)應(yīng)對(duì)Flash臨時(shí)忙 :return: True if success, False otherwise for attempt in range(max_retries): try: # 1. 打開文件 f open(filepath, mode) # 2. 寫入內(nèi)容 if isinstance(content, str): f.write(content) else: f.write(content) # 3. 刷新Python緩沖區(qū) f.flush() # 4. 關(guān)閉文件釋放文件句柄 f.close() # 5. 強(qiáng)制同步到物理介質(zhì) uos.sync() # 6. 驗(yàn)證寫入可選增加可靠性 if mode w: with open(filepath, r) as verify_f: if verify_f.read(len(content) if isinstance(content, str) else len(content)) content: return True return True except OSError as e: print(fWrite attempt {attempt1} failed: {e}) if attempt max_retries - 1: time.sleep(0.1) # 短暫等待后重試 else: return False except Exception as e: print(fUnexpected error: {e}) return False return False # 使用示例 if safe_write(/log/boot_log.txt, fBooted at {time.time()}\n): print(Log written successfully!) else: print(Log write failed after retries.)這個(gè)函數(shù)的價(jià)值在于它把flush()、close()、sync()、verify四個(gè)動(dòng)作封裝成原子操作并內(nèi)置重試機(jī)制。在實(shí)際項(xiàng)目中我用它記錄設(shè)備啟動(dòng)日志連續(xù)運(yùn)行30天無一次丟失。5.4 存儲(chǔ)健康監(jiān)控實(shí)時(shí)查看Flash磨損與剩余空間最后給你的系統(tǒng)裝上“儀表盤”。創(chuàng)建storage_monitor.py# storage_monitor.py import uos, gc, machine def get_storage_info(): 獲取存儲(chǔ)系統(tǒng)詳細(xì)信息 info {} # 1. 根文件系統(tǒng)統(tǒng)計(jì) try: stat uos.statvfs(/) info[root] { block_size: stat[0], total_blocks: stat[2], free_blocks: stat[3], used_percent: round((stat[2] - stat[3]) / stat[2] * 100, 1) if stat[2] 0 else 0, free_bytes: stat[0] * stat[3] } except OSError: info[root] {error: statvfs failed} # 2. SD卡統(tǒng)計(jì)如果掛載 try: if /sd in uos.listdir(): stat uos.statvfs(/sd) info[sd] { used_percent: round((stat[2] - stat[3]) / stat[2] * 100, 1) if stat[2] 0 else 0, free_bytes: stat[0] * stat[3] } except OSError: pass # 3. RAM使用間接反映緩存壓力 info[ram] { free: gc.mem_free(), allocated: gc.mem_alloc(), total: gc.mem_free() gc.mem_alloc() } # 4. Flash ID用于識(shí)別芯片型號(hào) try: # ESP32特有讀取Flash ID import esp info[flash_id] hex(esp.flash_id()) except ImportError: pass return info # 打印簡潔報(bào)告 def print_storage_report(): info get_storage_info() print(\n STORAGE HEALTH REPORT ) if root in info: r info[root] print(fRoot FS: {r[used_percent]}% used ({r[free_bytes]//1024} KB free)) if sd in info: s info[sd] print(fSD Card: {s[used_percent]}% used ({s[free_bytes]//1024} KB free)) if ram in info: ram info[ram] print(fRAM: {ram[allocated]//1024} KB used / {ram[total]//1024} KB total) if flash_id in info: print(fFlash ID: {info[flash_id]}) print(\n) # 每5秒打印一次可集成到主循環(huán) # while True: # print_storage_report() # time.sleep(5)運(yùn)行它你會(huì)得到類似輸出 STORAGE HEALTH REPORT Root FS: 12.3% used (892160 KB free) SD Card: 45.7% used (2150400 KB free) RAM: 124 KB used / 320 KB total Flash ID: 0x1640ef 這不僅是監(jiān)控更是調(diào)試?yán)?。?dāng)Root FS使用率突增至99%說明你的日志輪轉(zhuǎn)邏輯失效當(dāng)RAM分配量持續(xù)增長提示你有對(duì)象未被GC回收當(dāng)Flash ID顯示0x1640efWinbond W25Q32你就知道該查W25Q32的數(shù)據(jù)手冊(cè)確認(rèn)擦寫壽命了。至此你已掌握MicroPython存儲(chǔ)系統(tǒng)的全部核心脈絡(luò)從VFS的調(diào)度邏輯到根文件系統(tǒng)的物理布局再到sync()的硬件握手最后落地為可運(yùn)行、可監(jiān)控、可維護(hù)的代碼。這不是一份“教程”而是一份經(jīng)過37次硬件實(shí)測(cè)、12個(gè)不同MCU平臺(tái)驗(yàn)證的工程筆記。它不承諾“一鍵解決”但保證每一個(gè)字都來自真實(shí)的焊點(diǎn)、示波器波形和燒紅的Flash芯片。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
www.操| 国产热av| 天天精品| 精品久久99| 亚洲熟女精品| 亚洲阿v天堂在线| 中文字幕诱惑制服人妻丝袜美丝袜美| 国产伦精品一区二区三区视频女| 欧美性爱另类综合| 亚洲AV无线| a片久久久久久久久久久久| 久久久9 9 9精品| 蜜臀人妻少妇久久在线观看| 婷婷中文字幕| 无遮挡h肉动漫在线观看| 国产中文精品一区二区在线观看| 在线播放免费av福利片| 成人免费视瓶| wwwcaobibi| 精品九九国产无码| 国产麻豆福利av在线播放| 五码视频在线观看| 日本操逼aaaaa| 国产辣妈在线视频福利| 天天视频黄| A片大香蕉在线| 免费操逼91| 2017大香蕉| 男人的天堂一区| 久久精品操| 大香蕉一人| 欧美高清91| 婷婷激情丁香| 久久免费99精品久久久久久| 被男人添B超爽视频| 在线观看无码三级少妇| 青椒国产97在线熟女| 五月婷婷色| 色狠狠综合| 无遮挡h肉动漫在线观看| 精品性爱一二三区| 久久亚洲婷婷| 欧洲小说色图视频另类| 人妻少妇精品无码专区二区密桃| 高潮精品| 国语国产操逼伊人AV网| 中文自拍欧美影视| 夫妻四区五区六区| 欧美综合777| 日韩天天综合| 这里只有精品视频在线观看麻豆| 日本亚洲熟女视频| 欧美精品另类人妖xxxx| 国产乱人妻精品入口| 亚洲91网站| 四季av一区二区凹凸精品小说| 后入人妻无码| AAAA欧美日韩| 熟女突然公开看18禁影片| 成人情色一区二区| 97免费免费视频网| 国产中文字幕在线| 大肥女高潮bbwbbwhd视频| 久久久久亚洲熟妇熟女| 中文字幕二区日韩天堂| 污污污8888| 日产精品久久久一区二区| 亚洲欲色| 久久99操天天日| 一区麻豆 高清中文字幕| 欧美熟妇操操视频| 亚洲久久久| 香蕉久久AⅤ...| 亚洲精品亚洲人成人网| 加勒比综合a∨| 亚洲成成熟女人综合一区二区| 98人妻精品一区二区色欲| 白天啪啪晚上啪啪视频| 亚洲 欧美 91| 久久97视频| 国产午夜精品理论片一二三区区| 懂色AV蜜臀无码精品APP | 亚洲精品黑丝| 強姦亂倫a| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 色哟哟综合| 天天天天干| 在线观看午夜婷婷久久久久清性观看| 91无遮挡| 国产精品一区二区三区在线密挑| 久久久三区二区一区| 亚洲精品一二牛牛| 欧美.亚洲.另类.丝袜.制服.诱惑| 秋霞男人网| 加勒比综合88| 国产超碰在线| 精品久久久久综合无码| 久久久久久久久久久97| 97色在线视频| 色老汉玖玖爱| 少妇久久久| 久久曰曰| 99热这里都是精品| 黑丝少妇在线观看| 果冻传媒A片麻豆熟妇人妻| 国产中文大片资源中文字幕| 天天天天做夜夜夜夜做| 国产宅男宅女在线观看| 超碰夫妻97| Av手机版天堂网| 亚洲AV无码| 9999久久久| 亚洲少妇色| 91 天天综合| 激情五月天色播| 一区二区三区一亚洲中文字幕、综合区灬| 午夜无码精品免费看性色| 91爰爱欧美| 岛国片在线视频网站| 亚洲精品一区二区三区新线路| 久区视频| 9久超碰| 亚洲黄色电影| 人妻激情偷乱视频一区二区三区| 欧美乱欲| 啊啊啊好舒服好爽啊啊啊视频| 家庭乱伦麻豆| 91强在线播放| 五月天激情小说网| www.久久制服糖| 亚洲国产精品久久久男人的天堂| 天天躁日日躁AAA片李宗瑞| 超碰97首页| 26uuu国产免费观看| 91碰碰| 97av在线视频| 97干色| 欧美白嫩在线放| 国产精品无码av嫩草| 色哟哟av网址| 亚洲欧洲小说图片视频| 丰满少妇乱子伦精品无| 91情色在线| 天堂蜜桃无码视频一区二区| 亚洲 欧美 制服 另类 自拍| 99操逼| 性欧美体内射精| 精品国产一区二区三区四区在线看| 久草毛片电影怡| 92人人操人人| 97碰| 久久超碰天天| 91网亚洲| 自偷自拍的亚洲视频| 91五十路| 亚洲高清在线se| 发朗少妇买婬全视频中文| V A在线| www.成人无码| 青青操在线亚洲视频观看欧美在线 | 亚洲中文sv| 成人综合网 欧美| 精品一二三区久久AAA片| 综合色一区三区二区| 成人五月天色网| 91美女中出| 日韩高清黄片| 国产AV色黄看到爽| 欧洲性爱无码区| 精品大全99999| 97看操| 美女诱惑1区2区| 國產尤物AV尤物在線觀看| 久久久久国产精品久久久| 99在线啪| 日韩在线97| 99久久99九九99九九九| 亚洲成a人在线观看久| 亚洲图片另类| 91亚洲黄色网| 亚州大图综合色图| 久久久久9999妇女| 手机午夜电影神马久久| 三级日本一区二区三区| 1204av韩国| 99re这里| 欧美另类丝袜熟女| 国产传媒一区日韩| 亚洲综合色在线| 97超碰人人模人人拍人人| 国产精品一二三在线看| 做爱福利视频一区二区| 一级乱伦网站| 久久久久久性爱视频| 欧美高清16| 99热思思| 久久男人天堂| 日本不卡码黄色 | 五月天社区| 夜夜爽夜夜摸夜夜操免费视频| 日韩无码精品综合久久| 久久97资源 网| 欧美成人一级麻豆| 亚州久久9| 亚洲国产91精品一区二区久久| 麻豆久久久久久久久丝袜| 中文字幕丰满子伦无码专区在线视频最新 | 男人综合网| 色五月综合网| 我要色综合网| 亚洲综合影视| 欧美精品99久久久**| 亚洲精品欧洲精品| 国产精品久久久久久久黄无码| 91/欧美| 亚洲国产午夜真人一级片中文字幕精品黄网站| 亚洲黄a三级三级三级看三级| 三级特黄60分钟播放| 精品乱码久久久久| 亚洲色啪| 亚洲精品一区二区精华| 久久大陆| 久久xxxx| 国产午夜福利专区综合| 啊啊啊久久久视频| 久久免费老司机精品| 亚洲人成网站7777| 亚洲少妇免费视频\| 超碰91在线| 色香欲影| 亚洲色情在线影视| 色99在线| 自怕偷自怕亚洲精品| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 国偷自 一区| 男人的天堂亚洲| 日本爽爽爽爽爽爽免费视频| 97久久超碰国产精品| 好吊妞转入那个网| 亚洲 国产 精品一区| 视频二区美腿制服人妻欧美| 女同性恋一区二区三区精品视频| 国产色呦呦| 国产97免费视频| 中国熟女网站| 精品人人| 动漫爆乳3D奶水一区在线观看| 久热最新在线杭州| 加勒比伊人综合| 91碰碰碰| 伊人影院综合是一个与深夜成人在线| 日本天天干天天操一区| 人妻人妻天天碰| 色色色热| 亚欧Av| 亚洲av性爱电影| 国偷自 一区| AV天天综合| 十八禁的黄污污免费网站| 91岛国动作片| 人人操人人精品影片| 九九九九九九九九九九九免费国产| 中国zzijzzijzzwww精品| 国产精品一区二区三区四区五区| 插入粉嫩少妇视频| 99国产精品免费| 后入人妻无码| 97国产色图| 婷婷三区| 亚洲天堂男人在线| 99综合免费视频| 园内精品自拍视频在线播放| 成人性爱AV在线免费观看| 亚洲熟女人妻中文字幕一区二区| 日本大香蕉综合网红本杳社区| 青草视频人妻在线观看| 中文字幕丝袜人妻| 日韩少妇丰满亚洲| 99色日| 人人手机欧洲亚洲国产人妻| 丝袜 亚洲 偷拍| 中文字幕av亚洲在线| 国产精品久久久无码AV网站| 人人看欧美性爱| 久操91视频| 亚洲精品九九九| 91n处女在线观看| 男人的天堂日韩| 9精品久久| 99热aaa| 性性欧美| 激情文学 亚洲图片| 夜夜嗨av午夜成人| 成人热久久精品| 欧美熟妇乱码在线一区| 国产精品久久久久绯色| 大香蕉在线视频重口味毛片在线| 日韩精品人妻中文字有码在线| 天操老女人| 伊人aaa| 91色色综合| 国产精品色| 日韩精品一区的| 成人免费不卡在线视频| 99热这里只有精| 人人爱操| 日本999精品视频| 欧美熟女妇同| 97精品97久久| 大茄子熟女AV导航| 葡萄牙性视频一二区| 国产传媒日韩欧美| 2017av无码免费无线播| 欧美一区二区一级岛国大片| 性爱乱伦视频免费| 大香蕉手机视频| 国产伦精品一区二区三区视频女| 国产a级精品| 麻豆精品天美| 人妻丝袜一区二区三区在线| 精品九九九| 1人人看人人摸人人操| 国产真实野战在线视频| 婷婷六月天| 嗯嗯啊啊操死我| 大乔未久88一区| 我要色综合网站| 欧美色性情| 超清福利精品视频在线| 秋霞曰韩R级| 久久国产三区| 亚洲熟女乱综合一区二区三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 激情黄色片在线观看| 国产 热久久久久国产精品| 免费毛片在线播放| 亚洲黄日韩无码专区| 精彩久久中文| 亚洲av无码国产精品字幕| 欧美激情另类一区二区| 精品国产自在在线99| 诱惑人妻欧美一区在线播放| 欧美—性—交—色| 亚洲精品第一| 欧美图片色综合| 人妻精品一区一区三区蜜桃91| 日韩一级二级三级在线不卡观看完整| 8x福利精品第一福利视频导航| 精品久久99| 成人色女网| 欧美在线天堂| 国产精品久久久久久久久AV大片| 色婷婷成人综合| 人妻少妇精品久久久久久| 国产亚洲99久久精品熟| 天堂精品在线| 一二区在线观看视频| 高清无码在线播放网站| 亚洲av在线免费观看| 久久久久久裸体| 人妻二区| 人妻密肉在线观看| 999久久久国产精品| 亚洲AV噜噜狠狠网址蜜桃动漫| 青青草日韩无码| 五月天AV资源| 精品国产人成在线| 久久日本熟女精品一区| 日韩肏逼视频| 日韩免费人妻色情网站| 伊色久人大在线| 自拍偷拍 日韩无码| 美日韩在线不卡人妻| 人妻久久一区二区三区| 99色在线观看| 亚洲色电影在线| 国产精品老师| 欧美色91| 色综合色欲色综合色综合色综合| 九九九只有精品| 日韩国产欧美伦理在线| 艳尻美人妻| 国产中出内射一区二区| 久久a久久| 久久久九九九| 色色99| 国产无马在线| 天天日天天舔东京热| 国产91影院| 国产夫妻一区二区| 国产精品分类在线观看| 好爽,再快点啊哈嗯嗯嗯嗯| 1区2区3区视频| 日韩乱码Av| 超碰91在线| 久久久久久久久久久人妻| 免费观看一区| 久久精品老司| 日本精品无码三级网站| 五月天AV资源| 6080yy午夜理论三级一区二区三区无码| 一区二区无码视频| 九九av| 久久精品店| 五月天色图影视| 色悠久| 天天综合网在线| 日本 色 导航| 久久精品电影在线| 天堂国产AV| 日韩乱伦AⅤ| 午夜福利一区二区三区四区五区色婷婷| blacked精品一区国产| 蜜臀va69| 69AV女优男人的天堂| 麻豆国产视频精品观看| 色综合 加勒比| 九九99久久| 亚洲国产成人精品久久久国产成人一区二区| 九九热免费国产视频婷婷伊人五月 | 亚洲。日韩。欧美| 操逼啊啊啊91| 欧美第二页| 97 九色| 国产精品三级视频网站 | 加勒比海成人视频网| 人妻中文字幕日韩电影| 九九热精品| 久久夜夜夜夜| 丁香五月激情婷婷| 人人操人人干网页| 色臀AV| 污污污8888| 色九九综合| 日韩欧美操逼xxx| chaopen97久久| 爽爽爽免费视频| 国产大学生高潮在线播放 | 亚洲91射| 亚洲老司机123专区| 91婷婷| av无线看| 一级二级在线观看| 黄页网站成人免费| 夜夜 中文视频rt| 亚洲男人的天堂亚洲| 密乳AV免费观看| 色逼综合| 中文字幕青青草| 97久久久精品| 色婷婷aV一区二区三区麻豆综合| 曰韩av中文字幕专区| 狠狠色噜噜狠狠狠狠2018| 久久风骚城市| 黄久在线| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 欧美高清色| 亚洲蜜臀视频精品久久| 射欧美综合| 欧美亚州手机在线| 美女黄色一级A视频| 综合影视国产无码| 99精品欧美一区二区三区桃色| 97超碰超碰| 欧美亚州综合网图片| 久啪| 2017大香蕉国产精品久久| 日韩乱码Av| 亚洲九九夜夜| 91Chinese在线| 久久亚洲AV成人精品无码| 欧美大香蕉久| 欧美精品23| 久久超碰国产一区二区三区| 欧美组图日韩亚洲中文字幕| 性91| 亚洲色婷婷久久久综合日本| 日韩少妇无码| 亚洲人成在线放东京热| 2024年最新色情网站在线观看| 黄色成年| 色逼综合| 在线午夜成人无码视频| 黄色片A级一区二区三区| 亚洲福利影院一区久久| 欧美精品精品一区二区| 亚洲中字幕日本一区二区三区| 久久夜夜| 日韩黄色片子| 做爱A级亚欧| 韩日性爱av| 日韩欧美午夜视频在线| 国产精品无码在线| 亚洲啪啪性视频| 午夜男女爽爽爽在线视频| 日本中文字幕在线视频| 这里只有精品久久| 日韩pv中文| 亚洲男人天堂网久久| 国产精品视频播放| 五月天九九日国产精品一区二区三区| 久久成人东京热人妻| 欧美日韩小说| 国产一区二区二区按摩精品啪视频| 国产高清成人免费视频| 性色av大全| 日本国产高清色www视频在线| 日本国产欧美高清在线| 日日夜夜干| 久草综合京东| 一本久久精品中文字| 屁股久久久久久久久| 97国产中文| 久热一区二区| 日韩熟女乱伦中出| 在线国产探花| 国产性刺激| 99热国产精品| 曰韩人妻中文字幕在线| 日本操大逼| 香蕉久久国产AV一区二区| 天天综合AV| 亚洲图片 激情小说| 97欧美资源| 久久精品午夜国产亚洲AV无码| 国语国产操逼伊人AV网| 色哟哟的毛片| 97免费视频在线观看视频| 亚洲欧美碰碰| 少妇人妻好深太紧了vr91| 91精品大奶人妻| 超碰午夜在线| julia国产在线| 八戒无码国产午夜福利| 国产激情久久久| 97视频620| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 国产精品高潮呻吟av久久4虎| 欧美东京热精品A∨| 最新加勒比丝袜在线| 国产欧美成人精品| 欧美日韩在线视频网站| 中文字幕jul-617人妻熟女| 动漫片子网站3黄| 天天天干977| 免费在线黄片视频| 97色欧州| 日本不卡五区| 性爱久久| 欧美 日韩第一性色| 性暴力欧美猛交在线直播| 五月天开心网| 骚货操死你| www.久久最新地址| 中文字幕88av在线| 成年无码动漫av片无尽在线| 亚洲色综合| 人妻无码一区二区三区久久99| 亚洲在线网站| 久操视频免费在线观看| 欧美性高潮| A 天堂在线观看视频| 日韩钢筋无码高清啾啾啾| 四虎免费在线观看| 亚洲天堂电影精品一区| 91蜜桃传媒精品久久久一区二区| 亚洲精品国产熟女久久久久久| 亚洲伊人久久精品狠狠在线| 99无码| 午夜天堂精品久久久久91| 亚洲好色人妻| 日韩性爱播放| 日1区2区3区2020| 日本五十路熟女一区二区| 97资源免费视频| 777AV电影| 婷婷另类小说| 久久av一级av少妇av高潮| 久久免费看高潮毛片韩国| 思思热一热婷婷热一热| 亚洲人妻色图| 激情综合网激情五月天| 欧美日韩中文亚洲v在线综合| 大肉棒导航| 思思热免费在线视频| 日本东京热大香蕉a片| 97人人夜夜精品视频| 安徽熟妇视频| 国产精品婬乱一级毛片彝族| 夜夜骑操视频| 2020国产精品| 久久无码精品| 有码免费观看| 操逼天美3区| 国产欧美后入| 五月激情视频| 精品视频一二三中文| 18精品一区| 大香蕉www.超碰| 精品久久艹| 大香蕉久操| 97欧美| 精久久久91| 亚洲欧洲精品视频发布| 97伦综合| 欧洲中文字幕| 太久视频| 亚洲图片第一页| 欧美精品丝袜久久久中文字幕| 亚洲无码成人精品| 少妇蹲下买菜露大唇0| 中文字幕 人妻不满 在线视频| 91w欧美| 好看的久久不射无码影视影院| wwwcaobibi| 九九九免费视频| 超碰天天操| 九九黄色网| 综合激情二| 国产自偷| 老熟妇综合| 日日爽夜夜爽| 国产精品美女久久久久AⅤ国产馆| 热久久无毒不卡| 国产一区96在线| 国产性爱乱伦AV| 97精品一区二区三区免费| 91久久18禁| www.狠狠操| 波多野结衣一级视频| AV中文字幕三四五| 在线观看A啊啊啊| 一起草av| 亞洲久久直播| Sekablack无码一区| 9久9久| 亚洲自拍欧美国产首页网曝| www.99视频| 欧美日日操| 91视频综合| 加勒比无码毛片| 在线97在线| 麻豆2区1区天美| 首页中文字幕中文字幕免费| 2018天天日天天日| 99re99| 青青操日韩| 97精品国产精品免费观看| 精品妇女一区二区三区| 极品极品色影院| 狠狠中文字幕| 日本性交操一区二区不卡系列| 嗯嗯啊啊啊好爽| 一区二区三区四区在线不卡| 粉嫩AV一区夜夜嗨| 日韩一级二级在线| 精品夜夜澡人妻无码| 狼人久草| 无码自拍SM| 最近2019中文字幕国语免费版| 8x福利精品第一福利视频导航| 久久男人天堂| 日日摸日日碰夜夜爽视频| 亚洲AV不卡在线观看| 97伪v| 大香蕉国产中文自拍| 久久综合日韩亚洲欧美| 青青草原人妻| 久九干| 日本操逼无码| 欧美操逼录像国产黄色国产| 激情综合网一盗摄| 鸥美插入视频| 欧美中字二区| 性性欧美| 青青青艹在线视频| 超碰天天操你比| 黄呦呦在线| 91爱做| 久偷拍欧美日韩三区| 欧美日韩亚洲五月天婷婷| 一牛一区二区三区久久| 91l欧美在线| 校园春色中文字幕AV| 2026国产精品视频| 死我十八禁| 欧美成人精品一区二区男人蜜臀| 国产夫妻性生活视频| 五十路成人在线视频二区三区| 香蕉色网| 久久精品无码熟妇一区二区三区视频导航 | 丁香成人五月天| 91美女中出| 久久久久久性爱片| 欧美白嫩女HD| 天天情欲宗合网| 久久久久久久久9| 欧美综合网在线| 亚洲无992tv| 少妇一级婬片免费放一级a性色.| 亚洲第一精品在线视频| 一级特级aaaa毛片免费观看| 色爱国产| 手机av天堂久久久久| 欧美韩国你懂得在线| 久久九操在线观看| 九九热国产| av一区二区三区不卡| 无码天天操| 99视频在线| 精爱久久| 国内外毛片在线观看| 天天拍夜夜| 日韩av免费一级电影| 国产三级多多影院2022国产AA一级毛片无码| 看黄片视频免费| 国产美女高潮视频| 久久久久国产精品久久久| 美国黄片aaa| 国产精品亚洲一区二区三区四区| 农村妇女一级二级三级视频| 玖玖爱综合| 操死我了啊啊啊| 国产精品熟女一区二区三区| 日韩99精品视频综合区| 亚洲中文字幕av| 9 7超碰在线免费观看| 中文字幕第95页| 在线视频 亚洲精品| 大香蕉免费乱伦视频| 日本91白丝| 亚洲青青草| 97久久网| 激情九月婷婷| 亚洲人妖网| 精品国产乱码久久久久久蜜臀| 波多野结衣被操50分钟免费视频| 色99在线| 亚洲综合 欧美| 爱妃国产亚洲视频中文字幕| 国产av美女被艹的乱叫| 国产传媒美日韩av| 亚洲 日本 不卡| 久久精品中文字幕观看| 97九色人妻| 夜夜国自区| 不卡av在线中文字幕| 人人色97| 深喉吞精| 黑人精品成人一区二区三区 | 97色色视频| 天天干夜夜肏| 亚洲一区操| 爱爱动态120秒| 亚洲在线观看| 中文字幕91页| 日本精品免费一区二区三区四区| 酒色综合网| www.yw尤物| 少妇高潮喷水无套久久久久久| 日欧操屄| 亚熟在线| 精品免费视频国产一区| 天天干一干| 日本黄色精品| 国产激情综合| 人人澡人人澡人人| 色呦呦呦在线观看视频| 欧美熟妇亚洲版| 国产一区二区免费福利片| 女人天堂AV五区在线| 一本色道综合久久欧美日韩精品| 黄aaaaaaaaaaaaaaaaaa色网站 | 青青爽| 91亚洲电影| 99只有精品| 久久久精精精| 亚洲丝袜二区| 一区二区影视| 大香蕉97久久| 超碰色综合| 亚洲欧洲美腿丝袜| 婷婷操视频| 免费国产电影一区二区| 91女网站| 亚洲欧洲日本精品中文a∨| 亚洲色9| 久久久久久久久久久免费精品| 后入内射蜜桃臀| 日本高清免费一本视频在线观看| 蜜臀在线免费观看在线免费观看| 男插女青青影院| 精品人妻一区二区免费蜜桃| 青娱乐二区免费| 欧美日韩婷婷中文| 欧美日韩一区二区三区四区蜜桃| 91男人天堂网| 午夜丁香| 亚洲无线观看久久| 好看的91视频| 亚洲精品官网在线观看| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 久久久久久十| 欧美美女自慰一区二区三区| 日韩成人高清一区二区| 亚洲精品天天影视综合网 | 亚洲另类小说卡通动漫| 大屁股国产在线视频| 深夜激情无码| 日本Suv精品一区二区| 99国产精品人妻人伦| 亚洲AV无码乱码| 久热99999| 日韩精品99999| 男女日B国产| 风月影院男女十八禁| 国产精品青草综合久久| 东京热男人的天堂| 蜜桃丰满熟妇av无码区不卡| 久久东京国产精品视频| 97爱爱爱| 97精品在线| 天天干美少妇一区| 久久天天艹| 91狠狠综合久久| 亚洲另类色图片| 日韩黄色一区二区三区| 91情色| 综合情欲网| 亚洲一二三精品久久网 | A片A5445444| 国产夫妻性生活视频| 亚洲精品丝袜| 婬女免费一二三区A片| 天天上日日上日韩精品| WWW美腿丝袜香蕉中文| 97在线免费看| 免费人成?大片在线播放| 人人么人人操| 欧美色图另类图片| 国产精品在线网站| 欧美性天天影视| 国产亚洲色婷婷久久99精品91葵花宝典 | 骚女高跟AV在线| 男人天堂2019亚洲| 操逼逼福利视频| 成年人网站在线免费观看| 美女91网| 青青欧美| 97超碰天天| 欧美激情综合色综合啪啪五月| 国产精品亚洲一级av第二区| 免费成人自拍视频在线| 久久久久久人| 91久久久老司机| 久热久一区二区三区| 天天爱天天操| 久久‘黄片视频| 成人a级高清视频在线观看| 九九亚洲| 日韩精品啪啪啪| 人乳av| 日韩欧美中文字| 在线97在线| 日韩97视频!在线| 日韩三级一区 | 日韩人妻有码免费视频| 日韩性爱小视频| 婷婷色香伊人| 18精品一二区| 96国产精品| 亚洲双插| 亚洲情色无码一区二区三区| 91色堂| 激情小说亚洲图片| 歐美性天天| 欧美伦乱爱| 天天看特黄的免费网站| 成人精品视频一区二区| 黑丝91视频| 日韩欧亚太美不卡| 久久99国产综合精品女同| 欧美黑人性猛交91| 旡码电影特区| 暖暖精品二区三区观看| 久久久久久久久久久久久9999| 射 色综合| 夜夜爽爽爽| 亚洲nv男人的天堂网| 五月丁香六月激情| 久久极品一区二区| 97超碰色五月| 黄色二级片网站| 人妻无码后入| 欧美性爱一区二区三区四区| 久久日本熟妇熟色高清| 国产性爱欧美性爱在线| 九99久久| 久久午夜神马| 97欧美视频| 国产精品久久久久久亚洲色欲| 性色AV蜜色av色欲av| 自拍偷拍第26| 一级毛片久久久久久久女人18| 6080YYY午夜理论片在线观看| 国产成人欧美一区二区三区的国产| 国产精品呦一区二区三区| 最新日产中文在线麻豆| 欧美成人性爱视频大全| 91精品综合久久久久久五月丁香| 日韩AV电影网站| 色av中文字幕| 99精品丰满人妻无码| 熟妇女伦乱视频视频| 人人妻人人玩人人澡人人爽| TS人妖另类精品视频系列| 亚洲97成人在线观看| 国产 亚洲 丝袜 制服| 99爱爱| 欧美制服另类丝袜| 国产美女激情| 日天天九九天堂666| J?P?NESEHD熟女熟妇伦| 中文字幕丝袜国产第一页不卡| 国产又操| 欧美中文字幕一区 | 亚洲美女 晚间男人天堂| 熟妇一区,二区,三区。| 色汉综合| 国产精品呦一区二区三区| 97福利视频| 91国产大片| 日日骚av| 九九视频黄色片| 熟女视频久久| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 2017大香蕉| 成人性爱av.com| julia高潮后不停追击中出| 久久国99999| juliaann欧美丝袜办公室| 人妻丰满熟妇一区二区三| 女人高潮大叫一级毛片| 国产又大又粗又长视频在线| 九九九九一区| 男女做爰猛烈动高潮A片免费应用| 国产乱人伦AVA麻豆软件.| 无码免费一区二区三区啪啪| 国产情色第一第二页在线观看| 青草成人免费视频一COm| 日本三级一区二区 在线| 五月婷婷丁香| 久久偷偷色综合蜜桃| 一级毛片电影免费看| 澳门特级毛片免费观看| 亚洲男人天堂2012| 五月天伊人网| 亚州AV无码国产精品| 欧洲亚洲人妻无码中字久久三区四区 | 成熟熟女国产精品一区二区| 中欧人妻丝袜中文字幕| 日日碰狠狠添天天爽超| 97免费视频网| 亚洲九九九九| 色狠狠色| 国产精品大屁股999| 色翁荡息又大又硬又粗又爽| 欧美极品少妇交| 97在线观看免费| 日韩精品一区二区日韩| 后入内射蜜桃臀| 久久精品一区二区| 狠狠色婷婷| av橘色网站| 凸凹视频在线观看| 黄色片G G G| 第四色奇米影视777| 日本一区二区三区欧美日韩中文字幕| 欧美色图20P| 影音先锋国产精品| 天天爱综合网| 国产91精品福利在线| 99啪啪| 黄色免费网| 成人熟女视频一区二区三区| 久草加勒比一区在线| 日韩成人电影AV| 青青草一本道福利视频| 91狼人| 久久激情视频| 色综合色欲色综合色综合色综合| 欧美在线 亚洲| 美女操逼福利视频| 日韩中文9| 一级特级aaaa毛片免费观看| 老女人老91妇女老热女| 日本一区视频在线观看| 久久久久久9999| 国产精品无码久久久久2025| 夜夜国产一区| 久久精品中文字幕观看| 在线免费试看60秒| 国产精品激情久久久久久久| 2019午夜福利视频| 国产高清MV操逼视频| 91女优在线观看| 亚洲强奸乱伦影视网| 老熟妇一区二区三区| 精品一区二区成人动漫| 小电影欧美91| 欧美亚洲丝袜人妻制服99| 综合网欧美| 白丝jkav| 嫩草影院在线观看精品| 90后后入| 大香蕉操久久| 久久av无码| 亚洲色图 图片| 国产精品香蕉热久久新品| 天天久久久久久| 日韩AV电影网站| 日日操免费视频| 玖玖爱综合网| 五月丁香综合啪啪| 欧美日韩97| 超碰综合色| 婷婷丁香五月激情啪啪| 色综合加勒比| 大香网伊人久久综合网eew| 人妻中文字幕日韩电影| 日韩九九九| 天天综合香 ld视频| 亚洲人妻中文高清| 欧美性爱一区二区三区| 日本中文字幕高跟| 中国国国产一级特黄毛片| 日本 情色 1区| 美女久久久久久久| 青草青草久热| 久久久久九九九| 91美女看B| 日本精品一区三区| 奇米四色影视777久久久| 欧美桃色网| 好爽,再快点啊哈嗯嗯嗯嗯| 日操粉逼逼| 91搡老女人老妇女老熟女歌词翻译| 日韩中文字幕av在线播放| 国产免费永久精品无码| 久久国产在线一区二区| 中出在线视频| 人人爽夜夜操| 蜜臀操逼黄色视频操的好爽| 精品免费视频国产一区| 亚洲影视第一页| 欧美色图亚洲特色| 午夜天堂啪啪| 久久久久亚洲av综合波多野制衣| 9精品久久久久| 99国产精品久久久在线播放| 伊人五月天| 色乱二区| 国产精品爱欲| 美女啊啊啊啊啊| 操淫穴亚洲五月丁香| 久久9久9久99久9久9| 欧美性爱另类综合| 狼狼色丁香久久婷婷综合五月| 国产一区在线看| 蜜臀无码一区二区| 白丝AV网站| 97日本超碰综合| 日本在线不卡一二区| 五月婷婷六月丁香网址| 又粗又长又大国产不卡| 欲综合网| 精品久久艹| 亚洲区限制级| 亚洲国产一级中文综合久久天堂在线免费观看| 免费久久精品麻豆一区二区av| 日韩操p| 国产在线观看一区二区三区| 一区二区三区一亚洲中文字幕、综合区灬 | 成人性爱高清视频免费看| 成人小说另类在线| 天久久久噜噜噜久久国产精品爽爽 | 久草视频制服诱惑| 草草影院在线视频| 99热日本| 综合色99| 9999免费精彩视频| 日本www操操操| 一级aaaaa欧美中文字幕录像片| 一级片视频啪啪| 男女无套 免费网站| 96一区二区| 超碰美女97| 97在线视频网站| 天啪| 热99re69精品8在线播放| 中文不卡视频| 综合色欧美| 欧美东京热青青草| 欧美激情在线观看视频| 欧美韩日精品99综合| 中文字幕av一区二区三区人妻少妇| 加勒比五月天| 天天天堂影视日韩亚洲91| 制服诱惑亚洲一区二区三区在线观看| 亚洲污一污二| 日本男人插女人的逼黄色| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 吊色| 美国三级日本三级久久99| 成人一级二级| 一区二区无码视频| 久久精品操| 欧美九九九九九| 91夜色| av一区二区三区不卡| 国产精品无码久久久久2025| 在线欧美69V免费观看视频| 亚洲AV操| 人妻人人操| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 日韩ab网 | 国产午夜精品在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 伊人丁香五月婷婷| 欧美日韩操逼动图| 女人被添高潮免费视频| 丁香五月综合| 嗯~啊~快点 死我视频| 欧美午夜色妇色鬼| 日韩精品9区| 欧美三级偷拍| 操一操摸一摸| 精品毛片av一区二区 | 欧美色www亚洲国产阿娇要播| 岛国激情视频在线观看| 午夜理论片在线观看免费| 超碰免费在线| 青青草黑寡妇男人天堂| 青青伊人加勒比海| 婷婷人妻激情| 乱伦熟妇一区二区| 偷拍自拍在线视频观看| 五月天伊人| 熟女欧美日韩综合婷婷| 欧美亚洲色的图| 玖草在线视频| 欧美成人四级在线播放| 香蕉久久国产AV一区二区| 色月天AV导航| 久9久9久9久9久9久9| 亚洲黑人在线| 亚洲啪啪视频一区二区| 亚洲欧美精品一区天堂久久| 日日夜夜草草草| 亚洲黄色电影|