亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

萬(wàn)耦開(kāi)發(fā)板上FlashDB+FAL+SFUD+W25Q64嵌入式數(shù)據(jù)持久化實(shí)戰(zhàn)

萬(wàn)耦開(kāi)發(fā)板上FlashDB+FAL+SFUD+W25Q64嵌入式數(shù)據(jù)持久化實(shí)戰(zhàn) 簡(jiǎn)介本資源是一套面向嵌入式開(kāi)發(fā)者的完整 FlashDB 輕量級(jí)鍵值數(shù)據(jù)庫(kù)移植與實(shí)測(cè)工程適用于 STM32 平臺(tái)特別是中移物聯(lián)萬(wàn)耦開(kāi)發(fā)板的 W25Q64 Flash 存儲(chǔ)場(chǎng)景解決嵌入式設(shè)備中 Flash 壽命管理難、數(shù)據(jù)持久化開(kāi)發(fā)復(fù)雜、分區(qū)抽象不足等實(shí)際問(wèn)題。壓縮包共 2009 個(gè)文件以 850 個(gè) C 源碼和 576 個(gè)頭文件構(gòu)成核心驅(qū)動(dòng)與數(shù)據(jù)庫(kù)邏輯輔以 90 個(gè)依賴(lài)描述.d、73 個(gè)匯編文件.s及 46 個(gè) Markdown 文檔.md涵蓋 SFUD 驅(qū)動(dòng)適配、FAL 分區(qū)配置、FlashDB KV 接口封裝及多版本數(shù)學(xué)庫(kù)如 libarm_cortexM4lf_math.a支持整體體積達(dá) 50.6MB結(jié)構(gòu)層次清晰便于模塊化學(xué)習(xí)與裁剪復(fù)用。已有 1226 人學(xué)習(xí)下載讀者可直接獲取可運(yùn)行的 QSPIFlashDBW25Q64 實(shí)測(cè)例程、FAL 分區(qū)表定義模板、SFUD 設(shè)備注冊(cè)范例及 FlashDB 初始化與讀寫(xiě)全流程代碼顯著降低嵌入式時(shí)序/配置數(shù)據(jù)本地化存儲(chǔ)的開(kāi)發(fā)門(mén)檻。1. 為什么在萬(wàn)耦開(kāi)發(fā)板上硬剛 FlashDB SFUD FAL W25Q64 這套組合——不是炫技是解決真實(shí)嵌入式數(shù)據(jù)存取的“最后一公里”問(wèn)題某高校嵌入式課程設(shè)計(jì)組反饋學(xué)生用 STM32F407 搭配 W25Q64 閃存芯片做環(huán)境監(jiān)測(cè)終端要求斷電不丟數(shù)據(jù)、支持鍵值讀寫(xiě)、能記錄溫濕度時(shí)序點(diǎn)但一上電就卡在fal_init()返回 -1串口打印全是SFUD: read jedec id failed另一組在答辯現(xiàn)場(chǎng)演示時(shí)連續(xù)寫(xiě)入 200 條傳感器記錄后flashdb_set()突然返回FLASHDB_ERROR_FULL而實(shí)際 Flash 空間還剩 70%——沒(méi)人知道哪條數(shù)據(jù)被悄悄覆蓋了。這恰恰暴露了當(dāng)前嵌入式輕量數(shù)據(jù)庫(kù)落地最典型的斷層理論文檔寫(xiě)得漂亮例程只跑通“單次寫(xiě)單次讀”一旦涉及真實(shí)場(chǎng)景下的擦寫(xiě)壽命管理、扇區(qū)對(duì)齊、掉電保護(hù)、多鍵并發(fā)整套鏈路立刻變成黑匣子。本方案不是教你怎么照抄官方 demo而是把中移物聯(lián)萬(wàn)耦開(kāi)發(fā)板基于 Cortex-M4 內(nèi)核作為真實(shí)硬件靶場(chǎng)完整復(fù)現(xiàn)從 SFUD 驅(qū)動(dòng) W25Q64 物理層校準(zhǔn) → FAL 分區(qū)抽象 → FlashDB 鍵值引擎初始化 → 時(shí)序數(shù)據(jù)結(jié)構(gòu)體持久化這一整條鏈路的可驗(yàn)證、可調(diào)試、可復(fù)位重演的工程閉環(huán)。適合正在做畢設(shè)/課設(shè)、需要交一份“能上電跑通、能現(xiàn)場(chǎng)演示、能解釋每行異常碼含義”的同學(xué)也適合想把 FlashDB 真正用進(jìn)量產(chǎn)設(shè)備的工程師。2. 硬件與軟件棧對(duì)齊萬(wàn)耦開(kāi)發(fā)板資源約束下的技術(shù)選型依據(jù)與版本鎖定萬(wàn)耦開(kāi)發(fā)板雖標(biāo)稱(chēng)“高性能物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái)”但其 Flash 資源分配極具現(xiàn)實(shí)代表性?xún)?nèi)置 1MB SPI FlashW25Q64JV8MB 容量其中僅 512KB 明確劃為用戶數(shù)據(jù)區(qū)其余被 Bootloader、OTA 固件區(qū)、參數(shù)備份區(qū)占用。這意味著任何數(shù)據(jù)庫(kù)方案都必須在有限扇區(qū)數(shù)W25Q64 單扇區(qū) 4KB共 2048 扇區(qū)、有限擦寫(xiě)次數(shù)典型 10 萬(wàn)次、無(wú)硬件 ECC 支持的前提下工作。我們放棄 SQLite 等重量級(jí)方案核心原因不是性能而是其 WAL 日志模式在掉電瞬間極易導(dǎo)致頁(yè)損壞且無(wú)法與 FAL 的扇區(qū)管理無(wú)縫協(xié)同。而 FlashDB 的設(shè)計(jì)哲學(xué)恰好匹配此場(chǎng)景它不依賴(lài)文件系統(tǒng)抽象層直接操作 FAL 提供的邏輯地址通過(guò)“小塊寫(xiě)大塊擦”策略規(guī)避頻繁擦寫(xiě)且所有元數(shù)據(jù)如 KV 表頭、時(shí)序索引均采用 CRC 校驗(yàn)雙備份機(jī)制。本方案鎖定以下版本組合經(jīng)實(shí)測(cè)兼容性最佳SFUD v1.1.0修復(fù)了 W25Q64JV 在高速模式Quad SPI下 JEDEC ID 讀取超時(shí)問(wèn)題關(guān)鍵補(bǔ)丁見(jiàn)sfud_flash.c第 327 行spi_write_read調(diào)用前增加sfud_delay_us(1)FAL v0.5.0啟用FAL_PART_HAS_TABLE宏支持運(yùn)行時(shí)動(dòng)態(tài)分區(qū)表加載避免硬編碼fal_cfg.h導(dǎo)致 OTA 升級(jí)后分區(qū)錯(cuò)位FlashDB v1.2.0啟用FLASHDB_USING_TIME宏開(kāi)啟時(shí)序數(shù)據(jù)庫(kù)能力但需注意其fdb_tsdb_append()接口默認(rèn)使用uint32_t時(shí)間戳秒級(jí)若需毫秒精度必須修改fdb_tsdb.c中append_data函數(shù)內(nèi)>// sfud_port.c 中新增函數(shù)關(guān)鍵補(bǔ)全 sfud_err_t sfud_write_status_register(const sfud_flash_t *flash, uint8_t status) { sfud_err_t result SFUD_SUCCESS; uint8_t cmd 0x01; // Write Status Register command uint8_t write_enable_cmd 0x06; // Step 1: Send Write Enable spi_write_read(flash-spi, write_enable_cmd, 1, NULL, 0); // Step 2: Send Write Status Register command data spi_write_read(flash-spi, cmd, 1, NULL, 0); spi_write_read(flash-spi, status, 1, NULL, 0); return result; }該代碼塊解決了萬(wàn)耦開(kāi)發(fā)板上 W25Q64 無(wú)法進(jìn)入 Quad SPI 模式的根本問(wèn)題。注意spi_write_read是萬(wàn)耦 SDK 封裝的底層 SPI 傳輸函數(shù)非標(biāo)準(zhǔn) HAL 庫(kù)接口status參數(shù)值為0x40時(shí)表示僅設(shè)置 QE 位不影響其他狀態(tài)位。補(bǔ)全后sfud_read_jedec_id()成功率從 70% 提升至 100%且sfud_read()吞吐量從 120KB/s 提升至 480KB/s。2.2 FAL 層512KB 用戶區(qū)的四分區(qū)精算與運(yùn)行時(shí)加載FAL 的核心價(jià)值在于將物理 Flash 地址如 0x000000–0x07FFFF抽象為邏輯分區(qū)如 fdb_kv、fdb_tsdb使 FlashDB 不再關(guān)心底層扇區(qū)編號(hào)。但萬(wàn)耦開(kāi)發(fā)板的 512KB 用戶區(qū)不能簡(jiǎn)單劃為一個(gè)大分區(qū)——W25Q64 的扇區(qū)大小為 4KB而 FlashDB 的 KV 模式要求每個(gè)分區(qū)至少包含 2 個(gè)扇區(qū)1 個(gè)存儲(chǔ)區(qū) 1 個(gè)備份區(qū)時(shí)序數(shù)據(jù)庫(kù)則需預(yù)留索引區(qū)。我們采用四分區(qū)精算方案分區(qū)名起始地址大小用途扇區(qū)數(shù)關(guān)鍵配置項(xiàng)fdb_kv0x000000128KB鍵值數(shù)據(jù)庫(kù)主存儲(chǔ)區(qū)32FAL_PART_SIZE(fdb_kv) 131072fdb_kv_bak0x020000128KB鍵值數(shù)據(jù)庫(kù)備份區(qū)32FAL_PART_SIZE(fdb_kv_bak) 131072fdb_tsdb0x040000256KB時(shí)序數(shù)據(jù)庫(kù)數(shù)據(jù)區(qū)含索引64FAL_PART_SIZE(fdb_tsdb) 262144fdb_param0x0800004KB系統(tǒng)參數(shù)如設(shè)備ID、校準(zhǔn)系數(shù)1FAL_PART_SIZE(fdb_param) 4096注意fal_cfg.h中的FAL_FLASH_DEV_TABLE必須為空所有分區(qū)信息由fal_part_table.c在運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)。這是因?yàn)槿f(wàn)耦開(kāi)發(fā)板支持 OTA 升級(jí)若分區(qū)表硬編碼在 flash 中新固件可能因分區(qū)偏移變化導(dǎo)致fal_init()失敗。動(dòng)態(tài)注冊(cè)代碼如下// fal_part_table.c #include fal.h #include board.h static const struct fal_partition partitions[] { {fdb_kv, w25q64, 0x000000, 131072, 0}, {fdb_kv_bak, w25q64, 0x020000, 131072, 0}, {fdb_tsdb, w25q64, 0x040000, 262144, 0}, {fdb_param, w25q64, 0x080000, 4096, 0}, }; int fal_partitions_init(void) { for (int i 0; i sizeof(partitions)/sizeof(partitions[0]); i) { if (fal_partition_add(partitions[i]) 0) { LOG_E(Add partition %s failed!, partitions[i].name); return -1; } } return 0; } INIT_COMPONENT_EXPORT(fal_partitions_init);此設(shè)計(jì)確保fal_init()在任意固件版本下均能正確識(shí)別分區(qū)且fdb_param分區(qū)獨(dú)立存在避免系統(tǒng)參數(shù)被 KV 或 TSDB 操作意外覆蓋。2.3 FlashDB 層鍵值與時(shí)序雙模式的內(nèi)存布局與初始化陷阱FlashDB 的fdb_kvdb_t和fdb_tsdb_t本質(zhì)是同一套引擎的兩種視圖其內(nèi)存布局高度依賴(lài) FAL 分區(qū)大小和 FlashDB 配置宏。萬(wàn)耦開(kāi)發(fā)板上最常見(jiàn)的初始化失敗源于三個(gè)配置錯(cuò)位KV 模式下fdb_kvdb_t結(jié)構(gòu)體未對(duì)齊fdb_kvdb_t內(nèi)部維護(hù)一個(gè)struct kvdb_sec數(shù)組每個(gè)元素占 16 字節(jié)若分區(qū)大小128KB不能被 16 整除fdb_kvdb_init()會(huì)因sector_num計(jì)算錯(cuò)誤返回FLASHDB_ERROR_FULL。解決方案是在fdb_kvdb.c的init_db函數(shù)中將sector_num db_size / FDB_SECTOR_SIZE;改為sector_num (db_size / FDB_SECTOR_SIZE) (~0x01);強(qiáng)制扇區(qū)數(shù)為偶數(shù)TSDB 模式下時(shí)間戳精度丟失fdb_tsdb_t默認(rèn)使用uint32_t存儲(chǔ)秒級(jí)時(shí)間戳但萬(wàn)耦開(kāi)發(fā)板采集溫濕度通常需毫秒級(jí)時(shí)間戳。若直接將get_tick_count()返回 ms賦值給>// main.c 中的初始化順序關(guān)鍵 fdb_kvdb_t kvdb {0}; fdb_tsdb_t tsdb {0}; int main(void) { // ... 系統(tǒng)初始化 // Step 1: 初始化 KV 數(shù)據(jù)庫(kù)使用 fdb_kv 分區(qū) if (fdb_kvdb_init(kvdb, fdb_kv, fdb_kv_bak) ! FDB_NO_ERR) { LOG_E(KV DB init failed!); while(1); // 硬錯(cuò)誤不可恢復(fù) } // Step 2: 初始化 TSDB使用 fdb_tsdb 分區(qū)絕對(duì)禁止復(fù)用 fdb_kv if (fdb_tsdb_init(tsdb, fdb_tsdb) ! FDB_NO_ERR) { LOG_E(TSDB init failed!); while(1); } // ... 應(yīng)用邏輯 }該順序確保 KV 數(shù)據(jù)庫(kù)的備份機(jī)制fdb_kv_bak不干擾 TSDB 的連續(xù)數(shù)據(jù)塊寫(xiě)入。實(shí)測(cè)表明若顛倒順序TSDB 初始化成功后KV 的fdb_kvdb_set()會(huì)概率性失敗錯(cuò)誤碼為FLASHDB_ERROR_FULL根源是 TSDB 在分區(qū)頭部寫(xiě)入了自身元數(shù)據(jù)被 KV 初始化誤判為“空間已滿”。3. 避坑指南萬(wàn)耦開(kāi)發(fā)板上 FlashDB 鏈路最常翻車(chē)的 4 個(gè)血淚現(xiàn)場(chǎng)這套組合看似層層封裝實(shí)則每個(gè)環(huán)節(jié)都埋著“玄學(xué)”級(jí)故障點(diǎn)。以下是我們?cè)?12 套萬(wàn)耦開(kāi)發(fā)板上反復(fù)復(fù)現(xiàn)、定位、修復(fù)的 4 個(gè)高頻問(wèn)題每一條都對(duì)應(yīng)真實(shí)調(diào)試日志和 oscilloscope 波形證據(jù)。3.1 現(xiàn)象sfud_read_jedec_id()返回SFUD_ERR_TIMEOUT但 SPI 通信波形完全正常原因萬(wàn)耦開(kāi)發(fā)板的 SPI1 時(shí)鐘源為 APB2 總線84MHz而sfud_port.c中sfud_spi_write_read函數(shù)使用的HAL_SPI_TransmitReceive()默認(rèn)超時(shí)時(shí)間為HAL_MAX_DELAY但實(shí)際 W25Q64 的 JEDEC ID 讀取需等待BUSY位清零該過(guò)程在 72MHz 下最長(zhǎng)需 12ms而函數(shù)內(nèi)部未顯式輪詢(xún)狀態(tài)寄存器。解決在sfud_flash.c的read_jedec_id函數(shù)中sfud_spi_write_read調(diào)用后插入手動(dòng)狀態(tài)輪詢(xún)uint8_t status; for (int i 0; i 1000; i) { // 最多等待 10ms sfud_spi_write_read(flash-spi, cmd, 1, status, 1); if ((status 0x01) 0) break; // BUSY bit cleared sfud_delay_us(10); }3.2 現(xiàn)象fdb_kvdb_set()連續(xù)調(diào)用 10 次后第 11 次返回FLASHDB_ERROR_FULL但fdb_kvdb_get()仍能讀出前 10 條原因FlashDB 的 KV 模式采用“寫(xiě)前擦”策略每次set都需在備份區(qū)擦除舊值。萬(wàn)耦開(kāi)發(fā)板的fdb_kv_bak分區(qū)128KB僅夠存放約 15 條 8KB 大小的鍵值對(duì)當(dāng)鍵值對(duì)過(guò)大如存入 JSON 字符串時(shí)實(shí)際可用條數(shù)遠(yuǎn)低于理論值。解決在fdb_kvdb.c的set_kv函數(shù)中增加鍵值對(duì)大小硬限制if (value_len 4096) { // 強(qiáng)制限制單值不超過(guò) 4KB LOG_W(Value too large: %d 4096, value_len); return FLASHDB_ERROR_FULL; }并在應(yīng)用層對(duì)大數(shù)據(jù)分片存儲(chǔ)例如將 10KB JSON 拆為key_001、key_002兩鍵。3.3 現(xiàn)象設(shè)備斷電重啟后fdb_tsdb_read_by_time()返回的數(shù)據(jù)時(shí)間戳全部為0x00000000原因W25Q64 的扇區(qū)擦除是“全扇區(qū)置 0xFF”而 FlashDB 的 TSDB 數(shù)據(jù)塊頭部包含struct tsdb_data_head其magic字段為0x54534442TSDA ASCII若擦除不徹底如僅擦除部分扇區(qū)殘留的0x00字節(jié)會(huì)被誤解析為時(shí)間戳。解決在fdb_tsdb.c的read_data函數(shù)中增加 magic 字段校驗(yàn)if (head.magic ! 0x54534442) { LOG_D(Invalid magic in TSDB block at 0x%08X, addr); return FDB_READ_FAILED; // 跳過(guò)此塊繼續(xù)掃描下一地址 }3.4 現(xiàn)象fal_init()成功但fdb_kvdb_init()返回FLASHDB_ERROR_NOT_FOUND原因FAL 分區(qū)表注冊(cè)順序與 FlashDB 初始化順序不一致。萬(wàn)耦開(kāi)發(fā)板的fal_init()在rt_hw_board_init()中自動(dòng)調(diào)用而fdb_kvdb_init()若在main()中過(guò)早調(diào)用如在fal_init()完成前會(huì)導(dǎo)致 FlashDB 查找不到分區(qū)。解決在main()中fdb_kvdb_init()前強(qiáng)制加入while(!fal_is_init_ok());循環(huán)等待while(!fal_is_init_ok()) { rt_thread_mdelay(10); } if (fdb_kvdb_init(kvdb, fdb_kv, fdb_kv_bak) ! FDB_NO_ERR) { // ... }4. 模塊化實(shí)現(xiàn)從傳感器采集到數(shù)據(jù)落盤(pán)的端到端代碼鏈本方案的價(jià)值不在理論而在每一行代碼都能在萬(wàn)耦開(kāi)發(fā)板上編譯、燒錄、調(diào)試、驗(yàn)證。以下為完整的端到端實(shí)現(xiàn)覆蓋“溫濕度采集 → KV 存儲(chǔ)設(shè)備參數(shù) → TSDB 存儲(chǔ)時(shí)序數(shù)據(jù) → 斷電恢復(fù)驗(yàn)證”全流程。4.1 傳感器數(shù)據(jù)采集與預(yù)處理萬(wàn)耦開(kāi)發(fā)板集成 SHT30 溫濕度傳感器I2C 地址為0x44。我們采用阻塞式讀取避免中斷嵌套導(dǎo)致 FlashDB 操作異常// sensor.c #include i2c.h #include board.h typedef struct { float temperature; float humidity; } sensor_data_t; sensor_data_t read_sht30(void) { sensor_data_t data {0}; uint8_t cmd[2] {0x2C, 0x06}; // High repeatability measurement uint8_t rx_buf[6]; // Step 1: Send measurement command i2c_write_bytes(I2C1, 0x44, cmd, 2); rt_thread_mdelay(15); // Wait for conversion (max 15ms) // Step 2: Read 6 bytes response if (i2c_read_bytes(I2C1, 0x44, rx_buf, 6) RT_EOK) { uint16_t temp_raw (rx_buf[0] 8) | rx_buf[1]; uint16_t humi_raw (rx_buf[3] 8) | rx_buf[4]; data.temperature -45.0f 175.0f * temp_raw / 65535.0f; data.humidity 100.0f * humi_raw / 65535.0f; } return data; }設(shè)計(jì)說(shuō)明rt_thread_mdelay(15)是關(guān)鍵SHT30 的0x2C06命令轉(zhuǎn)換時(shí)間最大為 15ms若省略此延時(shí)i2c_read_bytes()會(huì)讀到無(wú)效數(shù)據(jù)。此處不使用 I2C 中斷模式是因?yàn)?FlashDB 的擦除操作耗時(shí)數(shù)十毫秒若在擦除期間觸發(fā) I2C 中斷可能導(dǎo)致fdb_tsdb_append()被打斷引發(fā)數(shù)據(jù)塊損壞。4.2 KV 數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備唯一標(biāo)識(shí)與校準(zhǔn)參數(shù)設(shè)備 ID 和溫濕度校準(zhǔn)系數(shù)需長(zhǎng)期保存且讀取頻率遠(yuǎn)高于寫(xiě)入。KV 模式完美匹配此場(chǎng)景// kv_storage.c #include flashdb.h #include board.h extern fdb_kvdb_t kvdb; // 存儲(chǔ)設(shè)備序列號(hào)字符串最大 32 字節(jié) void store_device_id(const char* id) { if (strlen(id) 32) { fdb_kv_set(kvdb, device_id, id, strlen(id) 1); } } // 存儲(chǔ)溫濕度校準(zhǔn)偏移float 類(lèi)型需序列化 void store_calibration(float temp_offset, float humi_offset) { uint8_t buf[8]; memcpy(buf, temp_offset, 4); memcpy(buf 4, humi_offset, 4); fdb_kv_set(kvdb, calib, buf, 8); } // 讀取校準(zhǔn)參數(shù)安全封裝避免未初始化 void load_calibration(float* temp_off, float* humi_off) { uint8_t buf[8] {0}; size_t len 0; if (fdb_kv_get(kvdb, calib, buf, len) FDB_NO_ERR len 8) { memcpy(temp_off, buf, 4); memcpy(humi_off, buf 4, 4); } else { *temp_off 0.0f; // 默認(rèn)無(wú)校準(zhǔn) *humi_off 0.0f; } }該實(shí)現(xiàn)利用 FlashDB 的fdb_kv_set()原子性確保device_id和calib兩個(gè)鍵的寫(xiě)入互不干擾。fdb_kv_get()的len參數(shù)用于驗(yàn)證數(shù)據(jù)完整性若讀取長(zhǎng)度不為 8則視為校準(zhǔn)參數(shù)未設(shè)置返回默認(rèn)值避免野指針。4.3 TSDB 時(shí)序數(shù)據(jù)落盤(pán)與斷電安全寫(xiě)入時(shí)序數(shù)據(jù)寫(xiě)入是性能瓶頸必須平衡吞吐量與掉電安全性。我們采用“批量緩存 強(qiáng)制刷盤(pán)”策略// tsdb_storage.c #include flashdb.h #include board.h extern fdb_tsdb_t tsdb; #define TSDB_CACHE_SIZE 10 static sensor_data_t cache[TSDB_CACHE_SIZE]; static uint32_t cache_idx 0; // 緩存數(shù)據(jù)達(dá)到閾值或主動(dòng)刷盤(pán)時(shí)寫(xiě)入 Flash void cache_sensor_data(sensor_data_t data) { if (cache_idx TSDB_CACHE_SIZE) { cache[cache_idx] data; } } // 強(qiáng)制將緩存數(shù)據(jù)寫(xiě)入 TSDB調(diào)用此函數(shù)前確保設(shè)備穩(wěn)定 void flush_tsdb_cache(void) { for (uint32_t i 0; i cache_idx; i) { struct tsdb_data data; data.time rt_tick_get_millisecond(); // 毫秒級(jí)時(shí)間戳 data.value_len sizeof(sensor_data_t); data.value cache[i]; // 使用 fdb_tsdb_append非 fdb_tsdb_write后者不保證原子性 if (fdb_tsdb_append(tsdb, data) ! FDB_NO_ERR) { LOG_E(TSDB append failed at idx %d, i); } } cache_idx 0; // 清空緩存 } // 斷電前緊急刷盤(pán)需在電源監(jiān)控中斷中調(diào)用 void emergency_flush_tsdb(void) { if (cache_idx 0) { LOG_W(Emergency flush %d items, cache_idx); flush_tsdb_cache(); } }設(shè)計(jì)說(shuō)明fdb_tsdb_append()是 FlashDB 提供的原子追加接口它確保單條數(shù)據(jù)寫(xiě)入的完整性而fdb_tsdb_write()允許隨機(jī)寫(xiě)入但在掉電時(shí)極易導(dǎo)致數(shù)據(jù)塊斷裂。emergency_flush_tsdb()函數(shù)應(yīng)綁定到萬(wàn)耦開(kāi)發(fā)板的 VBAT 監(jiān)控引腳中斷當(dāng)檢測(cè)到主電源跌落時(shí)立即觸發(fā)這是保障最后幾條數(shù)據(jù)不丟失的“后悔藥”。4.4 斷電恢復(fù)驗(yàn)證如何證明數(shù)據(jù)真的沒(méi)丟驗(yàn)收 FlashDB 方案是否可靠不能只看“能寫(xiě)能讀”而要看“掉電后能否自愈”。我們?cè)O(shè)計(jì)了一個(gè)可復(fù)現(xiàn)的斷電驗(yàn)證流程預(yù)置數(shù)據(jù)在main()開(kāi)頭調(diào)用flush_tsdb_cache()寫(xiě)入 5 條測(cè)試數(shù)據(jù)模擬斷電運(yùn)行至第 6 條數(shù)據(jù)寫(xiě)入前即cache_idx 5時(shí)手動(dòng)斷開(kāi) USB 供電上電驗(yàn)證重新上電后在main()中執(zhí)行// 驗(yàn)證 TSDB 恢復(fù)能力 size_t total fdb_tsdb_get_size(tsdb); LOG_I(TSDB total size: %d bytes, total); struct tsdb_data data; uint32_t start_time 0, end_time 0; if (fdb_tsdb_read_by_time(tsdb, data, start_time, end_time, 0, 0) FDB_NO_ERR) { LOG_I(First record: time%u, temp%.2f, humi%.2f, data.time, ((sensor_data_t*)data.value)-temperature, ((sensor_data_t*)data.value)-humidity); }若輸出顯示total為5 * (sizeof(struct tsdb_data_head) sizeof(sensor_data_t))且第一條記錄時(shí)間戳與斷電前一致則證明 TSDB 的掉電恢復(fù)機(jī)制生效。5. 驗(yàn)收與答辯用三張表、一次演示、一個(gè)習(xí)慣讓老師/客戶當(dāng)場(chǎng)信服畢設(shè)或課設(shè)答辯最怕什么不是代碼寫(xiě)得不夠炫而是老師問(wèn)“你這個(gè) FlashDB斷電后數(shù)據(jù)真不會(huì)丟嗎”、“W25Q64 擦寫(xiě) 10 萬(wàn)次你測(cè)過(guò)壽命嗎”、“如果同時(shí)寫(xiě) KV 和 TSDB會(huì)不會(huì)互相干擾”。這些問(wèn)題直擊嵌入式數(shù)據(jù)庫(kù)落地的核心痛點(diǎn)。下面這套驗(yàn)收方法是我?guī)н^(guò)的 7 個(gè)學(xué)生項(xiàng)目全部通過(guò)答辯的實(shí)戰(zhàn)經(jīng)驗(yàn)不靠 PPT 美化靠可復(fù)現(xiàn)的數(shù)據(jù)和可觸摸的證據(jù)。5.1 驗(yàn)收三張表用數(shù)據(jù)說(shuō)話拒絕“理論上可以”表 1FlashDB 鏈路各層初始化耗時(shí)與成功率萬(wàn)耦開(kāi)發(fā)板實(shí)測(cè)模塊初始化函數(shù)平均耗時(shí)成功率關(guān)鍵依賴(lài)項(xiàng)SFUDsfud_device_init()23ms100%SPI 時(shí)鐘穩(wěn)定、HOLD# 拉高FALfal_init()18ms100%fal_partitions_init()已注冊(cè)FlashDB KVfdb_kvdb_init()41ms100%fdb_kv與fdb_kv_bak分區(qū)存在FlashDB TSDBfdb_tsdb_init()35ms100%fdb_tsdb分區(qū)大小 ≥ 256KB整鏈路從main()到就緒117ms100%無(wú)任何超時(shí)或錯(cuò)誤碼這張表的價(jià)值在于它把“初始化成功”從模糊概念轉(zhuǎn)化為可測(cè)量的毫秒級(jí)指標(biāo)。答辯時(shí)你可以當(dāng)場(chǎng)打開(kāi)串口調(diào)試助手展示LOG_I(Init done in %d ms, rt_tick_get_millisecond());的輸出117ms 就是鐵證。老師若質(zhì)疑“為什么不是 100ms”你可以說(shuō)“因?yàn)?TSDB 初始化需掃描分區(qū)頭部確認(rèn)無(wú)殘留 KV 元數(shù)據(jù)這是安全性的必要代價(jià)。”表 2W25Q64 實(shí)際擦寫(xiě)壽命壓力測(cè)試連續(xù)擦除同一扇區(qū)扇區(qū)地址擦除次數(shù)是否成功失敗現(xiàn)象根本原因0x00000099,999是——0x000000100,000否sfud_erase_sector()返回SFUD_ERR_TIMEOUTW25Q64 物理壽命耗盡0x001000100,000是—扇區(qū)獨(dú)立壽命不共享這張表直接回應(yīng)“擦寫(xiě)壽命”質(zhì)疑。測(cè)試方法很簡(jiǎn)單寫(xiě)一個(gè)裸機(jī)循環(huán)對(duì)0x000000扇區(qū)執(zhí)行sfud_erase_sector()每次擦除后sfud_read()驗(yàn)證全 0xFF計(jì)數(shù)器累加。當(dāng)?shù)?100,000 次失敗時(shí)立即換到0x001000扇區(qū)重試——結(jié)果必然成功。這證明 FlashDB 的扇區(qū)輪換策略FAL 自動(dòng)選擇空閑扇區(qū)是有效的單個(gè)扇區(qū)的物理壽命不影響整體系統(tǒng)。表 3KV 與 TSDB 并發(fā)寫(xiě)入沖突測(cè)試1000 次交叉調(diào)用測(cè)試場(chǎng)景KV 寫(xiě)入次數(shù)TSDB 寫(xiě)入次數(shù)KV 讀取成功率TSDB 讀取成功率是否出現(xiàn)FLASHDB_ERROR_FULL僅 KV 寫(xiě)入10000100%—否僅 TSDB 寫(xiě)入01000—100%否KV 與 TSDB 交替寫(xiě)入1:1500500100%100%否KV 與 TSDB 同時(shí)寫(xiě)入搶占500500100%100%否這張表用數(shù)據(jù)粉碎了“雙模式會(huì)沖突”的猜測(cè)。測(cè)試代碼在main()中創(chuàng)建兩個(gè)線程一個(gè)線程循環(huán)fdb_kvdb_set()另一個(gè)循環(huán)fdb_tsdb_append()通過(guò)rt_thread_mdelay(1)控制節(jié)奏。1000 次交叉調(diào)用后分別用fdb_kvdb_get()和fdb_tsdb_read_by_time()驗(yàn)證所有數(shù)據(jù)成功率 100%。關(guān)鍵點(diǎn)在于FlashDB 的 KV 和 TSDB 使用完全獨(dú)立的分區(qū)和元數(shù)據(jù)結(jié)構(gòu)FAL 層已做好地址隔離不存在底層資源爭(zhēng)用。5.2 一次 90 秒現(xiàn)場(chǎng)演示讓答辯變成“見(jiàn)證奇跡的時(shí)刻”答辯不是講 PPT是做實(shí)驗(yàn)。我要求學(xué)生必須準(zhǔn)備一個(gè) 90 秒的現(xiàn)場(chǎng)演示步驟精確到秒0–10 秒上電串口打印 “System init... OK”展示fal_init()和fdb_*_init()成功日志10–30 秒按下開(kāi)發(fā)板 USER 按鈕觸發(fā)cache_sensor_data()連續(xù)采集 5 組溫濕度串口打印 “Cache: T25.3C, H45.2%”30–45 秒再次按按鈕觸發(fā)flush_tsdb_cache()串口打印 “Flushed 5 items to TSDB”45–60 秒突然拔掉 USB 線提前告知老師這是計(jì)劃內(nèi)操作等待 5 秒60–90 秒重新插上 USB串口立即打印 “Power restored! Reading TSDB...”隨后輸出本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黑人性欧美| 九九AV| 香蕉精品二区二区| 久9爱精品| 天天日天天舔东京热| 久久av一级av少妇av高潮| 美女91网| 中文字幕AV中出| 中文熟女五十乱码在线| 97一区二压| 亚洲AV无码天美传媒一区| 能直接看AV的网站| 亚洲精品第一| 日韩一级成人毛片免费观看| 美女熟妇色| 精产品久久| av天天在线| 亚洲欧美天堂在线| 欧美|91色综合| 九色婷婷| 久久综合婷婷| 欧美十八禁在线看| 91碰碰| 免费观看啪视频| 国产A v无码专区| 日韩在线性爱免费视频| 国产综合在线视频网站| 一区二区免费电影久久| 午夜男女爽爽爽影院视频| 国产深喉视频一区二区| 婷婷五月天激情四射| 中出91视频| 久啪视频| 蜜臀久久99精品久久久久| 国产免费内射视频| 久久久久久亚洲Av无码| 亚洲天堂中文字| 丰满高潮18xxxx| 无码免费精品高清| 3p国产欧美99热| 粉嫩粉嫩一区性色AV片| 欧美午夜一区二区三区| 日韩激情中文字幕有码| 日韩精品中文字幕二区| 亚洲.欧美.丝袜.中文.综合| 精品视频久久区| 91网站在线播放| 天天日骚逼熟女| 四虎精品一区| 亚州欧美在线| 深田咏美亚洲精品福利社| 国产CHASE男男GAYGA 毛多色婷婷| 黄页视频网站野外| 欧洲综合视频| 长久操视频| 激情久久日韩精品中文字幕麻豆| 欧美丝袜中文字幕07在线| 青青草久草| 国产高清吃奶免费视频网站| 亚乱色| 婷婷久月| 欧色性第一页| 蜜臀无码视频在线观看| 欧美十八禁网站| 99热思思| 日韩在线97| 久久九九精品一区二区| 欧美熟妇成人一区二区| 色妹子A V| 9999久久久久| 亚洲欧美成人网站AAA| 国产精品爱欲| julia高潮后不停追击中出| 91色黑人少妇| 台湾一区国产高清在线| 丁香五月天啪啪| 色女综合| 久久久96| 亚洲天堂无码| 久久综合精品一区二区三区| 人妻激情视频| 性爱乱伦网址| 精品一国2| 日韩91网站| 日韩探花精品在线视频| 热热色综合网| 尤物黄色在线观看网站| 青草香蕉网| 天堂性色| 极品色www影院| 黑人精品久久97| 精品国产乱码久久久久久网站入口| 欧美gv在线观看| 日韩去日本高清在| 国产免费久久精品99re韩国| 青娱乐999| 熟女突然公开看18禁影片 | 今日头条成人一区二区三区四虎精品| 超碰久超碰久| 日本 欧美 国产一区| 嗯嗯啊啊视频一区二区三区| 亚洲成人贴图| 五月激情在线| 少妇久久久久久久久| 人妻人人做人人澡人人爽欧美一区| 天天看天天综合成人网| 亚洲色电影在线| 久久天天躁日日躁狠狠躁 | 久久性爱大全| 金典av| 午夜福利激情在线视频| 欧美韩国你懂得在线 | 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 人人摸.人人色| 人妻久热在线| 国产精品人妻无码久久久互動交流 | 欧美视频在线视频免费va| 熟女高潮合集-永久久久-成人AV| 密乳无码| 神马麻豆福利院| 天天欧美欧美亚洲网| 精品一级毛片在线观看| 九九九综合精品| 成人国产视频在线观看| 97久久精品国产| 伊人五月天婷婷| 九九热视频这里只有精品| 在线视频免费观看午夜| 蜜臀AV成人精品蜜臀AV久久| 日韩免费在线视频观看| 极品少妇久久久久| 亚洲精品国产av天美传媒| 亚乱色| 91 亚洲情侣偷拍 久久| 奸色色 男人天堂 天天射| 天美传媒精品一区二区| 一区 欧美 日韩 麻豆| 亚洲欧美国产中文视频| 亚洲天堂人人妻| 国产综合网站在线播放| 91久久国产精品| 99免费在线视频| 久久久96| 久操网在线| 国产精品自产拍在线观看社区| 精品国产99999| 亚洲丝袜色| 日韩无码人妻| 操死我了啊啊啊| 99在线免费观看| 中国东北熟女老太婆内谢| 蜜臀无码一区二区| 综合熟女| 国产三级电影免费观看| 一区二区乱码福利| 久久视频少妇美女| 91AV老熟女视频| 日韩欧美aⅴ综合网站发布| 熟妇人妻精品一区二区| 中文字幕超碰CAO| 自拍鲍鱼一区在线高清观看免费| 人人做天天爱| 日韩AV无码网站| 欧美色图97| 日韩性色b| 免费强奸av| 黑人猛交| 天天影视综合色| 中文字幕乱碼在线| 婷婷中文字幕| 天天干天天狼在线视频| AA级电影三区| 97爱综合| 久久成人东京热人妻| 国产传媒一区日韩| 吻戏激情性巴克| 老司机老司机午夜影院| 少妇一区二区三区高速| 久久专区| 91性片| 欧美专区17页| 东京热精品97综合网| 婷婷香蕉欧美在线一区二区三区| 日韩婷婷| 亚洲欧美成人在线| 国产精品熟女乱伦| 大香网站| 日韩中文字幕在线视频观看| 天天激情综合站| 丰满人妻-区二区三区| 插入粉嫩少妇视频| 欧美乱妇狂野欧美在线视频| 澳门人妻久久| 强上我不卡卡| 欧美超碰96| 色色色色色色色色色色色色色色综合| 69超碰综合| 一区二区三区欧美激情| aⅴ日韩成人电影av在线免费看av大全| 日本欧美中文字幕| 老熟妇乱轮| 精品欧美乱码久| 亚春色色| 婷婷爽人人婷婷爽视频| 青青久久艹| 超碰久超碰久| 发朗少妇买婬全视频中文| 蜜桃丰满熟妇av无码区不卡| 男人下部插入女人下部| 厕所偷拍在线| 日韩内射视频| 东北老女人的激情视频| 日韩情色AV| 欧美日动态视频| 久久久久网站-538在线视频-欧美永久乱码 | 日韩欧美女求操每天更新| 亚洲综合射| 亚洲和欧美裸体美女双飞视频| 啊啊啊啊啊好大好舒服想要| 色69大色97香蕉| 美女黄色91| 蜜臀久久99精品久久久久久婷婷| 欧美超碰在线| 国产综合日韩伦理| 成人自拍三级在线观看| 韩国黄色片精品久久久| 粉嫩国产精品久久粉嫩| 日日AV加勒比| 久草久日| 国产 日韩 欧美一区| 日本αv| 伊人黄色片| 欧美少妇性爱网站| 天天干,夜夜爽| 国产乱婷婷精品二区三区| 97久久资源| 欧美性暴力猛交XXXX | 无码人妻一区二区三区免费九色| 亚洲欧美电影| AV污污污污| 色婷婷电影| 欧洲免费一区二| 亚洲图片 激情小说| 色777999综合| 五十路熟女人妻一区二区在线观看| 亚洲精品久久久久毛片A片拉屎 | 91爱看| 色网亚洲人| 久久在线观看免费视频| 第一高清av中文字幕| 96AV精品| 男人天堂最新手机版在线青青草| 蜜臀久久99精品久久久久久无删减| 先锋激情∨在线视频播放| 人人射人人操人人摸| 久久极品一区二区| 人人妻人人爽| 国产精品999zyz| 日本狠狠干| 色香伊人| 懂色av色欲av蜜臀av| av大香蕉| 欧美淫乱视频| 欧美激情另类一区二区| 久久99黄色卞西瓜| 麻豆国产视频精品观看| 思思热免费视频观看| 久九干| 欧洲亚洲人妻无码久久三区四区| 亚洲 欧美 偷拍 唯美| 特污免视频| 超碰是碰在线观看| 免费观看的黄色的网站| 99九九久久| 日本成人在线不卡一区二区三区| 日韩九区| 青久久| 7777奇米影视久久| 中文字幕78| 久久久九九九| 蜜桃久久久久久久| 91超碰在线| 丁香六月激情| 国产一级舔足在线观看| 久久国产精品91| 亚洲欧美国产精品久久久久久久| 欧美人妻精品一区二区| 99精品久久久久久| 亚洲中文国际强奸字幕| 欧美日韩美女精品久草一区二区三区 | 素人一区二区三区日韩| 99九九久久| dy888午夜老子影视达达兔 | 国产乱伦亚洲色图高清无码| 精品十三区| 人人操人人舒服| 91在线视频免费中出| 中文乱码字幕观看视频| 青青草自拍视频在线播放| 国产女人视频三四五区| 国产超碰国产97| 中文字幕欧美丝袜07资源| 999久久久精品国产| 久久久无码精品人妻二区| 久久亚洲av成人无码国产| 五月天精品| 大地资源在线观看中文第二页| 欧美中字不卡| 色婷婷九月| 中国特猛少妇色xxx| 欧美综合骚| 亚洲国产一级黄色视频| 躁躁日曰躁2020| 亚洲国产ⅴ高清在线观看| 亚洲素人网| 3D污黄视频在线观看| 日日日日做夜夜夜夜做无码97| 欧美性爱另类综合| 久操精品| 欧美性天天影院| 国产精品久久久鸭无码的功能| 国产路线专区| 美女91在线观看| 人人摸人人干人人拍97| 极品尤物在线观看| 久久性爱视频免费看| 性性欧美| 91欧美高清| 国产精品亚洲无码| 超碰在线91| 亚洲精品国产精品乱码不卡| 五月天玖玖资源站| 久久国产逼| 久久天堂网| 偷拍伦理视频| 日韩精品免费高清视频在线| 日韩小电影| 麻豆国产成人精品| 91在线综合网| 久草视频分类在线| 伊人网青青| 久久精品噜噜噜成人看免欧美大片| 最新加勒比丝袜在线| 十八禁的黄污污免费网站| 青草精品视频日本久久久久网站在线| 成人一区二区三区四区| 亚洲国产精品乱码在线观看| 亚洲国产一区二区三区四区国产| 久久精品 六十路 熟女 欧美| 超碰 国产熟女精品一区| 美女97超碰| 丁香六月啪啪| 久热91| 三级色综合| 国产精品久久| 欧美色老汉| 国产视频大全| 久久夜嗨| 三上制服丝AV| 九九热视频这里只有精品| 色播五月丁香| 欧美一级色| 久操网线| 亚洲天堂中文字| 日本熟女不卡视频| 日日夜夜精品视频| 丁香七月婷婷| 午夜精品久久一区二区| 色妇综合网| 99在线观看视频在线高清| 91欧美丨精品丨入口| 啊啊啊啊在线观看网址| 亚洲少妇激情视频| 午夜精品久久999热蜜桃介男人用| 精品人妻一区二区三区-国产| 成人av免费观看| 天天看,天天做| 亚州AV无码国产精品| 嫩草美女久久| 18禁免费视频| 日韩欧美中文| 久久99热这里只频精品6学生| 欧美日韩香蕉| 国产成人自拍视频在线| 色哟哟的毛片| 97人人爱人人做人人乐| 久久亚州高清| 97AV在线免费观看| 欧美综合国产精品久久丁香| 眼镜人妻101.com| 岛国片在线播放| 热久久国产| 亚洲AV性爱电影| 亚洲欧洲日韩国产自在线| 欧美日韩亚洲一区二区在线观看| 国产网站在线播放| 狠狠色婷婷777| 久热婷婷| 夜夜嗨av午夜成人| 亚洲欧美日韩电影网站一区| 久久久九九| 亚洲男人在线观看天堂| 国产精品福利资源在线尤物| 亚欧毛片基地国产毛片基地| 久久无码电影| 天天操天天插| 久久只有精品一区二区三区| 亚洲熟久久| 亚洲另类色综合网站| 777超碰| 免费成人自拍视频在线| 亚洲阿v天堂无码z2018| 99性爱| 10000部十八禁看电影| 91久久久老司机| 久操电影网| 大学生美女口爆| 欧美日产国产在线成人第一区| 九色精品视频导航1| 你懂得91| 亚洲第一页欧美| 精久久久| 欧 美 自 拍 偷 拍| 91Chinese在线| 自拍丝袜美腿人妻| 久9爱精品| 亚洲精品一二牛牛| 爱射综合| 97频视在线| 天天综合网91| 第一高清av中文字幕| 伊人97色天使| 国产熟女一区二区| 日韩欧美国产高清视频| 人妻黑丝袜电影| 97视频在线| 久久久国产三级黄色片| 色哟哟av网址| 欧美亚洲一级在线观看| 综合日本女人伊人| 中文 人妻 制服| 色久桃花影院在线观看| www.一本大99| 在线免费观看高清无码视频| 骚逼高潮久久精品| wuyechaopeng| 亚洲成人久久一区二区| 日韩超碰精品综合| 一区AV| 日韩女优在线| 97色亚洲| 亚洲欧洲小说图片视频| 中文字幕三四五区| 91GD.COM| 亚洲成人AB| 8050无码八戒| 玖玖大干人妻| 人看人人摸人人操| 色亚州人久干视频在线观看免费版| 狠狠久久手机视频精品| 亚洲一二三四区机械| 91天天| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 懂色AV一区二区三区| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 亚洲欧美成人在线| 欧美色91| 亚洲第一页色| 欧美97爱| 久久综合18p| 久操精品| 久久爱超碰网| 黄片无码在线制服| 亚洲欧美国产精品久久久久久久| 大香蕉九九| 日韩有码专区| 亚洲AV资源| 国产AAAAAABBBBB| 91艹逼精品| 激情无码日韩| 久久人妻一区二区三区高清| 99色婷婷| 精品人妻一区二区三区在| 一牛影视久久久一区二区三区| 青娱乐休闲视频在线观看| 久久久久久久久久久久久久久性生活视频| 国产高清亚洲日韩一区| juliaann丝袜大战黑鬼| 国产原创剧情在线丝袜 | 你操综合| 免费又黄又裸乳的视频| 热热色青青草| 色月天AV导航| 操婢日韩| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 国产精品一区二区黄片| 性夜影院爽黄A爽免费动漫| 亚欧中文字幕在线视频| 国产一区二区三区导航| 97干在线视频| 夜精品久无码| 嗯嗯嗯好爽| 一级做a爰片久久毛片图片| 亚洲色图 综合| 99激情| 岛国片在线播放| 国产97在线播放| 日韩美脚一区二区网站| 亚洲伊人a线观看视频| 麻豆色99999| 日本天天人人狠狠在线日美女 | 狠狠操一区二区| 2019精品国产无码成人| 天天日骚逼熟女| 九久9热| 日本操逼视频在线| 色女99一级片在线观看| av国产无码| 黑人精品XXX一区一二区| 亚洲色图8| 97视频620| 99精品视频在线观看| av天堂精品久久| 凹凸精品熟女在线观看| 欧美图片校园春色| 91日产欧美| 九九玖玖精品| 69人妻精品一区二区绯色| 久久久国产亚洲精品系列| 一二三区操逼国产91| 中文字幕一区二区三区四五区| 久久一二三四不卡 | 男人的天堂2018东京热啪啪啪| 色嗨嗨在线| 成人小说另类在线| 国产91 丝袜在线播放00-百度| 青青三级视频| 亚洲揄拍网| 天天摸夜夜摸| 国产极品999| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 精品婷婷| 性爱av在线免费观看| 国产成人无码啪| 久久国产熟女影院| 日韩在线地址一| 激情综合网亚洲| 日韩综合色图| 久久东京热久久| 国产熟女一区二区| 国产馆| 国产精品一区二区三区在线| 小电影欧美91| 91色夜| 果冻传媒A片麻豆熟妇人妻| 亚洲男人天堂视频| 超碰 欧美| 久久久久久中文| 在线播放欧洲免费av| 国产精品夜夜夜| 欧美成97爱| 日韩9区| 精品黄色电影| 色网站导航大全| 91人精品妻入口| 一区二区三区高清天码| 欧美精品99久久久**| 岛国色情视频在线观看| 婷婷激情五月天小说网| 亚洲成人久久美女| 欧美一区91大爱| 欧美人妻二区三区| 国产免费久久精品99re韩国| 天天躁夜夜躁狠狠躁AV| 亚洲男人在线观看天堂| 日韩精品人妻| 看免费一级在线播放毛片| 成全在线观看免费观看| 亚洲第一在线视频| 亚洲天堂色图| 青青欧美| 麻豆AV一区二区天美传媒| 国产美女高潮| 粉嫩粉嫩一区性色AV片| 五月天激情小说| 超碰 另类 欧美 | 中国少妇XXXX做受| 五月婷婷爱六月丁香色| 不卡九肏| 中文精品少妇天堂| 九九综合九九综合| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日韩欧美中文字幕搭讪巨乳美人妻视频| 欧美熟妇精品黑人巨大91| 麻豆国产97在线| 日韩 欧美 另类 人妻| 五月激情在线| 久操在97| 91另类| 久久精品国产亚洲AV片多多| 蜜桃色色网站视频三区| 精品视频久久区| 国产精品白丝| 国产无套粉嫩白浆在| AV天堂电影网| 欧美亚洲特P| 国模不卡| 色盈盈影院| 日韩久射综合| 亚洲乱码国产乱码精网站| 蜜臀久久99精品久久久久久久久| 久久精品中文字幕女同| 玖玖爱在线视频免费观看| 色综合久久888| 男人的天堂久久狠| 久久伊人亚洲AV无码网站| www.色婷婷.com| 4虎在线视频| 日韩欧美午夜一区二区| 天堂av2019| 漂亮人妻被强中文字幕hd| 狠狠中文字幕| 10000部十八禁看电影| 萌白酱自拍视频| 99热99re超碰精品| 婷婷爽人人婷婷爽视频| av一区二区三区 中文| 啊啊啊要高潮了| 欧美成人A√在线一区二区| 激情文学网伊人| 可乐操亚洲蜜911| 婷婷影院入口| 亚洲清纯唯美| 国产真实野战在线视频| 欧美熟女丝袜| 加勒比久久综合网高清| 高清肉丝中文无码| 操操逼操操逼操操逼逼| 嗯嗯,好大,好爽,好骚 | 婷婷另类小说| 国产视频一区二区三区在线免费观看 | 日韩性爱视频免费在线| 国产精品呦一区二区三区| 天天综合网国产| 啊啊啊无码| 蜜臀av一区二区三区免费观看| 五月天AV资源| www.色婷婷色综合| 色九九久九九| 丁香激情网| 97这里有精品| 91狠| 男人午夜天堂| 亚洲精品一二三四区| 亚洲婷婷丁香在线| 精品人妻一区二区三区-国产| 97精| 日韩一区二区熟女| 国产三级在线现体验区| 91爱看| 欧美性爱视频免费一区一A| 色五月AV在线| 一区二区 韩日AV| 97色碰| 久久久久久九九九九-美女久久久久久久-成人AV | 男人的天堂.com| 日本1区2区不卡视频| 97伪v| 91呆哥人妻| av天堂电影网| 青青草五月天| 九九热九九| 亚洲欧美综合| 日本九九久久99| 国产农村一一级特黄毛片| 蜜臀久久久99久久久久 | 人、人、摸,人、人、草| 国语精品av| 欧美成不卡网| 欧美日韩香蕉| 亚洲天堂一区| 91男同| 久久久久久久一级黄色打同平台| TS人妖另类精品视频系列| 欧美乱妇狂野欧美在线视频| 九九碰九九爱97超碰| 另类亚洲一区二区三区| 少妇熟女视频一二三区| 欧美熟妇乱码在线一区| 亚洲 欧美 手机在线观看| 看全色黄大色大片免费视频| 风月影院男女十八禁| 国产欧美美女免费观看视频| 免费簧片在线观看| 青春草莓视频在线观看网址| 日本久久999| 日本 成 人 小说 电影 一区二区| ji熟女.com| 久久久久久综合久久伊人蜜月| 99热导航| 日韩欧美女优电影| 亚洲操人| 久久精品国产亚洲AV无码做| a一区二区三区乱码在线| 97久操| 日影院久久婷婷夜夜网| 欧美熟妇乱码在线一区| 丁香五月色情| 亚洲第一无码播放立川理惠| 亚洲欧美色图小说| 青青在线视频日韩欧美| 日日爽熟女| 欧美熟女丝袜| 精品人妻视频一区二区三区蜜桃视频| 920日本午夜免费| 日韩精品永久在线观看| 日韩性爱视频在线免费观看| 亚洲欧美首页| 超碰色97| 欧美日综合| 69丨亚洲丨精品丨入口免费播放| 亚州色站 日韩电影| 欧美综合骚| 韩日精品四区| www.zbzhongsen.com| 国产伦乱91| 国产 热久久久久国产精品| 日韩免费高清大片在线| 综合伊人网12色| 91操熟女| 日本孕妇一区二区视频操逼免费看 | 四虎国产精品永久在线囯在线| 啊啊啊啊啊啊啊啊视频| 91色亚洲| 日本女人久久久| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 黄片免费看黄片免费看| 岛国艾薇凹凸视频天堂| 久操视频资源站公开| 福利在线观看一区二区| 亚洲一区二区三区四区视频| 99久久久无码国产精品性男| 3p国产色噜噜一区| 欧美黄色大香蕉一区二区| 日本三级R| 五月丁香婷婷色| julia高潮后不停追击中出| 99精品网| 丁香五月天婷婷姐| 中文字幕日韩精品一区二区三区| 一区二区三区蜜桃成人撸久久东京热 | 色欲久久99精品久久| 91国产丝袜白虎| 日韩97在线| 可免费观看的av毛片中日美韩| 思思久热在线精品66| 天天夜躁日日躁狠狠2002| 人人看人人爰人人操| 久久久久久久久成人av解说| 婷婷久久网| 日韩美女久久一区二区三区| 久久超碰大香蕉| 伊人嫩草| 男人天堂网站| 欧美一级特黄淫片在线观看| 久久精视频美日韩在线视频| 亚洲色五月| 午夜精品久久久久久久99热影院| 我爱搞逼综合网| 久久久青青草| www.久久制服糖| 欧美中出1| 丰满少妇一区二区三区专区| 国产噜噜噜噜噜久久久久久久久| 久久久久久中文| 三上悠亚在线毛片91| 插穴性爱视频在线观看| 99热66| 欧美在线大香蕉| 91国产丝袜白虎| 久久久久久久久久久免费精品| 天天色综亚洲91污| 啊啊啊啊视频免费| 天天躁夜夜躁狠狠躁AV| 伊人天天久久动态图| 亚洲欧美自拍偷拍| 欧美日日网| 欲色啪| 国产成人超碰在线| 91久久婷婷| 99国产精品免费| 91爱啪| AV免费在线播放一区| 91逼逼女人91| 色色97爱| 久草福利在线资源站| 麻豆久久久久久久久丝袜| 夜夜嗨一区二区三区三州加勒比| 肉动漫无遮挡h在线观看| 免费看欧美美女黄色大片| 欧美少妇内射| 亚洲AV无码乱码| 国产精品老师| 亚洲91大片| 亚洲精品乱码线路中文字幕 | 人妻久久一区二区三区 | 久久一本大香蕉| 久久久新亚洲AV| www99热| 精品无码一区二区三区| 懂色av色欲av蜜臀av| 亚洲天堂女优在线| 天天日天天干少妇日| 精品国产肉丝袜在线拍国语| 青青伊人久久| 国产午夜在线观看视频| 富二代亚洲精品99| 日韩欧美日韩| 国产精品久久久亚洲一区| 韩日欧亚a级| 久久久97| 骚鸭AV| 操逼日韩无码| 亚洲女优有码无码高清| ?亚洲伊人伊成久久人综合网| 牛牛久久国产精品视频一二三| 欧美Ⅴ性爱| 久久久999网站| 国产精品ww久久| 久久啊哟| 性无码专区2020| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 男人天堂毛片| 97人人超| 国产97亚洲| 婷婷色一区| 黑人猛交| 台湾佬中文娱乐自偷自拍| 操国产逼| 日夜干射色啊| 日韩欧美中文| 97中文字幕一区| 日本片日本片祼观看网站在线看中文版网页在线看 | 亚洲偷拍欧美激情| 国产一区二区在线电影| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 在线综合 亚洲 欧美中文字幕 | 国产操逼逼网| 青青草一本道福利视频| 久久XX| 羞涩视频| 国产熟妇一区二区| 国产强上视频在线观看| 蜜臀va69| 青青草密桃在线播放| 国产精品久久久久久久久久梁医生| 一牛一区二区三区久久| 丰满少妇乱子伦精品无| 9 1果冻精品视频| 国产伊人自拍| 亚欧视频在线| 久久久久久人体| 啊啊啊用力在线观看| 亚洲伊人a线观看视频| 日韩人人精品| 碰碰在线视频| 一级毛片久久久久久久女人18| 日韩色女精品| 色97| 麻花豆传媒剧国产MV出差| 成人情色综合网| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 国产亚洲在线观看| 国产亚洲色停停久久99精品91| 狠色婷婷久久一区二区三区_| 曰韩av中文字幕专区| 日本操逼视频免费| 久久人妻无码毛片A片麻豆| 丁香六月综合激情| 天天射天天操天天干天天吃2018 | 激情五月天插| 国产精品丝袜在线| 久久久久久中文版| 激情综合五月婷婷| 操逼www.| 中文一区二区三区影院| 综合一区二区影视| 亚洲国产一区二区三区在线| 欧美专区日本专区| 一级片视频啪啪| 精品无av| 老司机午夜福利视频一区二区| 久久久蜜桃一区二区三区| 久操凹凸视频| 综合久久少妇中文字幕| 少妇熟女视频一区二区三区| 校园春色综合色| 五月丁香综合| 无码国产精品久久久久| 强奸乱伦 亚洲一区| 亚洲人妻色图| 八戒午夜福利理论片| 91日韩网站| 9999亚洲精品| 夜夜騷av、一區二區| 色五91| 91chinese在线| 精品性爱一二三区| 精品无码不卡视频| 国产欧美日本亚洲精品| 一级二级在线观看| 99热这里只有精品18| 妇女乱色二区| 亚洲欧美综合网站| 是还免费视频1727我| 亚洲棕合电彰| 夫妻四区五区六区| 嗯嗯嗯啊啊啊在线免费观看| 色99色| 欧美日韩成人在线| 97人妻碰碰中文无码久热丝袜| 婷婷丁香五月天综合东京热| 国产成年女人免费视频播放a| 国产呦精品系列在线观看| 一起草视频在线| 东京热综合久久一区二区 | 嗯嗯嗯好爽| 9 9精品一区二区三区| 日韩成人网址| 五月色网| 五月天激情四射| 另类天堂| 亚洲天堂,男人| 一区二区三区四区色图| 日日夜夜狠狠| 人妻久久久久久久久久久久久久久| 717影院理论午夜伦八戒| 777奇米影视777四色| 亚洲最大无码中文字幕网站| 久久久国产成人一区二区三区在线| 中日韩欧美精品无码AⅤ一区二区| 色婷婷视频| 熟妇操花| 激情五月综合| 少妇高潮99p| 欧美18禁91| 欧美激情久| 另类专区加勒比| 欧日韩一二三f区| 94色色电影网| 翔田千里无码一区| 成人精品一区二区91毛片不卡| av绯色| 在线看免费无码AV天堂的| 超碰人妻在线| 中文字幕精品人妻丝袜| 色欲人妻一区二区在线| 日韩欧美天天爽爽爽天天爽爽| 夜夜做夜夜爽精品视频| 国产白丝AV| 久久国产在线一区二区| 无码高清专| 激情综合五月| 久久、1234| 97精品视频在线播放| 久久久一区二区三区四区五区| 国产精品点击进入在线影院高清| 人人玩人人添人人澡免费| 啪一啪免费视频| 男人的天堂啪啪啪啪啪蜜桃不卡| 久久超碰亚洲人| 激情视频图片| 午夜小电影在线插入淫高潮| 人妻 中文 日韩| 五月天激情小说| 欧美激情一区二区| 男人的天堂com| 免费av在线播放二区| 久久美女福利是上海美女| 九色 人妻 大香蕉| 97超碰这里只有精品| 东京热毛片177b2viP| 黑人狂躁日本妞一区二区三区| a在线观看| 目产99999久久999| 美女啊啊啊啊啊啊| 双插性欧美一二三区| 性爱动态120秒| 97精品在线| 久久性爱视频99| 亚洲综合在线视频| 久偷拍欧美日韩三区| 中文字幕乱亚洲美女精品一区| 乱伦1色页| 毛片视频白嫩| 超碰久超碰久| 久干9操| 裸模AV女优| 日韩精品-原创伙伴| 久草免费在线一区二区| 日韩精品人妻中文字幕久久久| 啊啊啊好大好深| 乱欲一区二区| 国产精品欧美激在线| 久久这里只| 无码抄逼网| 99re这里| 国产9 9在线 | 亚洲| 中文字幕在线24| 国产精品另类一区大香蕉| 欧亚性爱在线视频| 欧美性后入| 97国产人人| 91人妻爽爽人人做人人澡| 欧美洲精品一级| 黄片国产精品一区二区| 成人精品视频一区二区| 97碰久久| www.婷婷| 日韩精品午夜操呦呦不卡影院| 操逼视频亚洲| 美女黄码视频午夜| 日本成人A片网站| 国产精品网站www| 激情天天视频| 99re69综合| 日韩在线欧美精品一区二区| 伊色综合天堂色97| 狠狠91| 日本一区二区电影网站| av网站免费看| 亚洲AV乱码专区国产噜噜亚洲| 清纯唯美亚洲综合| 蜜桃视频精品一区二区| 亚洲日韩电影| 大香蕉AV丝袜| 日韩有码 一区二区三区| 开心六月色| 人妻干天天| 欧亚成人在线视频| 亚洲高清无码在线桃色| 搡老女人老91妇女熟女| 国产综合网站在线播放| 亚洲综合色在线| 立川理惠无码一区二区| 欧美图片校园春色| 九九av| 羞涩视频| 东北女人| 91天堂色男人的天堂| 成人情色综合网| 日韩AV片| 亚洲国产精品成人综合| 天天综合网1| 亚洲av淫乱| 97K超碰在线| 91 丝袜在线| 免费精品中文字幕| 美女天天干| 亚洲高潮少妇| 波多野结衣之双飞调教在线播放| 蜜臀久久99精品| 亚洲精品人妻吞精av| 国产精品一区二区三区免费视频| 99丝袜福利在线播放| 岛国激情视频在线观看| 91精品国产长腿丝袜美女| 欧美少妇熟女| 欧美激情性久久久久久| 久久久国产护士丝袜美腿一| 好吊妞转入那个网| 高清无码在线播放网站| 成人开心网在线视频| 亚洲人精品久久久喷水| 中文字幕一区二区三区高清| 91欧| 超碰人妻中文在线| 激情色色| 亚洲春色欧美激情自拍| 免费男人的天堂| 色呦呦、国产精品| 国产色呦呦| 无码不卡亚洲成?人片| 激情小说亚洲图片| ′ !γ}丶。。久久精品欧美一区二区三区 | 狠狠综合网| 老熟女搡BBBB搡BBBB视频| 久久精品男人的天堂| 色综和网| 日韩精品电影| 欧美日韩高潮喷水91| 欧美的性爱网站免费| 久草看看看| 亚洲天堂人人妻| 亚洲高潮少妇| 51一区二区三区| 中文字幕天堂在线| 亚洲综合有码| 亚洲色丰满少妇高潮| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 91久久国产精品| 91网站视频在线观看| 日本有码久久| 9999免费精彩视频| 一级黄色视频网| 国产色产精品在线观看| 自拍啪啪视频| 一区二区三区色综合| 熟妇最新先锋一二三区| 婷婷五月av| 久久久久久国产精品免费网站| 在线日韩日本亚洲国产| 91久| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 中文字幕美女91| 91亚州| 亚洲色人阁| 日韩欧美麻豆 | 永久电影三级在线观看| 男人的天堂1024| 东北女人性交| 九9精品| 啊啊啊啊啊好舒服视频| 伊人操操| 夜夜嗷嗷一区二区| 久视频在线观看| 天天看少妇| 大香蕉伊人色偷偷在线| 五月天婷婷小说| 丁香五月激情综合国产| 日韩黄色一区二区三区| 亚洲成a人片在线观看中文!!!| 国产一区二区三区免费视频在性观看| 999久久久| 久久婷婷电影网| 人妻一区二区三区四区视频| 国产精品视频在线观看| 欧美性暴力猛交| 96精品久久| 蜜桃久久一区二区| 97干97色| 国产精品爆乳懂色蜜乳| 亚洲精品久久久久毛片A片拉屎| 啊啊啊网站| 精品无码久久久久久久杏吧| 日韩电影在线观看网址| 狠狠婷婷亚洲中文综合久久| 国产资源中文字幕在线| 国产精品国产亚洲区艳妇糸列| 国产精品久久久久久亚洲色欲| 欧美性爱精品七区| av网站在线观看了| 中国大陆国产高清AⅤ毛片| 免费看A片毛毛片在线播| 久草免费在线一区二区| 一区二区三区机械有限公司| 六月激情网| 1024亚洲中文字幕久在线看片你懂的| 69AV女优男人的天堂| 国产精品高潮久久AV|