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