色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

SFDB - 專為記錄型數據存儲而生

RTThread物聯網操作系統 ? 來源:未知 ? 2023-10-24 10:20 ? 次閱讀

Simple and Fast


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

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

特性

  • 使用文件進行存儲

  • 簡單的數據寫入接口

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

  • 支持順序與倒序查詢

  • 支持從任意條數開始查詢

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

使用篇


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

創建工程

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

wKgZomU3KwmAZAfuAACVAYoYwK8947.png

2. 創建完成后打開 RT-Thread Settings,選中 Enable SDCARD filesystem 打開文件系統。

wKgZomU3KwmADF1pAACd82sc6i8822.jpg

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

wKgZomU3KwmAfWDxAACMpodZc7Q681.jpg

4.添加 SFDB 軟件包。

wKgZomU3KwmARL9cAAB9lGBaaGI941.png

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

wKgZomU3KwmAHahfAAB6GTVJ8SE079.jpg

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

編譯及下載

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

wKgZomU3KwqAVrmHAAAmASskF9c103.png

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

wKgZomU3KwuADstCAABXvXZdzgQ836.jpg

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

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

運行示例

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

wKgZomU3KwuAcnN2AADSal2L3a0492.jpg

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

  • sfdb_test:啟動 SFDB 寫入測試,系統會持續寫入到設定的上限值

  • sfdb_read:讀取測試數據庫內的數據。

寫入測試

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

wKgZomU3Kw2AR_gVAAAQWeBqqdo558.png

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

讀取測試

sfdb_read命令的形式有兩種:

  • sfdb_read 讀取數據庫基本信息

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

1. 基本信息讀取

基本信息不需要輸入參數,直接 sfdb_read 即可:

wKgZomU3Kw2AJ1w4AAANfo1fACo654.png

可以看到,數據庫的基本信息包括:

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

  2. 數據庫中的總有效數據

  3. 每條數據的長度

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

2. 數據讀取

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

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

wKgZomU3Kw2ASbZqAAAhYDSLqDM695.png

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

wKgZomU3Kw2AFsUtAAAhrRabQ7Y473.png

- 3. 注意

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


		

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 實現 sfdb_fs_t 里面的文件操作接口,以及在 sfdb_port.h 中包含當前平臺所需要的頭文件并實現 SF_MEMCPYSF_MEMSETSF_LOG 宏定義即可。

接口結構如下:


		

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點擊閱讀原文進入官網


原文標題:SFDB - 專為記錄型數據存儲而生

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。


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

    關注

    31

    文章

    1291

    瀏覽量

    40167

原文標題:SFDB - 專為記錄型數據存儲而生

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    工業SD卡:專為嚴苛環境設計的高端存儲設備

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

    一文詳解計算存儲協議框架

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

    智能記錄隱蔽工程管理系統

    ? ? ? 隱蔽工程管理是現代建筑工程中一個至關重要的環節。為了提高工程質量和管理效率,智能記錄隱蔽工程管理系統應運而生。本文將從隱蔽工程APP、工程臺賬、管理系統和云端存儲四個方面介紹該系統的功能
    的頭像 發表于 10-18 10:18 ?152次閱讀
    智能<b class='flag-5'>記錄</b>隱蔽工程管理系統

    佰維存儲發布工業級寬溫TGC系列存儲卡,賦能高清視頻穩定錄制

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

    虹科技術 優化始于數據:Baby-LIN設備如何高效存儲總線數據

    質量和性能至關重要。本文將講解虹科BabyLIN系列產品如何實現高效的總線數據記錄存儲。 虹科Baby-LIN系列產品作為專業LIN總線產品,以其高性能和可靠性受到市場的青睞,其支持多種LIN網絡配置,能夠
    的頭像 發表于 08-16 10:07 ?425次閱讀
    虹科技術 優化始于<b class='flag-5'>數據</b>:Baby-LIN設備如何高效<b class='flag-5'>存儲</b>總線<b class='flag-5'>數據</b>?

    態勢數據如何存儲

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

    示波器如何設置存儲時間呢?

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

    飛行汽車專用的CAN(FD)數據記錄終端

    飛行汽車的飛行安全永遠是第一要素,搭載致遠電子專用的多通道CAN(FD)數據記錄終端CANFDDTU-300ER,時刻記錄存儲并且分析各類飛行數據
    的頭像 發表于 05-01 08:24 ?455次閱讀
    飛行汽車專用的CAN(FD)<b class='flag-5'>數據</b><b class='flag-5'>記錄</b>終端

    態勢數據存儲方式有哪些

    智慧華盛恒輝態勢數據存儲方式主要取決于數據的特性、規模以及訪問需求。以下是幾種常見的態勢數據存儲方式: 關系
    的頭像 發表于 04-22 19:28 ?339次閱讀

    態勢數據如何存儲

    智慧華盛恒輝態勢數據存儲主要依賴于數據庫技術和文件存儲系統。以下是一些關于如何存儲態勢數據的建
    的頭像 發表于 04-22 17:29 ?367次閱讀

    數據時代的存儲革命:理解分布式存儲系統

    在如今的大數據時代,全球數據量正在以指數增長。據國際數據公司(IDC)預測,到2025年,全球數據量將增至175 ZB。這種海量的
    的頭像 發表于 03-07 15:40 ?431次閱讀

    分布式存儲與計算:大數據時代的解決方案

    我們正生活在一個數據驅動的時代,數據量以前所未有的速度呈指數增長。IDC預測到2025年全球數據量將達到175ZB(Zettabytes)。面對如此龐大的
    的頭像 發表于 03-07 14:42 ?776次閱讀

    如何選擇CAN總線數據記錄儀 Kvaser Memorator Pro 5xHS

    什么是CAN總線數據記錄儀? CAN總線數據記錄儀是一種用于記錄CAN總線數據的設備。它通過CA
    的頭像 發表于 03-04 16:35 ?571次閱讀
    如何選擇CAN總線<b class='flag-5'>數據</b><b class='flag-5'>記錄</b>儀  Kvaser Memorator Pro 5xHS

    請問CAN數據記錄方式有哪些?

    使用CAN數據存儲設備進行記錄:這種方式通過專門的CAN記錄儀來實現,它是一種專門用于存儲CAN總線數據
    的頭像 發表于 03-01 09:14 ?583次閱讀

    什么是數據記錄器,數據記錄器與數據采集系統

    雖然有些數據記錄器只有一個傳感器和輸入,但許多數據記錄器有多個通道,在許多情況下,它們可以記錄來自不同類型傳感器的測量值。
    的頭像 發表于 02-08 12:28 ?1577次閱讀
    主站蜘蛛池模板: 国产在线精品亚洲一品区| 亚洲欧美综合乱码精品成人网| 春暖花开 性 欧洲| 亚洲不卡视频| 欧美末成年videos在线| 国产午夜一区二区三区免费视频| 777米奇影院第七色色| 外女思春台湾三级| 妹妹我要操| 狠狠狠狠狠狠干| 俄罗斯19girl video9| 在线免费视频a| 校花爽好大快深点h| 求个av网站| 美女脱了内裤张开腿让男人桶到爽| 国产一区二区无码蜜芽精品| 被肉日常np快穿高h| 中国女人精69xxxxxx视频| 鸭子玩富婆流白浆视频| 青青草国产偷拍在线av| 久久视频这里只精品99热在线观看 | 国产露脸150部国语对白| 91看片淫黄大片.在线天堂| 亚洲国产果果在线播放在线| 日本人HD18HD18| 女人被躁到高潮嗷嗷叫免费| 久久91精品国产91久| 国产精品日本无码久久一老A | 一个人免费观看在线视频播放| 小草影院免费| 日日夜夜影院在线播放| 欧美精品久久久久性色AV苍井| 老司机午夜影院味味| 九九99亚洲精品久久久久| 国产乱人偷精品视频A人人澡| 大乳牛奶女在线观看| 扒开黑女人p大荫蒂老女人| 99视频精品全部 国产| 中文字幕按摩| 伊人角狠狠狠狠| 伊人久久影院大香线蕉|