基于嵌入式操作系統(tǒng)的控制系統(tǒng)平臺設(shè)計
3.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計
實時數(shù)據(jù)庫與其他一般數(shù)據(jù)庫一樣,包含一組對象及其結(jié)構(gòu),由于目前對實時數(shù)據(jù)庫還沒有提出統(tǒng)一的數(shù)據(jù)模型,所以不同廠家開發(fā)的數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)都有很大差別。本系統(tǒng)的實時數(shù)據(jù)庫,一個基本的數(shù)據(jù)對象為“數(shù)據(jù)”,一個數(shù)據(jù)包含若干信息,如數(shù)據(jù)名稱、數(shù)據(jù)類型、數(shù)據(jù)位置、數(shù)據(jù)長度等。
考慮到數(shù)據(jù)的存取效率,程序運行一開始,我們將在內(nèi)存區(qū)開辟一段緩沖區(qū),緩沖區(qū)中只存放數(shù)據(jù),如果緩沖區(qū)大小不夠,即緩沖區(qū)的數(shù)據(jù)較多,可以自動擴展緩沖區(qū)大小。實時數(shù)據(jù)存放在緩沖區(qū)時,我們采取這種思想:如果不是bit型數(shù)據(jù),由于數(shù)據(jù)長度都是字節(jié)的整數(shù)倍,存入緩沖區(qū)中以字節(jié)來進行存儲,該數(shù)據(jù)的長度length是以字節(jié)來計算。如果是bit型數(shù)據(jù),存入緩沖區(qū)中,該數(shù)據(jù)的長度length是以位來計算,接著再存儲一個實時數(shù)據(jù),若為非bit型數(shù)據(jù),則從下一個字節(jié)開始存放,即原來的bit型數(shù)據(jù)占用一個字節(jié),若為bit型數(shù)據(jù),根據(jù)此數(shù)據(jù)的長度來判斷其存放位置,這里又分兩種情況,如果這兩個bit型數(shù)據(jù)的長度沒有超過8位,則緊接著前一個bit型數(shù)據(jù)后存儲這個bit型數(shù)據(jù),如果兩個bit型數(shù)據(jù)的長度超過8位,則從下一個字節(jié)開始存放,即原來的bit型數(shù)據(jù)占用一個字節(jié)。
3.2.2數(shù)據(jù)存取設(shè)計
為了存取方便,我們將所有的實時數(shù)據(jù)組成一個鏈表,鏈表的節(jié)點類型為上述的rtdb_data_t結(jié)構(gòu)。當向?qū)崟r緩沖區(qū)中加入一條數(shù)據(jù)時,就自動會計算出數(shù)據(jù)存儲位置、長度等信息,并在實時數(shù)據(jù)庫鏈表中加上一個節(jié)點。這樣,取實時數(shù)據(jù)就非常靈活和方便,如果知道實時數(shù)據(jù)的名稱,則可以遍歷鏈表得到數(shù)據(jù),如果知道數(shù)據(jù)的存儲位置和長度,則可以利用實時數(shù)據(jù)庫提供的接口直接從緩沖區(qū)中獲得數(shù)據(jù),而不必遍歷鏈表,因為遍歷鏈表需要花費一些時間,這在實時性要求較高的本系統(tǒng)中不太適合,所以本系統(tǒng)常常采用后一種方法存取數(shù)據(jù)。實時數(shù)據(jù)庫鏈表結(jié)構(gòu)如圖3所示。
圖3實時數(shù)據(jù)庫鏈表結(jié)構(gòu)
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論