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

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

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

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

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

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

Simple and Fast


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

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

特性

  • 使用文件進行存儲

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

  • 到達上限時自動從頭覆蓋

  • 支持順序與倒序查詢

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

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

使用篇


本篇基于 HMI-Board 來演示 SFDB 的使用。

創(chuàng)建工程

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

wKgZomU3KwmAZAfuAACVAYoYwK8947.png

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

wKgZomU3KwmADF1pAACd82sc6i8822.jpg

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

wKgZomU3KwmAfWDxAACMpodZc7Q681.jpg

4.添加 SFDB 軟件包。

wKgZomU3KwmARL9cAAB9lGBaaGI941.png

5. 勾選 SFDB 配置項的 Use sfdb example 打開示例代碼。

wKgZomU3KwmAHahfAAB6GTVJ8SE079.jpg

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

編譯及下載

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

wKgZomU3KwqAVrmHAAAmASskF9c103.png

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

wKgZomU3KwuADstCAABXvXZdzgQ836.jpg

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

控制臺看到上圖的信息即編譯成功,此時進行程序燒錄。

運行示例

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

wKgZomU3KwuAcnN2AADSal2L3a0492.jpg

此時說明 SFDB 已經(jīng)成功運行起來了。而這兩條命令作用如下:

  • sfdb_test:啟動 SFDB 寫入測試,系統(tǒng)會持續(xù)寫入到設(shè)定的上限值

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

寫入測試

例程中設(shè)定的數(shù)據(jù)庫存儲上限為10000條,同時會寫入10100條數(shù)據(jù)。接下來我們使用 sfdb_test 來啟動寫入測試:

wKgZomU3Kw2AR_gVAAAQWeBqqdo558.png

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

讀取測試

sfdb_read命令的形式有兩種:

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

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

1. 基本信息讀取

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

wKgZomU3Kw2AJ1w4AAANfo1fACo654.png

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

  1. 當前最新數(shù)據(jù)的索引(容量10000,寫入10100,多出來的將會從最老的數(shù)據(jù)開始覆蓋)

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

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

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

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

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

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

wKgZomU3Kw2ASbZqAAAhYDSLqDM695.png

- 2.倒序讀取(從新到舊)

wKgZomU3Kw2AFsUtAAAhrRabQ7Y473.png

- 3. 注意

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

移植篇


如果需要在別的平臺使用SFDB,移植起來也是非常方便。僅需參考 sfdb_port.c 實現(xiàn) sfdb_fs_t 里面的文件操作接口,以及在 sfdb_port.h 中包含當前平臺所需要的頭文件并實現(xiàn) SF_MEMCPYSF_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__)

源碼倉庫


詳細的API說明可以到源碼的倉庫查看:

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

Gitee:https://gitee.com/wangjunjie997

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

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


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

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


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

    關(guān)注

    31

    文章

    1348

    瀏覽量

    41373

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    DS1678實時事件記錄器技術(shù)手冊

    計數(shù)器(ETC)。隨后發(fā)生的事件將觸發(fā)ETC記錄存儲在事件記錄存儲器中。最多可記錄1025個事件。器件工作在V~CC~或V~BAT~供電狀
    的頭像 發(fā)表于 02-27 15:27 ?247次閱讀
    DS1678實時事件<b class='flag-5'>記錄</b>器技術(shù)手冊

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    esp8266讀取模擬數(shù)據(jù)記錄到eeprom,發(fā)送tcp包時無法讀取模擬如何解決?

    嗨,esp8266 讀取模擬數(shù)據(jù)記錄到 eeprom,我正在將存儲在 eeprom 中的數(shù)據(jù)作為 tcp 包發(fā)送,但在發(fā)送 tcp 包時無法讀取模擬,如何解決它? 如何將線程用于這些
    發(fā)表于 07-11 07:22

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

    智慧華盛恒輝態(tài)勢數(shù)據(jù)存儲方式主要取決于數(shù)據(jù)的特性、規(guī)模以及訪問需求。以下是幾種常見的態(tài)勢數(shù)據(jù)存儲方式,并進行了分點表示和歸納: 關(guān)系
    的頭像 發(fā)表于 06-24 17:46 ?493次閱讀

    示波器如何設(shè)置存儲時間呢?

    示波器的存儲時間,通常指的是示波器捕獲和存儲波形數(shù)據(jù)的能力,這在分析復(fù)雜的信號或長時間記錄信號變化時非常有用。
    的頭像 發(fā)表于 05-30 15:43 ?1503次閱讀

    CAN總線數(shù)據(jù)記錄儀選型指南

    CAN總線數(shù)據(jù)記錄儀擁有多種型號和強大的功能,滿足了不同行業(yè)、不同場景下的數(shù)據(jù)記錄需求。今天,我們將針對Influx以及Kvaser兩個品牌的記錄
    的頭像 發(fā)表于 05-24 17:08 ?822次閱讀
    CAN總線<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>記錄</b>儀選型指南
    主站蜘蛛池模板: 国产精品1区2区3区 国产精品1区2区3区在线播放 | 国产在线小视频 | 男啪女视频免费观看网站 | 国产美女一级片 | 欧美一级艳片视频免费观看 | 欧美五月婷婷 | 欧美视频免费一区二区三区 | 激情婷婷丁香 | 在线午夜视频 | 天天躁日日躁成人字幕aⅴ 天天躁夜夜躁 | 永久在线观看www免费视频 | 四虎美女| 亚洲午夜日韩高清一区 | 成人xxxxx | 狠狠做深爱婷婷久久一区 | 久久综合九色综合97_ 久久久 | 日本不卡1 | 国产三级精品在线 | 久久久综合视频 | 久久久久久毛片免费播放 | 俺去俺来也www色官网免费的 | 色偷偷狠狠色综合网 | 欧美αv日韩αv另类综合 | 天堂网www | 国内精品免费视频自在线 | 大尺度在线 | 男女同床爽爽视频免费 | 妖精视频亚洲 | 亚欧乱色束缚一区二区三区 | 男女交性视频免费播放 | 91伊人久久大香线蕉 | 日本xxxxx黄区免费看动漫 | 国产情侣露脸 | 免费日韩网站 | 日本不卡一 | 手机看片三级 | 精品伊人久久香线蕉 | 色老头在线精品视频在线播放 | 在线视频资源 | 国产亚洲精品美女久久久 | 一级伦奸视频 |