国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于開放系統(tǒng)的測試軟件架構(gòu)設(shè)計(jì)研究

2020-07-15 05:04:24張秀芳劉洲洲
關(guān)鍵詞:嵌入式數(shù)據(jù)庫節(jié)點(diǎn)

張秀芳,劉洲洲

(1.西安歐亞學(xué)院,陜西 西安 710065;2.西安工程大學(xué) 電信學(xué)院,陜西 西安 710000;3.西北工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710072)

0 引 言

當(dāng)前嵌入式開放系統(tǒng)已經(jīng)廣泛應(yīng)用在各行各業(yè),比如通訊、電子、航空、過程控制、消費(fèi)電子產(chǎn)品等領(lǐng)域[1-4]。當(dāng)前嵌入式操作系統(tǒng)有數(shù)百種,比較流行的有蘋果iOS,谷歌的安卓系統(tǒng),ATI的Nucleus Plus、VXWorks等。用戶可以根據(jù)自身的軟硬件環(huán)境的要求,選擇合適的操作系統(tǒng)。其中數(shù)據(jù)庫作為系統(tǒng)的關(guān)鍵模塊,有至關(guān)重要的作用,當(dāng)前常見的數(shù)據(jù)庫存儲介質(zhì)由連續(xù)的Flash組成,同時(shí)配合驅(qū)動和文件管理系統(tǒng),且邏輯地址空間可逆且連續(xù)。文中以嵌入式Nucleus數(shù)據(jù)庫為例[5-9],設(shè)計(jì)一種測試軟件架構(gòu),采用直接面向Flash驅(qū)動的方法,相比傳統(tǒng)存取方法速度有較大提高,內(nèi)存占用也隨之降低。

1 Nucleus開放系統(tǒng)

Nucleus是為實(shí)時(shí)嵌入式應(yīng)用而設(shè)計(jì)的一個(gè)搶先式多任務(wù)操作系統(tǒng)[10-12]。Nucleus系統(tǒng)的各層通訊協(xié)議都提供了由ANSIC寫成的源碼,有利于系統(tǒng)的可移植性并支持大部分處理器。而且Nucleus系統(tǒng)針對不同的處理器的源碼大部分也是相同的且少部分跟CPU相關(guān)由匯編完成。該操作系統(tǒng)完全開源,可以通過修改開源代碼進(jìn)行所需的配置,調(diào)試可以在中斷和寄存器級進(jìn)行。核心函數(shù)API和程序代碼鏈接一起生成目標(biāo)代碼,可以直接燒制到目標(biāo)板卡中,整個(gè)核心代碼區(qū)內(nèi)核規(guī)模非常小,方便調(diào)試。

2 數(shù)據(jù)庫測試架構(gòu)

文中提出了面向Flash驅(qū)動的數(shù)據(jù)庫方法,該方法向上提供尋址空間,且空間為線性,將連續(xù)且可逆的邏輯地址空間用地址映射表的擦除塊來映射。數(shù)據(jù)庫相關(guān)設(shè)備和本身數(shù)據(jù)庫相互關(guān)聯(lián),其中在連續(xù)的邏輯地址的基礎(chǔ)上,記錄需要寫在同一個(gè)擦除塊,數(shù)據(jù)庫設(shè)備則需要提供動態(tài)記錄空間。數(shù)據(jù)庫設(shè)備不能獨(dú)立完成整理擦除塊,需要依賴記錄索引,同時(shí)設(shè)備需要記錄擦除塊的工作情況,使得動態(tài)分配空間功能得以完善。擦除塊的掉電保護(hù)在底層設(shè)備獨(dú)立完成,記錄等操作的掉電保護(hù)由數(shù)據(jù)庫系統(tǒng)操作完成。記錄索引表和交換塊以及記錄區(qū)構(gòu)成本數(shù)據(jù)庫系統(tǒng),索引表占用首地址空間,而交換塊不占用地址空間且存儲索引表最后節(jié)點(diǎn)部分,記錄區(qū)占用其他地址空間,詳細(xì)記錄每個(gè)數(shù)據(jù)庫地址類別大小等屬性,且記錄唯一地址信息,ID號不沖突同時(shí)可區(qū)分?jǐn)?shù)據(jù)庫類別[13-15]。

2.1 地址映射

文中假定數(shù)據(jù)庫相關(guān)設(shè)備存儲大小為2 M,且擦除塊大小占據(jù)64 K,擦除塊為32塊,其中一塊作為交換塊,其余為擦除塊,每個(gè)擦除塊前四字節(jié)寫入ID號和bank號,結(jié)構(gòu)如圖1所示。

圖1 擦除塊結(jié)構(gòu)

當(dāng)嵌入式開發(fā)系統(tǒng)初始化時(shí),數(shù)據(jù)庫相關(guān)設(shè)備則開始掃描32塊ID,并動態(tài)生成一個(gè)映射表且存儲在系統(tǒng)的內(nèi)存中,由于保留一個(gè)交換塊,只可用31節(jié)點(diǎn),定義最后節(jié)點(diǎn)地址,其余節(jié)點(diǎn)包括物理地址和擦除塊信息。文中映射表用C語言表述成:

struct tagDbDevTab{

long Addr;//物理地址

long Free;//剩余大小

long Dirty;//臟塊大小

}DbDevTab[DB_DEV_SIZE/0x10000];

2.2 分配記錄空間和臟塊回收

文中數(shù)據(jù)庫相關(guān)設(shè)備可為系統(tǒng)動態(tài)分配記錄空間,數(shù)據(jù)庫記錄表存儲在同一塊擦除塊,且不能夸塊存儲。將地址映射表的空閑字段進(jìn)行優(yōu)先分配,減少碎片和物聯(lián)塊充分使用,由于操作如刪除和修改等會產(chǎn)生臟塊,為有效利用,臟塊需要反復(fù)利用,回收記錄觸發(fā)后當(dāng)設(shè)備空間無空余,臟塊回收則選中要回收的目標(biāo)塊,根據(jù)地址映射表記錄字段的大小優(yōu)先判斷,選定后記錄轉(zhuǎn)存其他空間同時(shí)刪除原記錄??臻g所有記錄移除后,調(diào)用擦除函數(shù)寫入,同時(shí)修改地址映射表,如果臟塊太多,需要整塊回收,將有用記錄逐條轉(zhuǎn)存其他空間后擦除該空間,將保留空間作為邏輯空間寫入記錄,這樣將整個(gè)物理空間有效利用。

2.3 數(shù)據(jù)庫設(shè)備初始化

數(shù)據(jù)庫系統(tǒng)初始化先由設(shè)備初始化再進(jìn)行數(shù)據(jù)本身初始化。初始化不但要對調(diào)電保護(hù)做出檢測和數(shù)據(jù)修復(fù),還要初始化許多全局變量,它們包括:地址映射表、保留Bank的物理基地址、記錄索引表的最大節(jié)點(diǎn)、索引表中已經(jīng)刪除的節(jié)點(diǎn)個(gè)數(shù)、系統(tǒng)索引的記錄個(gè)數(shù)等,另外還要打開系統(tǒng)索引。

初始化過程為掃描各個(gè)Bank ID,填寫地址映射表的addr字段,如果發(fā)現(xiàn)Bank ID的Flag是0xF,則擦掉該Bank,如果發(fā)現(xiàn)Bank0 ID是0xE0000000,則改寫為0xC0000000。如果注冊表沒有填寫滿,也就是有的邏輯Bank找不到,則找到一個(gè)ID為0xFFFFFFFF的塊,擦除后寫入ID為0xC*******,并作為這個(gè)邏輯Bank。找到保留Bank并把基地址寫入地址映射表的最后一個(gè)節(jié)點(diǎn)。掃描Bank0的記錄索引表的addr字段,如果某個(gè)節(jié)點(diǎn)的Flag是0xF,改寫為0x8,如果Flag是0xE,讀出該節(jié)點(diǎn)id,找出該記錄舊的節(jié)點(diǎn)并刪除,同時(shí)改寫Flag為0xC。最后統(tǒng)計(jì)出記錄索引表的最大節(jié)點(diǎn)以及索引表中已經(jīng)刪除的節(jié)點(diǎn)個(gè)數(shù)。還要統(tǒng)計(jì)出各個(gè)Bank的已經(jīng)用掉的空間、剩余空間、臟記錄的空間,其中剩余空間是根據(jù)該Bank的最后一條記錄再加上這個(gè)記錄的大小算出來一個(gè)初始值,然后再從該Bank的最后向前搜索到初始值,遇到不是0xFFFFFFFF的時(shí)候退出,該地址就是該Bank的剩余起始地址。

3 掉電保護(hù)

嵌入式開放數(shù)據(jù)庫設(shè)備必須使用掉電保護(hù),目的是嵌入式系統(tǒng)在突發(fā)掉電情況,資料完整性得以保存,要求在寫操作步驟進(jìn)行。首先系統(tǒng)啟動后初始化過程中需要記錄之前掉電現(xiàn)象是正常模式下掉電還是異常模式下掉電,當(dāng)突發(fā)掉電可以還原掉電前資料信息,數(shù)據(jù)庫的空間地址分別由四個(gè)字節(jié)信息組成,相關(guān)記錄含義目錄名的相關(guān)性不得沖突、同時(shí)依靠數(shù)據(jù)庫的魯棒性。

數(shù)據(jù)庫的掉電保護(hù)是指在用戶打開數(shù)據(jù)庫后,在數(shù)據(jù)庫的操作期間(關(guān)閉數(shù)據(jù)庫之前)發(fā)生低電壓或者突然掉電時(shí)應(yīng)保證數(shù)據(jù)庫資料的完整性。在這個(gè)過程中允許且只允許丟失用戶最后一次的操作。在這個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)中,利用了兩套數(shù)據(jù)文件來保證這一點(diǎn),每個(gè)數(shù)據(jù)庫打開后同時(shí)存在兩套文件:一是(*.dat,*.def.*,*.ida,*.idb,*.idc,...),另一套是(*.dat,*.bef,*.bda,*.bdb.*.bdc,...),其中*.dat是同一個(gè)文件。其余的文件兩者一一對應(yīng)。在數(shù)據(jù)庫打開時(shí),根據(jù)兩套文件的完整性(文件個(gè)數(shù))及其相互關(guān)系(記錄數(shù)的個(gè)數(shù))來確定當(dāng)前使用哪一套文件,并將另外一套文件全部置空(此時(shí)這套文件無效)。在對數(shù)據(jù)庫進(jìn)行操作的過程中,先將當(dāng)前這套文件的內(nèi)容修改后寫入另一套文件中,全部完成后將當(dāng)前使用的文件標(biāo)志修改并將原來那套文件全部置空。這樣一來就可以保證在任何時(shí)候都有一套完整的數(shù)據(jù),在關(guān)閉數(shù)據(jù)庫的時(shí)候?qū)⒖盏哪且惶孜募h除。對于數(shù)據(jù)庫的保護(hù),在本數(shù)據(jù)庫系統(tǒng)里數(shù)據(jù)處理過程中采用備份的方式:兩份數(shù)據(jù)庫定義文件(*.def,*.bef),兩份索引文件(*.id*,*.bd*),但只有一份數(shù)據(jù)文件,因?yàn)閿?shù)據(jù)塊的使用可以由文件系統(tǒng)保障。這兩份文件組在使用中互為備份:在第一組為當(dāng)前使用時(shí),執(zhí)行操作前恢復(fù)當(dāng)前文件組的數(shù)據(jù),然后在備份組上進(jìn)行修改,修改完成,在將當(dāng)前組指向第二組。

4 系統(tǒng)實(shí)驗(yàn)測試

通過上位機(jī)和下位機(jī)測試兩種方式:同時(shí)按下電源開關(guān)鍵(掛斷鍵)和退出鍵(右功能鍵)用傳輸線將小機(jī)同PC連接起來:在PC端啟動“數(shù)據(jù)庫測試程序”,小機(jī)端:按開關(guān)鍵開機(jī)連接成功后,在PC端選擇“系統(tǒng)自檢”。首先進(jìn)行串口測試如圖2所示,同時(shí)分別測試串口0和串口1,并顯示測試結(jié)果。在測試夾具上,會將串口0和串口1短接,故各串口自發(fā)自收,自動判斷測試結(jié)果。

圖2 串口通訊

然后再通過SRAM測試和DATA/PROGRAM校驗(yàn),如圖3和圖4所示。測試過程中對于數(shù)據(jù)庫的保護(hù),在本數(shù)據(jù)庫系統(tǒng)里數(shù)據(jù)處理過程中采用備份的方式:兩份數(shù)據(jù)庫定義文件(*.def,*.bef),兩份索引文件(*.id*,*.bd*),但只有一份數(shù)據(jù)文件,因?yàn)閿?shù)據(jù)塊的使用可以由文件系統(tǒng)保障。這兩份文件組在使用中互為備份:在第一組為當(dāng)前使用時(shí),執(zhí)行操作前恢復(fù)當(dāng)前文件組的數(shù)據(jù),然后在備份組上進(jìn)行修改,修改完成,再將當(dāng)前組指向第二組。存儲一條記錄時(shí),首先存貯該記錄的數(shù)據(jù),然后存入記錄的節(jié)點(diǎn),最后對該記錄進(jìn)行排序。針對上述流程,發(fā)生掉電時(shí),如果發(fā)生在存數(shù)據(jù)過程,該記錄將完全不存在;如果發(fā)生在存節(jié)點(diǎn)過程中,該節(jié)點(diǎn)將不存在,但會浪費(fèi)一塊數(shù)據(jù)文件空間;如果發(fā)生在排序過程中,由于記錄數(shù)目不一致,將會刪除失效的一套文件。數(shù)據(jù)庫保持原來的結(jié)構(gòu)。

圖3 SDRAM測試

圖4 DATA/PROGRAM校驗(yàn)

通過軟件測試,表明該方法便于移植且當(dāng)其他模塊崩潰時(shí)不會直接影響數(shù)據(jù)庫系統(tǒng)同時(shí)存取速度有所提高,同時(shí)占用內(nèi)存也會大大降低,由于有掉電保護(hù),系統(tǒng)可靠性也得到了增強(qiáng)。

5 結(jié)束語

Nucleus作為開放嵌入式系統(tǒng),具有實(shí)時(shí)性和多任務(wù)性,系統(tǒng)資源的調(diào)度都在其有效管理控制下可以使嵌入式多任務(wù)的開發(fā)變得省時(shí)省力,同時(shí)高效,文中分析了基于Nucleus的嵌入式數(shù)據(jù)庫測試軟件架構(gòu)的機(jī)理,對于嵌入式實(shí)時(shí)操作系統(tǒng)的開發(fā)具有重要的意義。

猜你喜歡
嵌入式數(shù)據(jù)庫節(jié)點(diǎn)
CM節(jié)點(diǎn)控制在船舶上的應(yīng)用
Analysis of the characteristics of electronic equipment usage distance for common users
基于AutoCAD的門窗節(jié)點(diǎn)圖快速構(gòu)建
搭建基于Qt的嵌入式開發(fā)平臺
數(shù)據(jù)庫
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
抓住人才培養(yǎng)的關(guān)鍵節(jié)點(diǎn)
新邵县| 余庆县| 理塘县| 唐河县| 阳原县| 饶平县| 黎平县| 顺平县| 兰西县| 淮阳县| 隆安县| 河东区| 体育| 富蕴县| 长丰县| 拜泉县| 高碑店市| 东宁县| 潞城市| 若羌县| 河池市| 原阳县| 南和县| 永川市| 将乐县| 永昌县| 睢宁县| 昭平县| 子洲县| 锡林郭勒盟| 延安市| 乌海市| 嘉禾县| 周至县| 肃南| 邢台县| 康平县| 巨野县| 集安市| 青河县| 炎陵县|