<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 單片機測試系統的數據存儲和管理

單片機測試系統的數據存儲和管理

——
作者:趙成 袁海文 時(shí)間:2007-10-23 來(lái)源:電子設計信息網(wǎng) 收藏
    介紹一種應用于的鏈式存儲結構,其特點(diǎn)在于采用數據結構的存儲方式,并結合有效的存儲管理方法對系統的存儲空間進(jìn)行管理和分配,從而在普通的中實(shí)現了對大量測試結果的抽象化數據管理,便于系統進(jìn)行數據保存、數據刪除、數據查詢(xún)以及與上位機的數據傳輸等各項操作,增強了系統的可靠性和可繼承性。

  引言

  在自動(dòng)化測試領(lǐng)域里,憑借其成熟的應用體系,簡(jiǎn)單的系統結構以及優(yōu)良的性?xún)r(jià)比得到了越來(lái)越廣泛的應用。近年來(lái),隨著(zhù)新的測試對象不斷出現,以及測試手段的不斷發(fā)展,測試系統的功能越來(lái)越完善,各種應用場(chǎng)合對測試系統的要求也日益提高?,F在的大多數測試系統不僅要完成工業(yè)現場(chǎng)的實(shí)時(shí)測控任務(wù),同時(shí)還要進(jìn)一步實(shí)現對測試數據的實(shí)時(shí)處理和保存。以往在一般的單片機測試系統中,信息的存儲量并不大,系統只須用較少的資源就能實(shí)現數據的存儲。但是隨著(zhù)存儲芯片技術(shù)的不斷發(fā)展,適用于單片機系統的存儲芯片已經(jīng)可以在掉電保護的情況下保存上百KB甚至幾MB的數據;同樣,目前的單片機測試系統也面臨動(dòng)輒處理并保存上千條乃至近萬(wàn)條測試數據的問(wèn)題。這對一般的缺少操作系統支持的單片機測試系統來(lái)說(shuō),是一項相當復雜的工作,因而目前的測試系統往往只能針對具體數值對象進(jìn)行處理,對大量采集數據采取簡(jiǎn)單的順序存儲方式。顯然,這種方法缺少靈活性,不利于單片機測試系統處理大量測試數據,限制了測試系統在這方面的發(fā)展。

  本文主要針對處理測試數據量較大的一類(lèi)測試系統,討論測試數據的存儲和管理問(wèn)題。這類(lèi)測試系統往往由抗干擾能力較強的單片機和大容量、掉電保護的存儲芯片組成,同時(shí)配有高精度數字式傳感器;造價(jià)便宜,性能穩定,適合工作在工業(yè)現場(chǎng),保存和處理大量測試數據,有的甚至能夠與上位機組成測控網(wǎng)絡(luò )完成更為復雜的測試任務(wù)。本文將介紹一種應用于單片機測試系統的鏈式存儲方式,能夠在工業(yè)現場(chǎng)進(jìn)行實(shí)時(shí)測控的同時(shí),實(shí)現對大量測試數據的保存和管理,在實(shí)際應用中取得了良好的效果。

  大容量單片機測試系統中的存儲結構

  在大多數自動(dòng)測試系統中,測試數據的邏輯結構一般都會(huì )遵循線(xiàn)性邏輯關(guān)系,即數據元素在時(shí)間或者空間順序上只分先后次序而不存在上下層次。因此在設計存儲結構時(shí)往往采用順序存儲結構,其優(yōu)點(diǎn)在于處理線(xiàn)性數據結構時(shí)速度快,而且結構簡(jiǎn)單。

  但是上述情況在前文所述的大容量測試系統中并不是普遍適用的。大容量測試系統雖然同樣是線(xiàn)性邏輯結構,但其測試數據變化多樣,構成數據元素的內部結構也非常復雜,而且系統又要執行數據保存和數據查詢(xún)等多項指令操作,如果再應用順序存儲結構就會(huì )面臨許多問(wèn)題。

  首先,測試系統經(jīng)常會(huì )面臨一些較為特殊的測試對象。其測試信息較為復雜且數據長(cháng)度不固定,顯然不利于采用順序存儲結構。假設系統按照時(shí)間或空間上的邏輯順序來(lái)進(jìn)行順序存儲,那么對存儲空間的分配將成為難題。若分配空間過(guò)大,則影響存儲效率;反之,又會(huì )出現數據溢出的情況。類(lèi)似地,假設系統能夠安排好數據的存放空間,在進(jìn)行數據查詢(xún)、數據刪除等操作時(shí)系統也會(huì )顯得力不從心。

  其次,采用順序存儲結構不能很好地處理抽象數據類(lèi)型。系統在進(jìn)行數據保存、數據查詢(xún)以及數據刪除等操作時(shí)都要考慮數據元素的長(cháng)度和內容,不能做到靈活、有效。當系統需要修改或升級時(shí),對數據元素內部結構的修改又會(huì )影響到系統的整體操作,從而降低了系統的可靠性和高效性,同時(shí)使得系統進(jìn)行維護和升級的難度大大增加。

  綜上所述,順序存儲結構并不能解決大容量測試系統在存儲和管理數據時(shí)面臨的所有問(wèn)題,因此在實(shí)際操作中必須考慮非順序存儲結構的應用。長(cháng)久以來(lái),在單片機系統中較少采用諸如鏈式存儲結構等非順序存儲結構,原因在于鏈式存儲結構必須有一套專(zhuān)門(mén)的存儲管理系統來(lái)支持。在通用計算機中,這一功能由操作系統或高級語(yǔ)言的編譯系統來(lái)實(shí)現,但在普通單片機系統中沒(méi)有成熟的應用案例,因而使程序設計的難度較高。下面介紹一種應用于大容量單片機系統的存儲管理系統,能夠支持大容量單片機測試系統的應用鏈式存儲方式。

  大容量測試系統的存儲管理系統

  對于采用鏈式存儲結構的大容量測試系統,鏈表中各結點(diǎn)的物理地址是不固定的。為避免在保存數據時(shí)可能出現的存儲空間沖突問(wèn)題,需要建立專(zhuān)門(mén)的存儲管理系統來(lái)管理存儲空間的開(kāi)辟和釋放。其中,數據引導表是存儲管理系統的基礎,負責記錄存儲空間中各個(gè)數據元素的存儲信息。利用數據引導表,同時(shí)配合實(shí)現開(kāi)辟空間、釋放空間等操作的函數,測試系統能夠實(shí)現對大量存儲空間的有效管理。

  數據引導表

  建立數據引導表,就是建立一種鏈表中各結點(diǎn)與其相應物理地址之間的聯(lián)系,規范每個(gè)結點(diǎn)對存儲空間的使用。在測試系統中,引導表只是占用存儲空間內劃分的一段固定區域,其記錄對象是一段已被分配占用的連續地址空間的首地址和末地址,標志著(zhù)保存在存儲空間上的某個(gè)結點(diǎn)所分配占用的空間大小,稱(chēng)為一個(gè)“記錄”。各個(gè)記錄在引導表中的物理地址是連續的,并且按照每個(gè)記錄首地址的大小依次排列。數據引導表工作原理如圖1所示。



圖1 數據引導表工作原理示意圖

  在初始狀態(tài)時(shí),內存引導表只有2個(gè)記錄,表明整個(gè)存儲空間的首地址和末地址,此時(shí)整個(gè)頁(yè)面空間沒(méi)有存儲任何測試數據。一旦有新的結點(diǎn)需要在這一空間上保存,CPU將為該結點(diǎn)開(kāi)辟一段連續的存儲區間供其使用,并將該段空間的首地址和末地址作為一個(gè)記錄寫(xiě)入內存引導表中。同樣的當系統需要在某一頁(yè)面上刪除一個(gè)鏈表中的結點(diǎn)時(shí),CPU將其對應的記錄在內存引導表中刪除,以此來(lái)釋放此段地址空間。值得說(shuō)明的是,對于在引導表中被釋放的存儲空間部分,其保存的內容并沒(méi)有真正刪除;在新的數據覆蓋該地址之前,CPU還是可以通過(guò)直接訪(fǎng)問(wèn)該地址來(lái)讀取其中的存儲數據。

  管理存儲空間的函數

  一般來(lái)講,在通用計算機中往往利用C語(yǔ)言中的標準庫函數malloc()、realloc()和free()來(lái)實(shí)現對存儲空間的分配和管理,但這種方式對于一般的大容量測試系統并不合適。

  假設在前文所述的大容量測試系統中,系統采用16位地址的單片機,利用分頁(yè)存儲模式對512KB掉電保護存儲器進(jìn)行訪(fǎng)問(wèn)。將存儲器分為16個(gè)頁(yè)面(00H~0FH),每個(gè)頁(yè)面地址為0000H~7FFFFH,共計32KB。此時(shí)系統利用malloc()可以在未被使用的空間中開(kāi)辟一段存儲空間,但是該函數返回的地址指針是隨機的,有可能將空間分配在系統無(wú)法識別的區間(如7FFFH~FFFFH),因此不能滿(mǎn)足需要。另外,由于系統中存儲器具有掉電保護功能,CPU在重新上電后將無(wú)法識別已保存測試數據的存儲空間,從而使malloc()函數失去意義。因此,還是以數據引導表為基礎來(lái)建立存儲空間的管理函數。其具體功能的實(shí)現都依賴(lài)于函數對數據引導表中各個(gè)記錄的操作,程序如下:  

  void *m_alloc(uintsize,ucharpage)//開(kāi)辟存儲空間的函數
  void *m_free(voidxdata*p_free,ucharpage)//釋放已開(kāi)辟存儲空間的函數
  void *re_alloc(voidxdata*p_re,uintsize,ucharpage)//重新開(kāi)辟存儲空間的函數

  以m_alloc()函數為例,其程序流程圖如圖2所示。



圖2 開(kāi)辟存儲空間函數m_alloc()的程序流程

  當系統需要為某一結點(diǎn)開(kāi)辟存儲空間時(shí),首先給出指定的存儲空間頁(yè)面page和需要開(kāi)辟空間的長(cháng)度size,然后通過(guò)m_alloc()函數在相應頁(yè)面的引導表內查詢(xún)是否有合適的存儲空間。由于引導表中每個(gè)記錄都代表一段已被分配的連續的地址區間,因此m_alloc()函數會(huì )從第一個(gè)記錄開(kāi)始判斷每?jì)蓚€(gè)相鄰記錄之間未被分配空間的長(cháng)度是否滿(mǎn)足系統的需要。當有一對記錄滿(mǎn)足條件時(shí),m_alloc()函數會(huì )返回該段未被分配存儲空間的首地址(即前一個(gè)記錄的末地址)指針,同時(shí)在這兩個(gè)記錄中間插入此次開(kāi)辟空間段的新記錄。如果該頁(yè)面引導表的所有記錄都不滿(mǎn)足條件,則m_alloc()函數返回空指針。re_alloc()函數和m_free()函數分別完成重新分配指定首地址的一段存儲空間和刪除指定首地址的一段存儲空間的操作。其功能和用法與m_alloc()類(lèi)似,不再贅述。

  鏈式存儲結構和存儲管理系統在實(shí)際操作中的應用

  利用上文所述的存儲管理系統可以實(shí)現在大容量測試系統中應用鏈式存儲結構,這樣做的好處在于能夠有效地簡(jiǎn)化系統存儲數據的過(guò)程,有利于執行多項指令操作,提高系統存儲空間的利用率。

  SF6密度繼電器校驗系統

  如圖3所示,SF6密度繼電器校驗系統由51系列單片機、512KB掉電保護存儲器、打印機、時(shí)鐘系統和LCD組成,配有高精度的數字式壓力傳感器和溫度傳感器,可以通過(guò)485總線(xiàn)與上位機通信。該系統能夠對不同類(lèi)型的密度繼電器進(jìn)行校驗,滿(mǎn)足各種額定參數和接點(diǎn)數目的需要,在校驗過(guò)程中實(shí)現實(shí)時(shí)顯示、打印數據等多項功能;對同一繼電器能夠保存多組校驗數據,最多可保存4000多條校驗數據;對于所有的校驗記錄,都可以隨時(shí)進(jìn)行查詢(xún);另外,在與上位機進(jìn)行通信時(shí),有相應的上位機軟件對下位機系統進(jìn)行的數據傳輸、存儲器空間查詢(xún)和數據刪除等操作。



圖3 SF6密度繼電器校驗系統結構框圖

  具體來(lái)講,SF6密度繼電器校驗系統以SF6密度繼電器作為校驗對象,校驗結果包含SF6氣體的壓力值和溫度值,因此將每個(gè)校驗對象的校驗結果抽象為一個(gè)數據元素,分別包括該校驗對象的測試信息(如測試日期,繼電器的測試序號、接點(diǎn)數目和額定參數信息)和一組或多組的測量值信息(如校驗次數、報警、閉鎖1、閉鎖2、超壓接點(diǎn)分別動(dòng)作、返回時(shí)的壓力值和溫度值)。系統以每個(gè)數據元素為結點(diǎn)建立鏈式存儲結構,并通過(guò)上述的管理存儲系統來(lái)管理存儲空間的分配,這樣既能保證有效、合理地保存校驗數據,又能很好地實(shí)現數據查詢(xún)、數據刪除以及與上位機通信等操作,使系統的運行更加高效可靠。

  非線(xiàn)性邏輯結構的自動(dòng)測試系統

  當自動(dòng)測試系統面臨非線(xiàn)性邏輯結構的數據元素時(shí),必須要采取非順序存儲結構來(lái)保存數據,此時(shí)可以考慮鏈式存儲結構,或者索引存儲結構以及二叉樹(shù)等各種非順序存儲結構,但前提條件都是要有一套專(zhuān)門(mén)的存儲管理系統來(lái)支持。

  有了上述的存儲管理系統作基礎,各種非順序存儲結構的應用就成為可能。在設計系統時(shí)充分權衡存儲空間的利用率和算法所耗費的時(shí)間,就能夠有針對性地應用多種存儲結構并設計出相應的算法,以滿(mǎn)足各種測試對象和測試環(huán)境的要求。

  結語(yǔ)

  以鏈式結構的形式保存數據和通過(guò)數據引導表來(lái)管理存儲空間,是應用于大容量單片機測試系統的一種新的數據保存和管理方式。

  這種存儲方式既適用于線(xiàn)性邏輯結構測試系統,也適用于非線(xiàn)性邏輯結構測試系統,總體上使得單片機系統在處理多項復雜數據并進(jìn)行反復保存、查詢(xún)和刪除等操作時(shí)更加快捷簡(jiǎn)便,提高了對有限容量存儲空間的利用率;同時(shí),結構化的使得系統的維護和升級更加輕松,實(shí)現了系統的結構化管理。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>