在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SFDB - 專為記錄型數(shù)據(jù)存儲(chǔ)而生

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:未知 ? 2023-10-24 10:20 ? 次閱讀

Simple and Fast


SFDB 即 Simple File Database, 一個(gè) 簡(jiǎn)單 的文件型數(shù)據(jù)庫(kù),使用 簡(jiǎn)單,移植 簡(jiǎn)單,功能 簡(jiǎn)單,原理 簡(jiǎn)單,一切都很 簡(jiǎn)單,一切都很 快。適用于 固定長(zhǎng)度 的 記錄型 數(shù)據(jù)存儲(chǔ),類似于時(shí)序數(shù)據(jù)庫(kù),可用于存儲(chǔ)歷史記錄、報(bào)警記錄、日志等。

如果你的項(xiàng)目需要記錄數(shù)據(jù),且數(shù)據(jù)的長(zhǎng)度或最大長(zhǎng)度是固定的,已存入的數(shù)據(jù)不需要修改,同時(shí)需要快速清空和基于 記錄條數(shù) (從第幾條開(kāi)始,查多少條數(shù)據(jù))的查詢,而你的項(xiàng)目恰好有個(gè)文件系統(tǒng),那么 SFDB 可能適合你。

特性

  • 使用文件進(jìn)行存儲(chǔ)

  • 簡(jiǎn)單的數(shù)據(jù)寫入接口

  • 到達(dá)上限時(shí)自動(dòng)從頭覆蓋

  • 支持順序與倒序查詢

  • 支持從任意條數(shù)開(kāi)始查詢

  • 支持清空(重置)數(shù)據(jù)庫(kù)

使用篇


本篇基于 HMI-Board 來(lái)演示 SFDB 的使用。

創(chuàng)建工程

1. 使用 RT-Thread Studio 基于 HMI-Board 開(kāi)發(fā)板創(chuàng)建一個(gè)項(xiàng)目。選項(xiàng)都保持默認(rèn)即可。

wKgZomU3KwmAZAfuAACVAYoYwK8947.png

2. 創(chuàng)建完成后打開(kāi) RT-Thread Settings,選中 Enable SDCARD filesystem 打開(kāi)文件系統(tǒng)。

wKgZomU3KwmADF1pAACd82sc6i8822.jpg

3. 在組件配置中打開(kāi) RTC 設(shè)備驅(qū)動(dòng),并使能 使用軟件模擬RTC設(shè)備選項(xiàng)(提供給文件系統(tǒng)使用)。

wKgZomU3KwmAfWDxAACMpodZc7Q681.jpg

4.添加 SFDB 軟件包。

wKgZomU3KwmARL9cAAB9lGBaaGI941.png

5. 勾選 SFDB 配置項(xiàng)的 Use sfdb example 打開(kāi)示例代碼。

wKgZomU3KwmAHahfAAB6GTVJ8SE079.jpg

6. 全部配置完進(jìn)行保存,當(dāng)前軟件包會(huì)就被應(yīng)用到項(xiàng)目中。

編譯及下載

在編譯之前,我們需要修改一下例程的配置,來(lái)適配我們的文件系統(tǒng)目錄。打開(kāi) packages/sfdb-v0.0.2/examples/rtthread/example.c,找到宏定義 TEST_FILE_PATH,將其修改為 /test.sdb

wKgZomU3KwqAVrmHAAAmASskF9c103.png

此處需要注意,sfdb 在不存在當(dāng)前文件時(shí)會(huì)自動(dòng)創(chuàng)建,但如果路徑中包含有多層目錄,則這些文件夾必須存在,即 sfdb 不會(huì)自動(dòng)創(chuàng)建文件夾。

wKgZomU3KwuADstCAABXvXZdzgQ836.jpg

修改完路徑配置后即可編譯代碼。

控制臺(tái)看到上圖的信息即編譯成功,此時(shí)進(jìn)行程序燒錄。

運(yùn)行示例

程序下載完成后連接并打開(kāi)終端,按下 TAB 鍵可以看到命令行中出現(xiàn)了兩條 SFDB 的命令:

wKgZomU3KwuAcnN2AADSal2L3a0492.jpg

此時(shí)說(shuō)明 SFDB 已經(jīng)成功運(yùn)行起來(lái)了。而這兩條命令作用如下:

  • sfdb_test:?jiǎn)?dòng) SFDB 寫入測(cè)試,系統(tǒng)會(huì)持續(xù)寫入到設(shè)定的上限值

  • sfdb_read:讀取測(cè)試數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)。

寫入測(cè)試

例程中設(shè)定的數(shù)據(jù)庫(kù)存儲(chǔ)上限為10000條,同時(shí)會(huì)寫入10100條數(shù)據(jù)。接下來(lái)我們使用 sfdb_test 來(lái)啟動(dòng)寫入測(cè)試:

wKgZomU3Kw2AR_gVAAAQWeBqqdo558.png

可以看到日志中完整寫入了10100條數(shù)據(jù),而且每條數(shù)據(jù)的寫入時(shí)間也都維持在 5-10 ms,并沒(méi)有隨著寫入數(shù)量的增多而增大。

讀取測(cè)試

sfdb_read命令的形式有兩種:

  • sfdb_read 讀取數(shù)據(jù)庫(kù)基本信息

  • sfdb_read [offset] [number] [order(0:asc 1:dsc)] 根據(jù)orderoffset中讀取number條數(shù)據(jù)

1. 基本信息讀取

基本信息不需要輸入?yún)?shù),直接 sfdb_read 即可:

wKgZomU3Kw2AJ1w4AAANfo1fACo654.png

可以看到,數(shù)據(jù)庫(kù)的基本信息包括:

  1. 當(dāng)前最新數(shù)據(jù)的索引(容量10000,寫入10100,多出來(lái)的將會(huì)從最老的數(shù)據(jù)開(kāi)始覆蓋)

  2. 數(shù)據(jù)庫(kù)中的總有效數(shù)據(jù)

  3. 每條數(shù)據(jù)的長(zhǎng)度

這些數(shù)據(jù)與我們的配置和寫入也是完全一致的,說(shuō)明我們剛才數(shù)據(jù)庫(kù)的創(chuàng)建及寫入操作是成功的。

2. 數(shù)據(jù)讀取

讀取的 order 為讀取順序,其中0為從最老的數(shù)據(jù)開(kāi)始讀,1為從最新的數(shù)據(jù)開(kāi)始讀:

- 1. 正序讀取(從舊到新)

wKgZomU3Kw2ASbZqAAAhYDSLqDM695.png

- 2.倒序讀?。◤男碌脚f)

wKgZomU3Kw2AFsUtAAAhrRabQ7Y473.png

- 3. 注意

在倒序讀取模式下,由于保留了讀取性能, buf 的數(shù)據(jù)仍然是順序的,使用者需要手動(dòng)處理 buf 中的數(shù)據(jù)順序。當(dāng)數(shù)據(jù) 1-100 依次存入時(shí),若以倒序從 offset 為 0 的位置讀取 10 條數(shù)據(jù),存入 buf 中,buf 中的數(shù)據(jù)順序?yàn)?91 92 93 94 95 96 97 98 99 100 ,而非 100 99 98 97 96 95 94 93 92 91。使用者可以在應(yīng)用層可以參考例程通過(guò)索引倒轉(zhuǎn)的形式實(shí)現(xiàn)數(shù)據(jù)順序的倒轉(zhuǎn),如下:


		

1ret=sfdb_read(&sfdb,data_buf,data_sz,offset,number,order); 2for(inti=0;i3if(order==SFDB_READ_ASC){ 4print_index=i; 5}else{ 6print_index=ret-i-1; 7} 8SF_LOG("%-5d:%s",offset+i+1,(char*)&data_buf[print_index*sfdb.hdr.record_len]); 9}

移植篇


如果需要在別的平臺(tái)使用SFDB,移植起來(lái)也是非常方便。僅需參考 sfdb_port.c 實(shí)現(xiàn) sfdb_fs_t 里面的文件操作接口,以及在 sfdb_port.h 中包含當(dāng)前平臺(tái)所需要的頭文件并實(shí)現(xiàn) SF_MEMCPY、SF_MEMSETSF_LOG 宏定義即可。

接口結(jié)構(gòu)如下:


		

1typedefstruct_db_fs{ 2int(*op)(struct_sfdb*db,constchar*path,intflags);//Openfile 3int(*cl)(void*fd);//Closefile 4int(*sy)(void*fd);//Syncfile 5size_t(*rd)(void*fd,void*buf,size_tlen);//Readfile 6size_t(*wr)(void*fd,constvoid*buf,size_tlen);//Writefile 7size_t(*sk)(void*fd,size_toffset);//Setfileposition 8int(*rm)(constchar*path);//Deletefile 9}sfdb_fs_t;

RT-Thread 下的移植示例:


		

1//sfdb_port.c 2staticintfs_open(sfdb_t*db,constchar*path,intflags){ 3intoflags=O_RDWR; 4if(flags&SFDB_O_CREATE)oflags|=O_CREAT; 5db->fd=(void*)open(path,oflags); 6if((int)db->fd0){ 7return-1; 8}else{ 9return0; 10} 11} 12staticintfs_close(void*fd){ 13if(fd>=0){ 14close((int)fd); 15return0; 16}else{ 17SF_LOG("invalidfd%d,closefailed",(int)fd); 18return-1; 19} 20} 21staticintfs_sync(void*fd){returnfsync((int)fd);} 22staticsize_tfs_read(void*fd,void*buf,size_tlen){returnread((int)fd,buf,len);} 23staticsize_tfs_write(void*fd,constvoid*buf,size_tlen){returnwrite((int)fd,buf,len);} 24staticsize_tfs_seek(void*fd,size_toffset){ 25intret=0; 26ret=lseek((int)fd,offset,SEEK_SET); 27if(ret0)return0; 28returnret; 29} 30staticintfs_remove(constchar*path){returnunlink(path);} 31sfdb_fs_tsfdb_fs={ 32.op=fs_open, 33.cl=fs_close, 34.sy=fs_sync, 35.rd=fs_read, 36.wr=fs_write, 37.sk=fs_seek, 38.rm=fs_remove, 39};


		

1//sfdb_port.h 2#include 3#include 4#include 5#include 6#include 7#include 8#defineSF_MEMCPYrt_memcpy 9#defineSF_MEMSETrt_memset 10#defineSF_LOG(format,...)rt_kprintf("[SFDB]:"format" ",##__VA_ARGS__)

源碼倉(cāng)庫(kù)


詳細(xì)的API說(shuō)明可以到源碼的倉(cāng)庫(kù)查看:

Github:https://github.com/WKJay/sfdb

Gitee:https://gitee.com/wangjunjie997

———————End——————

wKgZomU3Kw-AYtuHAHiX-BnG6Ho047.gif點(diǎn)擊閱讀原文進(jìn)入官網(wǎng)


原文標(biāo)題:SFDB - 專為記錄型數(shù)據(jù)存儲(chǔ)而生

文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1377

    瀏覽量

    41619

原文標(biāo)題:SFDB - 專為記錄型數(shù)據(jù)存儲(chǔ)而生

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    仁懋TOLT封裝MOS——專為大功率而生

    大功率場(chǎng)景的核心解決方案。這款專為大芯片、大電流設(shè)計(jì)的器件,正以“散熱快、損耗低、密度高”的三大優(yōu)勢(shì),重新定義功率半導(dǎo)體的應(yīng)用邊界。顛覆傳統(tǒng)的頂部散熱:讓大功率不再“
    的頭像 發(fā)表于 06-18 13:27 ?218次閱讀
    仁懋TOLT封裝MOS——<b class='flag-5'>專為</b>大功率<b class='flag-5'>而生</b>

    存儲(chǔ)示波器的存儲(chǔ)深度對(duì)信號(hào)分析有什么影響?

    :≥1GS/s(每周期≥10點(diǎn))。 存儲(chǔ)深度:≥1Mpts(記錄時(shí)間≥1μs)。 優(yōu)化:?jiǎn)⒂梅侄?b class='flag-5'>存儲(chǔ)(如100段×10μs)或升級(jí)至10Mpts。 2. 高速數(shù)據(jù)總線(如DDR4 32
    發(fā)表于 05-27 14:39

    云翎智能礦用本安防爆巡檢記錄儀,讓隱患無(wú)所遁形的電子礦工

    云翎智能礦用本安防爆巡檢記錄儀是一款專為礦山環(huán)境設(shè)計(jì)的智能化巡檢設(shè)備,它結(jié)合了現(xiàn)代電子技術(shù)與防爆安全標(biāo)準(zhǔn),旨在為礦山安全生產(chǎn)提供強(qiáng)有力的技術(shù)支撐,讓潛在的安全隱患無(wú)所遁形,堪稱礦山作業(yè)中的“電子
    的頭像 發(fā)表于 05-20 10:24 ?111次閱讀
    云翎智能礦用本安<b class='flag-5'>型</b>防爆巡檢<b class='flag-5'>記錄</b>儀,讓隱患無(wú)所遁形的電子礦工

    壓力數(shù)據(jù)記錄儀功能有哪些?點(diǎn)開(kāi)看看就知道

    給操作人員,一旦壓力出現(xiàn)異常波動(dòng),就能及時(shí)采取措施,避免安全事故的發(fā)生。 二、數(shù)據(jù)存儲(chǔ)功能該記錄儀具備強(qiáng)大的數(shù)據(jù)存儲(chǔ)能力,能夠長(zhǎng)時(shí)間、大容量
    發(fā)表于 05-19 16:39

    #### KEPServerEX 數(shù)據(jù)存儲(chǔ)插件\\-2

    上次我們介紹了Datalogger插件的前三式,展示了一些常見(jiàn)的觸發(fā)器設(shè)置,例如數(shù)據(jù)變化存儲(chǔ),定時(shí)存儲(chǔ)等等,接下來(lái)我們繼續(xù)講解后三式。 一、 現(xiàn)在有一個(gè)需求是通過(guò)邏輯判斷有條件的進(jìn)行存儲(chǔ)
    發(fā)表于 04-09 16:09

    濕度數(shù)據(jù)記錄儀是什么?一文為你解答

    的性能和壽命。通過(guò)使用濕度數(shù)據(jù)記錄儀,廠家可以精確掌握生產(chǎn)車間和儲(chǔ)存環(huán)境的濕度狀況,采取相應(yīng)的措施來(lái)保證電子產(chǎn)品的質(zhì)量。 濕度數(shù)據(jù)記錄儀的工作原理并不復(fù)雜。它通常由濕度傳感器、
    發(fā)表于 03-31 10:35

    KEPServerEX 數(shù)據(jù)存儲(chǔ)插件

    好LogGroup之后,在Triggers里面記錄條件中,設(shè)置 “登錄靜態(tài)間隔”--否; “在數(shù)據(jù)更改時(shí)記錄”---是 這樣數(shù)據(jù)就會(huì)在變化的時(shí)候才會(huì)
    的頭像 發(fā)表于 02-28 14:47 ?272次閱讀
    KEPServerEX <b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>存儲(chǔ)</b>插件

    數(shù)據(jù)記錄儀的計(jì)數(shù)原理和應(yīng)用場(chǎng)景

    數(shù)據(jù)記錄儀是一種用于測(cè)量、記錄和分析各種數(shù)據(jù)的設(shè)備,其計(jì)數(shù)原理和應(yīng)用場(chǎng)景可以歸納如下: 一、計(jì)數(shù)原理數(shù)據(jù)
    發(fā)表于 02-24 14:28

    初次啟動(dòng)沖擊記錄儀時(shí)具體該如何操作?別著急,答案就在視頻教程里!#數(shù)據(jù)記錄儀 #沖擊記錄儀 #沖擊監(jiān)測(cè)

    數(shù)據(jù)記錄
    虹科工業(yè)物聯(lián)網(wǎng)技術(shù)
    發(fā)布于 :2025年02月10日 10:38:12

    工業(yè)SD卡:專為嚴(yán)苛環(huán)境設(shè)計(jì)的高端存儲(chǔ)設(shè)備

    工業(yè)SD卡,作為專為工業(yè)環(huán)境設(shè)計(jì)的存儲(chǔ)設(shè)備,在多個(gè)領(lǐng)域都發(fā)揮著至關(guān)重要的作用。其出色的性能、穩(wěn)定性和耐用性,使其成為工業(yè)自動(dòng)化、智能電網(wǎng)、安防監(jiān)控以及醫(yī)療設(shè)備等領(lǐng)域的首選存儲(chǔ)解決方案。
    的頭像 發(fā)表于 11-17 17:05 ?623次閱讀
    工業(yè)SD卡:<b class='flag-5'>專為</b>嚴(yán)苛環(huán)境設(shè)計(jì)的高端<b class='flag-5'>存儲(chǔ)</b>設(shè)備

    一文詳解計(jì)算存儲(chǔ)協(xié)議框架

    側(cè),稱為計(jì)算存儲(chǔ)(Computational Storage),通過(guò)存儲(chǔ)側(cè)卸載數(shù)據(jù)預(yù)處理,如數(shù)據(jù)校驗(yàn)、解壓、
    的頭像 發(fā)表于 10-31 14:20 ?1028次閱讀
    一文詳解計(jì)算<b class='flag-5'>型</b><b class='flag-5'>存儲(chǔ)</b>協(xié)議框架

    智能記錄隱蔽工程管理系統(tǒng)

    ? ? ? 隱蔽工程管理是現(xiàn)代建筑工程中一個(gè)至關(guān)重要的環(huán)節(jié)。為了提高工程質(zhì)量和管理效率,智能記錄隱蔽工程管理系統(tǒng)應(yīng)運(yùn)而生。本文將從隱蔽工程APP、工程臺(tái)賬、管理系統(tǒng)和云端存儲(chǔ)四個(gè)方面介紹該系統(tǒng)的功能
    的頭像 發(fā)表于 10-18 10:18 ?485次閱讀
    智能<b class='flag-5'>記錄</b>隱蔽工程管理系統(tǒng)

    佰維存儲(chǔ)發(fā)布工業(yè)級(jí)寬溫TGC系列存儲(chǔ)卡,賦能高清視頻穩(wěn)定錄制

    監(jiān)控及長(zhǎng)時(shí)間影像穩(wěn)定錄制而生。這兩款存儲(chǔ)卡不僅代表了存儲(chǔ)技術(shù)的最新突破,更是對(duì)安防監(jiān)控、軌道交通、智慧醫(yī)療、車載記錄儀以及工業(yè)自動(dòng)化等多個(gè)關(guān)鍵領(lǐng)域需求的精準(zhǔn)響應(yīng)。
    的頭像 發(fā)表于 08-21 10:45 ?952次閱讀

    虹科技術(shù) 優(yōu)化始于數(shù)據(jù):Baby-LIN設(shè)備如何高效存儲(chǔ)總線數(shù)據(jù)?

    質(zhì)量和性能至關(guān)重要。本文將講解虹科BabyLIN系列產(chǎn)品如何實(shí)現(xiàn)高效的總線數(shù)據(jù)記錄存儲(chǔ)。 虹科Baby-LIN系列產(chǎn)品作為專業(yè)LIN總線產(chǎn)品,以其高性能和可靠性受到市場(chǎng)的青睞,其支持多種LIN網(wǎng)絡(luò)配置,能夠
    的頭像 發(fā)表于 08-16 10:07 ?713次閱讀
    虹科技術(shù) 優(yōu)化始于<b class='flag-5'>數(shù)據(jù)</b>:Baby-LIN設(shè)備如何高效<b class='flag-5'>存儲(chǔ)</b>總線<b class='flag-5'>數(shù)據(jù)</b>?

    態(tài)勢(shì)數(shù)據(jù)如何存儲(chǔ)

    智慧華盛恒輝態(tài)勢(shì)數(shù)據(jù)存儲(chǔ)方式主要取決于數(shù)據(jù)的特性、規(guī)模以及訪問(wèn)需求。以下是幾種常見(jiàn)的態(tài)勢(shì)數(shù)據(jù)存儲(chǔ)方式,并進(jìn)行了分點(diǎn)表示和歸納: 關(guān)系
    的頭像 發(fā)表于 06-24 17:46 ?552次閱讀
    主站蜘蛛池模板: 国产精品视频一区二区三区 | 亚洲国产精品第一区二区 | 天堂avwww| 欧美色乱| 色屁屁www免费看视频影院 | 青草国产在线视频 | 韩国三级hd中文字幕久久精品 | 久久综合爱 | 特级无码毛片免费视频尤物 | 午夜在线观看免费观看大全 | 日韩a无吗一区二区三区 | 天天色成人 | 狠狠色噜噜狠狠狠狠98 | 成人性色生活影片 | 欧美狠狠 | 欧美三级视频网 | 国产精品久久久久久久久久影院 | 国产性夜夜春夜夜爽 | 久久午夜影视 | 午夜视频你懂的 | 国产高清精品自在久久 | 午夜爱爱毛片xxxx视频免费看 | 桃花岛亚洲精品tv自拍网站 | 伊人五月婷婷 | 九色亚洲 | 青青热久免费精品视频在线观看 | 欧美性久久久久 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 男人不识本网站上遍色站也枉然 | 成人免费看毛片 | 欧美白虎逼 | 一级网站在线观看 | 成人网久久 | 天天干天天拍天天射 | 亚洲美女啪啪 | 欧美色视频超清在线观看 | 亚洲午夜顶级嘿嘿嘿影院 | 欧美在线视频免费播放 | 色噜噜人体337p人体 | 日韩一级在线 | 日本三级香港三级三级人!妇久 |