999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SQLite數據庫的溫濕度實時存儲程序的設計

2014-03-16 09:22:50武寧寧鮑玉琦
電子設計工程 2014年10期
關鍵詞:嵌入式程序數據庫

武寧寧,鮑玉琦

(1.青島理工大學臨沂校區 山東 臨沂 273400;2.江蘇科技大學 江蘇 鎮江 212003)

溫濕度是工業現場最常見的監測參數。在許多場合,溫濕度是重要的監測參數和故障判斷的首要依據,因此,溫濕度的實時存儲具有十分重要的實用價值。

溫濕度的實時存儲很早就受到工程師們的重視,最早的溫濕度實時存儲是通過數據的遠傳,存儲在電腦上,現場的溫濕度傳感器只是負責數據的采集,數據的實時存儲和管理完全是由上層的PC機來完成。后來,現場的傳感器不斷升級換代,逐漸具有了實時存儲的功能,但是那是的存儲器空間比較小,只能存儲十分有限的數據。

近年來,隨著存儲器和嵌入式技術的飛速發展,現在的存儲器可以存儲大量的數據,甚至有的存儲器可以保持數年的不斷存儲[1],而且嵌入式技術可以有效的管理這部分存儲數據,從而實現數據的科學存儲和管理。

文中重點介紹了基于SQLite數據庫的溫濕度實時存儲系統,該系統充分利用SQLite數據庫的優點和嵌入式系統的管理功能,實現了溫濕度的實時存儲和科學管理。

1 SQLite3體系結構及移植

1.1 SQLite3體系結構

SQLITE數據庫采用的是模塊化的設計,主要有內核、SQL處理器、后端和附件4部分組成[2],其體系結構如圖1所示。

圖1 SQLITE的體系結構Fig.1 The architecture of SQLite

1)接口(Interface)。SQLite的接口是一些已經編寫好的C庫,雖然使用不同語言的API,但在底層仍然使用C庫執行。

2)編譯器(SQL Compiler)。 SQL語句通過接口后進入SQL編譯器,SQL處理器主要有標志處理器、分析器和代碼生成器3個部分組成。接口程序接收字符串之后,首先將其傳給標志處理器,標志處理器的主要任務是把這些字符串分成一個個標識符,把這些標識符傳給分析器。然后分析器在收集完標識符,把它轉換成完整的SQL語句,并且調用代碼生成器來產生虛擬的機器代碼,其中這些機器代碼是按照SQL語句的要求來工作。最后代碼生成器產生的程序送給虛擬機器來運行。

3)虛擬機(VirtualMachine)。虛擬機是 SQLITE數據庫體系結構中十分核心的部分,它位于SQLITE數據庫后端的上一層,通常被稱之為虛擬數據庫引擎。它不僅會完成與數據相關的全部操作,而且還是客戶和存儲信息之間進行信息交換的中間單元。操作具體過程是用戶發出SQL語句請求,先由前端編譯器處理,生產專門的字節代碼程序,其中這些字節代碼程序可以執行查詢、讀取和修改數據庫等操作,然后由VM解釋執行,通常會調用B-tree模塊相關的接口,最后輸出執行結果。

4)后端(Backend)。后端的第一層是 B-tree,SQLITE 數據庫中的每個目錄和表格都是使用一個單獨的 B-tree,并且所有的 B-tree都被儲存在同一個磁盤文件里。因此可以通過可調整的頁面緩沖獲得對數據的快速查找和存儲。

SQLITE數據庫獨特的體系結構,使得它具有更好的實時性,并且系統開銷小,底層控制能力很強,能夠高效的利用系統有限資源,可大大提高數據庫的存取速度,增強系統的安全性[3-8]。

1.2 SQLite3體系結構

本系統是將嵌入式SQLITE數據庫應用到S3C2440+Linux環境中,首先下載 sqlite-3.5.6.tar.gz,然后在在宿主機的交叉編譯環境下,編譯生成SQLITE的可執行文件,最后將其下載到ARM板的相關目錄下。移植SQLITE的主要步驟如下:

1)解壓sqlite-3.5.6.tar.gz工具包,命令為 tar-zxvf sqlite-3.5.6.tar.gz。

2)解壓完成之后進入sqlite-3.5.6目錄下新建一個文件夾build。

3)進入build文件夾,執行./configure--host=arm-linuxprefix=/opt/sqlite-3.5.6/build,其中host是指定進行編譯的交叉編譯器,prefix是編譯后目標存放的路徑。

4)執行 make和 make install命令,在新建的 build目錄下生成 bin、lib、include、share 4 個文件夾。

5)將build/bin目錄下的文件拷貝到ARM板的/usr/bin中,將build/lib目錄下的文件拷貝到ARM板的lib文件夾下。

6)修改ARM板/usr/bin/sqlite3的權限,命令為chmod 755 sqlite3。

完成上述6步后,可以在ARM板的終端輸入:sqlite3 test.db來驗證SQLITE數據庫是否移植成功。如果SQLITE數據庫成功移植,將在終端出現圖2所示的畫面。

圖2 SQLITE數據庫成功移植畫面Fig.2 The successful transplanted picture of SQLITE database

2 溫濕度實時存儲程序的設計

2.1 SQLITE常用的API函數

SQLITE數據庫提供了許多C語言的API接口,這些接口使得對數據庫的操作變得十分的方便。下面主要介紹SQLITE常用的API函數。

1)打開數據庫:

int sqlite3_open(

const char*filename, //filename是數據庫的文件名

sqlite3**db //輸出SQLITE數據庫的句柄

);

2)運行SQL函數:

int sqlite3_exec(

sqlite3*, //打開的數據庫句柄

const char**sql, //要執行的 SQL語句

sqlite3_callback, //回調函數

void*, //回調函數的第一個參數

char**errmsg //返回錯誤信息

);

3)查詢數據:

int sqlite3_get_table(

sqlite3*, //打開的數據庫句柄

const char*sql, //要執行的 SQL 語句

char***result,

int*nrow,int*ncolumn, //返回結果的行數和列數

char**errmsg //返回錯誤信息

);

4)關閉數據庫:

int sqlite3_close(sqlite3*);

2.2 溫濕度實時存儲程序的設計

溫濕度存儲程序主要是對采集的溫、濕度數據進行實時存儲,在存儲程序的設計過程中要考慮上層用戶的方便查看,下面將對溫濕度存儲程序設計過程中數據庫的創建、帶有系統時間的表的創建和SQLITE數據庫動態數據的插入3個方面進行詳細介紹。

1)創建數據庫。數據庫的創建可以在程序中完成,也可以在終端上直接輸入相關的命令來完成,這里采用后一種方法,直接在終端輸入:mkdir/sbin/dht11.db命令來創建數據庫。

2)創建帶有系統時間的表。創建的表帶有時間信息可以方便后續的查看和管理,而且從某種程度上說,采集的溫、濕度數據只有與采集時間結合起來才有意義。同樣,創建表也有兩種方式,這里我們也是采用在終端輸入命令的方式來創建表,具體命令如下:

Create table dht11 (timestamp not null default(datetime(‘now’,‘localtime’)),ID integer,humidity integer,temperature integer);

上述命令的功能是創建一個帶有當地時間、序列號、濕度、溫度4個參數的表。

3)數據庫動態數據插入。溫濕度存儲程序是實現對不斷更新變化的數據進行實時存儲,這里是通過下面的sqlite3_mprintf()函數來實現的。

sqlite3_mprintf (“insert into dht11 (ID,humidity,temperature) values (‘%d’, ‘%d’, ‘%d’)”,m,result1,result2);

上述程序語句中,m表示一個自增的變量,result1代表緩存區的濕度變量,result2代表緩存區的溫度變量。

圖3 溫濕度存儲程序流程圖Fig.3 Flow diagram of temperature and humidity storage program

上面介紹了溫濕度程序中建立系統時間和插入動態數據的實現方式,下面將對整個程序的結構進行分析。其中圖3是溫濕度存儲程序的流程圖。

從上面的流程圖可以看出,整個程序主要包括3個部分:打開設備、打開數據庫、插入動態數據。實現這3個部分功能的程序如下:

intmain(void)

{

int fd ,m;

m=0;

int retval;

char buf[5];

fd=open ( “/dev/dht11”, O_RDONLY); //以只讀方式打開設備

if(fd==-1)

{

perror("open dht11 error "); //打開失敗

exit(-1);

}

printf( “open/dev/dht11 successfully ” ) ;

while(1)

{

sleep(1);

retval=read(fd,buf,5);

if(retval==-1)

{

perror ( “read dht11 error” ) ;

printf( “read dht11 error” ) ;

exit(-1);

}

char*errmsg;

int ret,result,result1,result2,m;

m++;

result1=buf[0];

result2=buf[2];

sqlite3*db=NULL;

result=sqlite3_open(“/sbin/dht11.db”,&db); //打開數據庫

if(result!=SQLITE_OK)

{

fprintf(stderr,“Could notopen database:%s ”,errmsg);

sqlite3_close(db); //關閉數據庫

exit(1);

}

printf(“open databases successfully ”);

char*value=sqlite3_mprintf (“insert into dht11 (ID,humidity,temperature)value( ‘%d’,‘%d’,‘%d’)”,m,result1,result2); //插入動態溫、濕度數據

ret=sqlite3_exec(db,value,0,0,&errmsg);

if(ret!=SQLITE_OK)

{

fprintf(stderr,"SQL error:%s ",errmsg);

sqlite3_close(db); //關閉數據庫

exit(1);

}

printf (“insert into dht11 successfully ”); //數據成功插入數據庫

sqlite3_close(db);

sleep(10); //延時 10 s

}

close(fd); //關閉設備

}

將上述程序編寫完成后,保存為time_sqlite3.c,然后利用交叉編譯工具對其進行編譯。具體命令如下:

[root@localhost home]# arm-linux-gcc -I?/opt/build/include-L/opt/build/lib-o time_sqlite3 time_sqlite3.c-lsqlite3其中參數-I?/opt/build/include表示頭文件,參數-L/opt/build/lib表示編譯鏈接庫,編譯完成后,會在home目錄下生成time_sqlite3二進制文件。

3 實驗結果

將該文件下載到開發板的相關目錄下,并將其權限修改為可執行文件,然后在終端輸入./time_sqlite3,將出現圖4所示的畫面。

圖4 溫濕度存儲程序執行畫面Fig.4 Implementalpictureof temperature and humidity storage program

從上面圖4可知,溫濕度采集數據被成功的插入的數據庫中,經過多次重復實驗,程序未出現“跑飛”現象,說明編寫的溫濕度存儲程序可以完成對采集數據的實時存儲。

4 結束語

文中首先介紹了SQLite3數據庫的體系結構,然后介紹了在嵌入式系統下構建SQLite數據開發平臺,最后設計了溫濕度實時存儲的程序,并進行了試驗驗證。從試驗的結果可以看出,設計的溫濕度實時存儲程序能夠滿足實時性的要求,并且能夠長時間的穩定工作。

[1]趙彩云.內存數據庫性能分析及優化[D].天津:南開大學,2008.

[2]楊柳,龐和明,姜琳穎,等.嵌入式Linux及SQLite數據庫在智能監控中的應用研究[J].微計算機信息,2010,26(12):65-67.YANG Liu,PANG He-wei,JIANG Lin-ying,et al.Application research of embedded Linux and SQLite database in the intelligentmonitoring system[J].Micro computer information,2010,26(12):65-67.

[3]謝輝.嵌入式數據庫的設計與實現[D].太原:太原科技大學,2008.

[4]張媛媛.嵌入式數據庫管理系統的研究與實現 [D].上海:華東師范大學,2007.

[5]陸堅毅.網絡應用監控系統設計與實現[D].武漢:華中科技大學,2012.

[6]解輝,徐玉斌,李建偉,等.基于SQLite的嵌入式數據采集系統的研究[J].計算機與數字工程,2008(6):91-94.XIE Hui,XU Yu-bin,LI Jian-wei,et al.The research of embedded data acquisition system based on SQLite[J].Computer and Digital Engineering,2008(6):91-94.

[7]高凱武,任傳勝.基于嵌入式linux網頁服務器的大壩安全監測數據采集[J].工業儀表與自動化裝置,2013(6):95-98.GAO Kai-wu,REN Chuan-sheng.Dam safetymonitoring data collected based on embedded linux web server[J].Industrial Instrumentation&Automation,2013(6):95-98.

[8]趙俊生.嵌入式Linux系統及其構造[J].工業儀表與自動化裝置,2013(3):16-19.ZHAO Jun-sheng.The embedded Linux system and its structure[J].Industrial Instrumentation&Automation,2013(3):16-19.

猜你喜歡
嵌入式程序數據庫
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
搭建基于Qt的嵌入式開發平臺
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
數據庫
財經(2017年2期)2017-03-10 14:35:35
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
主站蜘蛛池模板: 日本久久久久久免费网络| 国产午夜福利亚洲第一| 欧美日韩国产在线人成app| 欧美日韩另类在线| 欧美日韩一区二区三| 欧美黄色网站在线看| 国产免费羞羞视频| 欧美天堂在线| 中文字幕无码中文字幕有码在线 | 欧美一级99在线观看国产| 午夜精品区| www.亚洲国产| 色亚洲成人| 午夜爽爽视频| 污视频日本| 久久久亚洲色| 77777亚洲午夜久久多人| 午夜毛片免费观看视频 | 亚洲一欧洲中文字幕在线| 中文字幕乱码中文乱码51精品| 成人av专区精品无码国产| 日韩欧美中文| 国产午夜人做人免费视频中文 | 欧美精品v欧洲精品| 亚洲无码37.| 美女内射视频WWW网站午夜| 人妻无码中文字幕一区二区三区| 国产av一码二码三码无码 | 午夜日本永久乱码免费播放片| a级毛片免费看| 日本亚洲欧美在线| 国产午夜精品一区二区三| 亚洲成在线观看 | 国产99精品久久| 国产在线麻豆波多野结衣| 欧美亚洲一二三区| 国产哺乳奶水91在线播放| 欧美日韩精品一区二区视频| 国产精品欧美激情| 国产一区二区影院| 久久国产精品夜色| 欧洲免费精品视频在线| 91探花在线观看国产最新| 在线无码九区| 欧美日韩在线第一页| 午夜精品福利影院| 国产亚洲视频免费播放| 色老头综合网| 黄色网页在线观看| 思思热在线视频精品| 国产本道久久一区二区三区| 热久久综合这里只有精品电影| 欧美激情,国产精品| 欧美在线伊人| 精品国产污污免费网站| 99热这里只有精品久久免费| 中文字幕佐山爱一区二区免费| 88av在线看| 亚洲电影天堂在线国语对白| 亚洲精品人成网线在线 | 丁香五月亚洲综合在线| 日本免费高清一区| 激情无码字幕综合| 国产成人久视频免费| 黄色网页在线播放| 国产精品欧美在线观看| 91久久性奴调教国产免费| 99这里只有精品在线| 51国产偷自视频区视频手机观看| 国产传媒一区二区三区四区五区| 中文字幕在线看| 波多野结衣无码视频在线观看| 99在线视频网站| 国产精品久久自在自线观看| 国产精品亚洲а∨天堂免下载| 在线网站18禁| 在线国产欧美| 亚洲an第二区国产精品| 极品av一区二区| 亚洲中文字幕97久久精品少妇| 国产一区二区在线视频观看| 尤物在线观看乱码|