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