• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      張秀芳,劉洲洲

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

      0 引 言

      當(dāng)前嵌入式開(kāi)放系統(tǒng)已經(jīng)廣泛應(yīng)用在各行各業(yè),比如通訊、電子、航空、過(guò)程控制、消費(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ù)庫(kù)作為系統(tǒng)的關(guān)鍵模塊,有至關(guān)重要的作用,當(dāng)前常見(jiàn)的數(shù)據(jù)庫(kù)存儲(chǔ)介質(zhì)由連續(xù)的Flash組成,同時(shí)配合驅(qū)動(dòng)和文件管理系統(tǒng),且邏輯地址空間可逆且連續(xù)。文中以嵌入式Nucleus數(shù)據(jù)庫(kù)為例[5-9],設(shè)計(jì)一種測(cè)試軟件架構(gòu),采用直接面向Flash驅(qū)動(dòng)的方法,相比傳統(tǒng)存取方法速度有較大提高,內(nèi)存占用也隨之降低。

      1 Nucleus開(kāi)放系統(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)針對(duì)不同的處理器的源碼大部分也是相同的且少部分跟CPU相關(guān)由匯編完成。該操作系統(tǒng)完全開(kāi)源,可以通過(guò)修改開(kāi)源代碼進(jìn)行所需的配置,調(diào)試可以在中斷和寄存器級(jí)進(jìn)行。核心函數(shù)API和程序代碼鏈接一起生成目標(biāo)代碼,可以直接燒制到目標(biāo)板卡中,整個(gè)核心代碼區(qū)內(nèi)核規(guī)模非常小,方便調(diào)試。

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

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

      2.1 地址映射

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

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

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

      struct tagDbDevTab{

      long Addr;//物理地址

      long Free;//剩余大小

      long Dirty;//臟塊大小

      }DbDevTab[DB_DEV_SIZE/0x10000];

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

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

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

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

      初始化過(guò)程為掃描各個(gè)Bank ID,填寫地址映射表的addr字段,如果發(fā)現(xiàn)Bank ID的Flag是0xF,則擦掉該Bank,如果發(fā)現(xiàn)Bank0 ID是0xE0000000,則改寫為0xC0000000。如果注冊(cè)表沒(méi)有填寫滿,也就是有的邏輯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è)記錄的大小算出來(lái)一個(gè)初始值,然后再?gòu)脑揃ank的最后向前搜索到初始值,遇到不是0xFFFFFFFF的時(shí)候退出,該地址就是該Bank的剩余起始地址。

      3 掉電保護(hù)

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

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

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

      圖2 串口通訊

      然后再通過(guò)SRAM測(cè)試和DATA/PROGRAM校驗(yàn),如圖3和圖4所示。測(cè)試過(guò)程中對(duì)于數(shù)據(jù)庫(kù)的保護(hù),在本數(shù)據(jù)庫(kù)系統(tǒng)里數(shù)據(jù)處理過(guò)程中采用備份的方式:兩份數(shù)據(jù)庫(kù)定義文件(*.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)前組指向第二組。存儲(chǔ)一條記錄時(shí),首先存貯該記錄的數(shù)據(jù),然后存入記錄的節(jié)點(diǎn),最后對(duì)該記錄進(jìn)行排序。針對(duì)上述流程,發(fā)生掉電時(shí),如果發(fā)生在存數(shù)據(jù)過(guò)程,該記錄將完全不存在;如果發(fā)生在存節(jié)點(diǎn)過(guò)程中,該節(jié)點(diǎn)將不存在,但會(huì)浪費(fèi)一塊數(shù)據(jù)文件空間;如果發(fā)生在排序過(guò)程中,由于記錄數(shù)目不一致,將會(huì)刪除失效的一套文件。數(shù)據(jù)庫(kù)保持原來(lái)的結(jié)構(gòu)。

      圖3 SDRAM測(cè)試

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

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

      5 結(jié)束語(yǔ)

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

      猜你喜歡
      嵌入式數(shù)據(jù)庫(kù)節(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的嵌入式開(kāi)發(fā)平臺(tái)
      數(shù)據(jù)庫(kù)
      嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      抓住人才培養(yǎng)的關(guān)鍵節(jié)點(diǎn)
      亳州市| 临漳县| 隆化县| 内乡县| 刚察县| 大兴区| 梅河口市| 都江堰市| 永仁县| 措勤县| 渭源县| 牟定县| 仲巴县| 扎囊县| 海宁市| 新丰县| 兴仁县| 米泉市| 交城县| 台湾省| 皋兰县| 乐至县| 濉溪县| 常宁市| 鄢陵县| 安顺市| 监利县| 蚌埠市| 历史| 揭东县| 连南| 大埔区| 湘潭县| 盐津县| 瑞安市| 贞丰县| 玉屏| 元阳县| 都匀市| 渭源县| 东阿县|