單片機(jī)系統(tǒng)的數(shù)據(jù)存儲(chǔ)和管理
假設(shè)在前文所述的大容量測(cè)試系統(tǒng)中,系統(tǒng)采用16位地址的單片機(jī),利用分頁(yè)存儲(chǔ)模式對(duì)512KB掉電保護(hù)存儲(chǔ)器進(jìn)行訪問(wèn)。將存儲(chǔ)器分為16個(gè)頁(yè)面(00H~0FH),每個(gè)頁(yè)面地址為0000H~7FFFFH,共計(jì)32KB。此時(shí)系統(tǒng)利用malloc()可以在未被使用的空間中開(kāi)辟一段存儲(chǔ)空間,但是該函數(shù)返回的地址指針是隨機(jī)的,有可能將空間分配在系統(tǒng)無(wú)法識(shí)別的區(qū)間(如7FFFH~FFFFH),因此不能滿足需要。另外,由于系統(tǒng)中存儲(chǔ)器具有掉電保護(hù)功能,CPU在重新上電后將無(wú)法識(shí)別已保存測(cè)試數(shù)據(jù)的存儲(chǔ)空間,從而使malloc()函數(shù)失去意義。因此,還是以數(shù)據(jù)引導(dǎo)表為基礎(chǔ)來(lái)建立存儲(chǔ)空間的管理函數(shù)。其具體功能的實(shí)現(xiàn)都依賴于函數(shù)對(duì)數(shù)據(jù)引導(dǎo)表中各個(gè)記錄的操作,程序如下:
?。觯铮椋洹。恚撸幔欤欤铮悖ǎ酰椋睿簦螅椋?,ucharpage)//開(kāi)辟存儲(chǔ)空間的函數(shù)
?。觯铮椋洹。恚撸妫颍澹澹ǎ觯铮椋洌洌幔簦幔穑撸妫颍澹?,ucharpage)//釋放已開(kāi)辟存儲(chǔ)空間的函數(shù)
?。觯铮椋洹。颍澹撸幔欤欤铮悖ǎ觯铮椋洌洌幔簦幔穑撸颍澹酰椋睿簦螅椋?,ucharpage)//重新開(kāi)辟存儲(chǔ)空間的函數(shù)
以m_alloc()函數(shù)為例,其程序流程圖如圖2所示。
圖2 開(kāi)辟存儲(chǔ)空間函數(shù)m_alloc()的程序流程
當(dāng)系統(tǒng)需要為某一結(jié)點(diǎn)開(kāi)辟存儲(chǔ)空間時(shí),首先給出指定的存儲(chǔ)空間頁(yè)面page和需要開(kāi)辟空間的長(zhǎng)度size,然后通過(guò)m_alloc()函數(shù)在相應(yīng)頁(yè)面的引導(dǎo)表內(nèi)查詢是否有合適的存儲(chǔ)空間。由于引導(dǎo)表中每個(gè)記錄都代表一段已被分配的連續(xù)的地址區(qū)間,因此m_alloc()函數(shù)會(huì)從第一個(gè)記錄開(kāi)始判斷每?jī)蓚€(gè)相鄰記錄之間未被分配空間的長(zhǎng)度是否滿足系統(tǒng)的需要。當(dāng)有一對(duì)記錄滿足條件時(shí),m_alloc()函數(shù)會(huì)返回該段未被分配存儲(chǔ)空間的首地址(即前一個(gè)記錄的末地址)指針,同時(shí)在這兩個(gè)記錄中間插入此次開(kāi)辟空間段的新記錄。如果該頁(yè)面引導(dǎo)表的所有記錄都不滿足條件,則m_alloc()函數(shù)返回空指針。re_alloc()函數(shù)和m_free()函數(shù)分別完成重新分配指定首地址的一段存儲(chǔ)空間和刪除指定首地址的一段存儲(chǔ)空間的操作。其功能和用法與m_alloc()類似,不再贅述。
鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)和存儲(chǔ)管理系統(tǒng)在實(shí)際操作中的應(yīng)用
利用上文所述的存儲(chǔ)管理系統(tǒng)可以實(shí)現(xiàn)在大容量測(cè)試系統(tǒng)中應(yīng)用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),這樣做的好處在于能夠有效地簡(jiǎn)化系統(tǒng)存儲(chǔ)數(shù)據(jù)的過(guò)程,有利于執(zhí)行多項(xiàng)指令操作,提高系統(tǒng)存儲(chǔ)空間的利用率。
?。樱疲睹芏壤^電器校驗(yàn)系統(tǒng)
如圖3所示,SF6密度繼電器校驗(yàn)系統(tǒng)由51系列單片機(jī)、512KB掉電保護(hù)存儲(chǔ)器、打印機(jī)、時(shí)鐘系統(tǒng)和LCD組成,配有高精度的數(shù)字式壓力傳感器和溫度傳感器,可以通過(guò)485總線與上位機(jī)通信。該系統(tǒng)能夠?qū)Σ煌愋偷拿芏壤^電器進(jìn)行校驗(yàn),滿足各種額定參數(shù)和接點(diǎn)數(shù)目的需要,在校驗(yàn)過(guò)程中實(shí)現(xiàn)實(shí)時(shí)顯示、打印數(shù)據(jù)等多項(xiàng)功能;對(duì)同一繼電器能夠保存多組校驗(yàn)數(shù)據(jù),最多可保存4000多條校驗(yàn)數(shù)據(jù);對(duì)于所有的校驗(yàn)記錄,都可以隨時(shí)進(jìn)行查詢;另外,在與上位機(jī)進(jìn)行通信時(shí),有相應(yīng)的上位機(jī)軟件對(duì)下位機(jī)系統(tǒng)進(jìn)行的數(shù)據(jù)傳輸、存儲(chǔ)器空間查詢和數(shù)據(jù)刪除等操作。
圖3?。樱疲睹芏壤^電器校驗(yàn)系統(tǒng)結(jié)構(gòu)框圖
具體來(lái)講,SF6密度繼電器校驗(yàn)系統(tǒng)以SF6密度繼電器作為校驗(yàn)對(duì)象,校驗(yàn)結(jié)果包含SF6氣體的壓力值和溫度值,因此將每個(gè)校驗(yàn)對(duì)象的校驗(yàn)結(jié)果抽象為一個(gè)數(shù)據(jù)元素,分別包括該校驗(yàn)對(duì)象的測(cè)試信息(如測(cè)試日期,繼電器的測(cè)試序號(hào)、接點(diǎn)數(shù)目和額定參數(shù)信息)和一組或多組的測(cè)量值信息(如校驗(yàn)次數(shù)、報(bào)警、閉鎖1、閉鎖2、超壓接點(diǎn)分別動(dòng)作、返回時(shí)的壓力值和溫度值)。系統(tǒng)以每個(gè)數(shù)據(jù)元素為結(jié)點(diǎn)建立鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),并通過(guò)上述的管理存儲(chǔ)系統(tǒng)來(lái)管理存儲(chǔ)空間的分配,這樣既能保證有效、合理地保存校驗(yàn)數(shù)據(jù),又能很好地實(shí)現(xiàn)數(shù)據(jù)查詢、數(shù)據(jù)刪除以及與上位機(jī)通信等操作,使系統(tǒng)的運(yùn)行更加高效可靠。
非線性邏輯結(jié)構(gòu)的自動(dòng)測(cè)試系統(tǒng)
當(dāng)自動(dòng)測(cè)試系統(tǒng)面臨非線性邏輯結(jié)構(gòu)的數(shù)據(jù)元素時(shí),必須要采取非順序存儲(chǔ)結(jié)構(gòu)來(lái)保存數(shù)據(jù),此時(shí)可以考慮鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),或者索引存儲(chǔ)結(jié)構(gòu)以及二叉樹(shù)等各種非順序存儲(chǔ)結(jié)構(gòu),但前提條件都是要有一套專門(mén)的存儲(chǔ)管理系統(tǒng)來(lái)支持。
有了上述的存儲(chǔ)管理系統(tǒng)作基礎(chǔ),各種非順序存儲(chǔ)結(jié)構(gòu)的應(yīng)用就成為可能。在設(shè)計(jì)系統(tǒng)時(shí)充分權(quán)衡存儲(chǔ)空間的利用率和算法所耗費(fèi)的時(shí)間,就能夠有針對(duì)性地應(yīng)用多種存儲(chǔ)結(jié)構(gòu)并設(shè)計(jì)出相應(yīng)的算法,以滿足各種測(cè)試對(duì)象和測(cè)試環(huán)境的要求。
結(jié)語(yǔ)
以鏈?zhǔn)浇Y(jié)構(gòu)的形式保存數(shù)據(jù)和通過(guò)數(shù)據(jù)引導(dǎo)表來(lái)管理存儲(chǔ)空間,是應(yīng)用于大容量單片機(jī)測(cè)試系統(tǒng)的一種新的數(shù)據(jù)保存和管理方式。
這種存儲(chǔ)方式既適用于線性邏輯結(jié)構(gòu)測(cè)試系統(tǒng),也適用于非線性邏輯結(jié)構(gòu)測(cè)試系統(tǒng),總體上使得單片機(jī)系統(tǒng)在處理多項(xiàng)復(fù)雜數(shù)據(jù)并進(jìn)行反復(fù)保存、查詢和刪除等操作時(shí)更加快捷簡(jiǎn)便,提高了對(duì)有限容量存儲(chǔ)空間的利用率;同時(shí),結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)使得系統(tǒng)的維護(hù)和升級(jí)更加輕松,實(shí)現(xiàn)了系統(tǒng)的結(jié)構(gòu)化管理。
評(píng)論