本發(fā)明屬于測量技術(shù)領(lǐng)域,具體涉及一種儀器驅(qū)動模組和儀器驅(qū)動方法。
背景技術(shù):
儀器硬件作為電子信息的獲取裝置,發(fā)揮著重要的作用。傳統(tǒng)的測試行業(yè)中,通常是將儀器硬件與待測對象連接,通過手動調(diào)節(jié)儀器硬件的測試項目實現(xiàn)對待測對象不同參數(shù)的測量。這種測試方式由于受與待測對象連接儀器硬件的限制,當(dāng)需獲取不同的測試參數(shù)時,需相應(yīng)更換不同的儀器硬件,受測試項目單一、且難以匯總的影響,大大降低了測試人員的測試效率,增加了數(shù)據(jù)綜合比較分析的難度;而且,更換儀器硬件后,即使設(shè)定相同的測試參數(shù),畢竟多項測試數(shù)據(jù)不是同時測量獲得的,難免出現(xiàn)數(shù)據(jù)精準(zhǔn)度有偏頗的情況。
隨著技術(shù)的進(jìn)步,在當(dāng)今的測試系統(tǒng)中,出現(xiàn)了采用計算機(jī)同時連接多臺儀器硬件對同一待測對象進(jìn)行測試的方式,這種集成式的測試方式使得數(shù)據(jù)的匯總和分析更為便捷和全面,大大提高了測試人員的測試效率,提高了數(shù)據(jù)分析的綜合度和精準(zhǔn)度。
在集成測試方式中,最為重要的組件之一便是儀器驅(qū)動。儀器驅(qū)動安裝在計算機(jī)中,處于應(yīng)用程序和i/o驅(qū)動之間,在測試系統(tǒng)中實現(xiàn)了應(yīng)用程序與儀器硬件的交流與控制。測試人員利用應(yīng)用程序查詢和設(shè)置,通過i/o驅(qū)動實現(xiàn)對儀器硬件的訪問。
對于pxi(pciextensionsforinstrumentation,面向儀器系統(tǒng)的pci擴(kuò)展)等儀器總線一般是基于對儀器硬件的寄存器的操作來實現(xiàn)對儀器硬件的控制,儀器硬件根據(jù)內(nèi)部功能的復(fù)雜程度不同會提供數(shù)十或數(shù)百個寄存器,每個寄存器中具有多個數(shù)字位,不同的位對儀器的不同部件功能進(jìn)行控制。實際應(yīng)用中,i/o驅(qū)動一般只能對單個寄存器整體進(jìn)行操作,而不能單獨對其中的一位進(jìn)行操作,因此,對儀器功能進(jìn)行配置時,首先要將涉及到的寄存器先讀回,修改其中對應(yīng)的位,然后再整體寫入。很多儀器功能的一次設(shè)置都涉及到很多寄存器的不同位的操作,就需要頻繁的進(jìn)行儀器硬件訪問,效率低。同時,如果具體應(yīng)用是對相同種類的多個硬件設(shè)備在一個控制臺程序上進(jìn)行控制時,控制臺的切換需要不停的從儀器硬件中讀取當(dāng)前控制硬件的所有寄存器內(nèi)容,會造成巨大的通信的浪費,造成性能的損失。
可見,設(shè)計一種能對儀器硬件實現(xiàn)快速訪問和設(shè)置的儀器驅(qū)動框架成為目前亟待解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)中存在的上述不足,提供一種儀器驅(qū)動模組和儀器驅(qū)動方法,實現(xiàn)了應(yīng)用程序?qū)x器硬件的快速訪問和設(shè)置,大大提升了儀器驅(qū)動的性能。
解決本發(fā)明技術(shù)問題所采用的技術(shù)方案是該儀器驅(qū)動模組,用于為應(yīng)用程序?qū)x器硬件提供狀態(tài)查詢或功能配置,其包括儀器組件驅(qū)動模塊、緩存管理模塊和寄存器訪問模塊,其中:
所述儀器組件驅(qū)動模塊,與所述緩存管理模塊連接,用于接收所述應(yīng)用程序?qū)λ鰞x器硬件的狀態(tài)查詢指令或功能配置指令,以及將狀態(tài)查詢指令或功能配置指令轉(zhuǎn)化為所述儀器硬件相應(yīng)的各個儀器組件的操作命令,并將所述操作命令傳送至所述緩存管理模塊;
所述緩存管理模塊,還與所述寄存器訪問模塊連接,所述緩存管理模塊包括至少一個所述儀器硬件對應(yīng)的寄存器狀態(tài)緩存,所述寄存器狀態(tài)緩存能進(jìn)行局部修改,用于根據(jù)所述操作命令將所涉及到的所述寄存器狀態(tài)緩存中的數(shù)據(jù)整體傳輸至所述儀器組件驅(qū)動模塊或所述寄存器訪問模塊;
所述寄存器訪問模塊,能與所述儀器硬件連接,用于獲取所述儀器硬件的硬件寄存器狀態(tài)并傳送至所述緩存管理模塊,或根據(jù)所述緩存管理模塊中的所述寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)對所述儀器硬件執(zhí)行功能配置。
優(yōu)選的是,所述寄存器狀態(tài)緩存中包括多個寄存器數(shù)據(jù),每個所述寄存器數(shù)據(jù)具有多位,每位或多位對應(yīng)所述儀器硬件的一個硬件組件的功能狀態(tài);
所述寄存器數(shù)據(jù)中,一位或多位響應(yīng)并修改所述操作命令對應(yīng)的所述硬件寄存器中部分?jǐn)?shù)據(jù)位的配置,并保持處于同一對應(yīng)所述硬件寄存器中的其他數(shù)據(jù)位不變,經(jīng)過部分?jǐn)?shù)據(jù)位修改的所述寄存器數(shù)據(jù)更新后以整體訪問形式與所述儀器組件驅(qū)動模塊或所述寄存器訪問模塊進(jìn)行信息交互。
優(yōu)選的是,所述儀器組件驅(qū)動模塊包括儀器編程接口單元、儀器組件查詢單元、儀器組件配置單元,其中:
所述儀器編程接口單元,與所述儀器組件配置單元和所述儀器組件查詢單元分別連接,用于為所述應(yīng)用程序提供對所述儀器硬件的功能訪問接口,接收所述應(yīng)用程序的狀態(tài)查詢指令或功能配置指令;
所述儀器組件查詢單元,還與所述緩存管理模塊連接,用于將所述態(tài)查詢指令解析成對不同所述儀器硬件的所述寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或局部數(shù)據(jù)的操作命令,并根據(jù)所述操作命令從所述緩存管理模塊的對應(yīng)的所述寄存器狀態(tài)緩存中得到相應(yīng)儀器組件的狀態(tài)數(shù)據(jù),以便直接返回給所述應(yīng)用程序;
所述儀器組件配置單元,還與所述緩存管理模塊連接,用于將所述功能配置指令解析成對不同所述儀器硬件的所述寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或局部數(shù)據(jù)的操作命令,并根據(jù)所述操作命令從所述緩存管理模塊的所述寄存器狀態(tài)緩存中得到相應(yīng)儀器組件的狀態(tài)數(shù)據(jù),以便對對應(yīng)的所述儀器硬件進(jìn)行配置。
優(yōu)選的是,所述緩存管理模塊包括硬件句柄索引單元,所述硬件句柄索引單元以硬件句柄作為索引標(biāo)識組織所述寄存器狀態(tài)緩存,用于確定所述儀器硬件的硬件寄存器狀態(tài)的當(dāng)前狀態(tài)、確定是否對所述儀器硬件進(jìn)行初始化以及更新對應(yīng)的所述寄存器狀態(tài)緩存,以保持該所述緩存管理模塊中的所述寄存器狀態(tài)緩存與所述硬件寄存器狀態(tài)同步。
優(yōu)選的是,所述儀器組件配置單元還包括寄存器緩存控制塊,所述緩存管理模塊還包括寄存器緩存隊列:
所述寄存器緩存控制塊,用于對所述寄存器緩存隊列進(jìn)行管理和執(zhí)行;
根據(jù)所述操作命令,所述儀器硬件對應(yīng)的所述寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)能形成寄存器副本,更新后的所述寄存器副本組織成所述寄存器緩存隊列,所述寄存器緩存隊列以整體訪問形式與所述寄存器訪問模塊進(jìn)行信息交互。
一種儀器驅(qū)動方法,用于為應(yīng)用程序?qū)x器硬件提供狀態(tài)查詢或功能配置,其采用寄存器狀態(tài)緩存作為所述儀器硬件對應(yīng)的硬件寄存器狀態(tài)中轉(zhuǎn)更新,包括步驟:
接收來自所述應(yīng)用程序的對所述儀器硬件的狀態(tài)查詢指令或功能配置指令,以及將狀態(tài)查詢指令或功能配置指令轉(zhuǎn)化為所述儀器硬件相應(yīng)的各個儀器組件的操作命令;
根據(jù)所述操作指令,將涉及到的所述儀器硬件對應(yīng)的所述寄存器狀態(tài)緩存中的數(shù)據(jù)整體傳輸至所述應(yīng)用程序;或者根據(jù)所述操作指令,將涉及到的所述儀器硬件的對應(yīng)的所述寄存器狀態(tài)緩存中的數(shù)據(jù)整體傳輸至所述儀器硬件。
優(yōu)選的是,提供所述儀器硬件的功能訪問接口,接收所述應(yīng)用程序的狀態(tài)查詢指令或功能配置指令;
將所述狀態(tài)查詢指令解析成對不同所述儀器硬件的所述寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或局部數(shù)據(jù)的操作命令,并根據(jù)所述操作命令得到對應(yīng)儀器組件的狀態(tài)數(shù)據(jù),直接返回給所述應(yīng)用程序;
或者,將所述功能配置指令解析成對不同所述儀器硬件的寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或局部數(shù)據(jù)的操作命令,并根據(jù)操作命令得到對應(yīng)儀器組件的狀態(tài)數(shù)據(jù),對相應(yīng)的所述儀器硬件進(jìn)行配置。
優(yōu)選的是,對相應(yīng)的所述儀器硬件進(jìn)行配置的過程中包括:以硬件句柄作為索引標(biāo)識組織對應(yīng)的硬件寄存器狀態(tài)進(jìn)行緩存,根據(jù)所述儀器硬件對應(yīng)的寄存器狀態(tài)緩存,確定是否對所述儀器硬件進(jìn)行初始化以及更新硬件寄存器狀態(tài),保持所述寄存器狀態(tài)緩存與所述儀器硬件的硬件寄存器狀態(tài)同步。
優(yōu)選的是,保持所述寄存器狀態(tài)緩存與所述儀器硬件的寄存器狀態(tài)同步的過程中:
讀取所述操作命令對應(yīng)的所述儀器硬件相應(yīng)的所述寄存器狀態(tài)緩存,僅對所述操作指令涉及的所述寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)中數(shù)據(jù)位進(jìn)行修改,而保持所述寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)中其他數(shù)據(jù)位值不變;
更新并緩存所述寄存器數(shù)據(jù),將相關(guān)所述寄存器狀態(tài)緩存的寄存器數(shù)據(jù)的完整位以整體訪問方式與所述儀器硬件進(jìn)行信息交互。
優(yōu)選的是,還進(jìn)一步包括:對所述功能配置指令涉及的所述儀器硬件對應(yīng)的所述寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)進(jìn)行隊列管理和執(zhí)行;
根據(jù)所述儀器硬件對應(yīng)的所述寄存器狀態(tài)緩存中的更新后的寄存器數(shù)據(jù)創(chuàng)建寄存器副本,所述寄存器副本形成隊列,以整體訪問形式與所述儀器硬件進(jìn)行信息交互。
本發(fā)明的有益效果是:該儀器驅(qū)動模組及其相應(yīng)的儀器驅(qū)動方法,通過寄存器狀態(tài)緩存進(jìn)行儀器硬件的寄存器狀態(tài)緩存管理,具有如下優(yōu)點:
1.對儀器硬件的配置從現(xiàn)有的對儀器硬件進(jìn)行一次讀操作一次寫操作,減少成對儀器硬件進(jìn)行只需要一次寫操作,性能提升50%;
2.對儀器硬件參數(shù)的讀操作從現(xiàn)有的對儀器硬件進(jìn)行一次讀操作,變成無需訪問儀器硬件,直接從寄存器狀態(tài)緩存中獲取,性能提升巨大;
3.可以增加批量寫儀器硬件標(biāo)記,從而可以讓應(yīng)用程序?qū)τ趦x器硬件的訪問先集中到在寄存器狀態(tài)緩存中更新,之后一次將寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)一次寫入儀器硬件,大大的降低了對于儀器硬件訪問的頻率;
4.保留了多個儀器硬件的寄存器狀態(tài)緩存,這樣即使控制端切換了當(dāng)前激活的儀器硬件,對連接的任何儀器硬件的訪問都不需要重新訪問意見硬件,直接在寄存器狀態(tài)緩存中進(jìn)行;
5.易于實現(xiàn)多個用戶監(jiān)控方式,例如安裝在一臺電腦上的多個應(yīng)用程序,或者多個遠(yuǎn)程的監(jiān)控端對具有該硬件儀器驅(qū)動的服務(wù)器端進(jìn)行儀器狀態(tài)監(jiān)控時,都不需要對底層的物理硬件進(jìn)行訪問,只需要對儀器驅(qū)動模組中的寄存器狀態(tài)緩存進(jìn)行訪問,避免了硬件訪問沖突,也不需要采用資源互鎖的方式避免公共資源同時訪問,提高了效率。
附圖說明
圖1為本發(fā)明實施例中儀器驅(qū)動模組的結(jié)構(gòu)框圖;
圖2為本發(fā)明實施例中儀器驅(qū)動方法的流程圖;
圖3為本發(fā)明實施例中儀器的整體架構(gòu)示意圖;
附圖標(biāo)記中:
1-儀器組件驅(qū)動模塊;11-儀器編程接口單元;12-儀器組件查詢單元;13-儀器組件配置單元;
2-緩存管理模塊;21-硬件句柄索引單元;
3-寄存器訪問模塊;
4-應(yīng)用程序;
5-儀器硬件。
具體實施方式
為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖和具體實施方式對本發(fā)明儀器驅(qū)動模組和儀器驅(qū)動方法作進(jìn)一步詳細(xì)描述。
本實施例提供一種儀器驅(qū)動模組及其相應(yīng)的儀器驅(qū)動方法,通過采用寄存器狀態(tài)緩存結(jié)構(gòu)的儀器驅(qū)動架構(gòu)為儀器硬件提供集成控制功能,該集成控制功能至少包括應(yīng)用程序?qū)x器硬件的狀態(tài)查詢或功能配置,大大提高了儀器驅(qū)動性能。
通常情況下,儀器驅(qū)動可以同時對多個儀器硬件進(jìn)行驅(qū)動,一個儀器硬件有多個寄存器,每個寄存器有很多位,每個或多個位對應(yīng)一個硬件組件的功能。本實施例中的儀器驅(qū)動模組,通過建立與儀器硬件的硬件寄存器對應(yīng)的寄存器狀態(tài)緩存,并通過對寄存器狀態(tài)緩存進(jìn)行緩存中轉(zhuǎn)的管理,避免了應(yīng)用程序與儀器硬件之間頻繁的、直接的數(shù)據(jù)交換,使得應(yīng)用程序?qū)x器硬件的狀態(tài)查詢和功能配置更加高效和快速。
如圖1所示,該儀器驅(qū)動模組包括儀器組件驅(qū)動模塊1、緩存管理模塊2、寄存器訪問模塊3,以下將對各模塊進(jìn)行詳細(xì)說明。
儀器組件驅(qū)動模塊1,與緩存管理模塊2連接,用于接收應(yīng)用程序4對儀器硬件5的狀態(tài)查詢指令或功能配置指令,以及將狀態(tài)查詢指令或功能配置指令轉(zhuǎn)化為儀器硬件5相應(yīng)的各個儀器組件的操作命令,并將操作命令傳送至緩存管理模塊2。
其中,儀器組件驅(qū)動模塊1包括儀器編程接口單元11、儀器組件查詢單元12、儀器組件配置單元13,其中:
儀器編程接口單元11,與儀器組件配置單元13和儀器組件查詢單元12分別連接,用于為應(yīng)用程序4提供對儀器硬件5的功能訪問接口,接收應(yīng)用程序4的狀態(tài)查詢指令或功能配置指令;
儀器組件查詢單元12,還與緩存管理模塊2連接,用于將狀態(tài)查詢指令解析成對不同儀器硬件5的寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或寄存器局部數(shù)據(jù)的操作命令,并根據(jù)操作命令從緩存管理模塊2的對應(yīng)的寄存器狀態(tài)緩存中得到相應(yīng)儀器組件的狀態(tài)數(shù)據(jù),以便直接返回給應(yīng)用程序4;
儀器組件配置單元13,還與緩存管理模塊2連接,用于將功能配置指令解析成對不同儀器硬件5的寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或寄存器局部數(shù)據(jù)的操作命令,并根據(jù)操作命令從緩存管理模塊2的寄存器狀態(tài)緩存中得到相應(yīng)儀器組件的狀態(tài)數(shù)據(jù),以便對對應(yīng)的儀器硬件5進(jìn)行配置。
在上述的儀器組件驅(qū)動模塊1中,儀器編程接口單元11提供所有儀器功能的訪問接口函數(shù),應(yīng)用程序4通過調(diào)用這些驅(qū)動接口來訪問儀器硬件5。儀器組件配置單元13將來自儀器編程接口單元11的指令解析成對不同硬件寄存器的訪問,應(yīng)用程序4借助緩存管理模塊2訪問與儀器硬件5內(nèi)部的硬件寄存器對應(yīng)的寄存器狀態(tài)緩存實現(xiàn)狀態(tài)查詢或功能配置。儀器硬件5的狀態(tài)與緩存管理模塊2中寄存器狀態(tài)緩存中的狀態(tài)保持同步,應(yīng)用程序4對儀器硬件5的狀態(tài)查詢或功能配置通過緩存管理模塊2直接實現(xiàn)。
緩存管理模塊2,還與寄存器訪問模塊3連接,緩存管理模塊2包括至少一個儀器硬件5對應(yīng)的寄存器狀態(tài)緩存,寄存器狀態(tài)緩存能進(jìn)行局部修改,用于根據(jù)操作命令將所涉及到的寄存器狀態(tài)緩存中的數(shù)據(jù)整體傳輸至儀器組件驅(qū)動模塊1或寄存器訪問模塊3,包括:根據(jù)操作命令將所涉及到的儀器硬件5的寄存器狀態(tài)緩存中的數(shù)據(jù)整體經(jīng)儀器組件驅(qū)動模塊1讀取至應(yīng)用程序4,實現(xiàn)讀操作;或者根據(jù)操作指令對涉及到的儀器硬件5的寄存器狀態(tài)緩存中的數(shù)據(jù)進(jìn)行修改,將寄存器狀態(tài)緩存中更新后的寄存器數(shù)據(jù)進(jìn)行緩存,并整體傳輸至寄存器訪問模塊3以配置儀器硬件5,實現(xiàn)寫操作。
其中,一個寄存器狀態(tài)緩存中包括多個寄存器數(shù)據(jù),每個寄存器數(shù)據(jù)具有多位,每位或多位對應(yīng)儀器硬件5的一個硬件組件的功能狀態(tài);寄存器數(shù)據(jù)中,一位或多位響應(yīng)并修改操作命令對應(yīng)的硬件寄存器中部分?jǐn)?shù)據(jù)位的配置,并保持處于同一對應(yīng)硬件寄存器中的其他數(shù)據(jù)位不變,經(jīng)過部分?jǐn)?shù)據(jù)位修改的寄存器數(shù)據(jù)更新后以整體訪問形式與儀器組件驅(qū)動模塊1或寄存器訪問模塊3進(jìn)行信息交互。
緩存管理模塊2作為緩存中轉(zhuǎn)站,實現(xiàn)對儀器硬件5的硬件寄存器狀態(tài)進(jìn)行讀/寫訪問,當(dāng)儀器組件驅(qū)動模塊1要訪問儀器硬件5的時候,并不直接進(jìn)行儀器硬件5訪問,例如在讀操作時:接收應(yīng)用程序4對各個儀器組件的狀態(tài)查詢操作指令,通過緩存管理模塊2查詢對應(yīng)儀器硬件5的寄存器狀態(tài)緩存,根據(jù)操作指令將寄存器緩存中的對應(yīng)數(shù)據(jù)直接讀取至應(yīng)用程序4;例如在寫操作時:接收應(yīng)用程序4對各個儀器組件的功能配置或狀態(tài)配置操作指令,先通過緩存管理模塊2查詢對應(yīng)硬件寄存器的寄存器狀態(tài)緩存中的寄存器數(shù)據(jù),而不需要直接訪問儀器硬件5獲取當(dāng)前硬件寄存器狀態(tài),接著為對應(yīng)的寄存器數(shù)據(jù)建立寄存器副本,將寄存器副本中對應(yīng)著儀器硬件5的局部寄存器數(shù)據(jù)修改為硬件寄存器即將更新的值且并入隊列進(jìn)行緩存,將新的寄存器副本整體傳輸至寄存器訪問模塊3,之后執(zhí)行一次硬件訪問,對相應(yīng)的儀器硬件5的硬件寄存器完成配置操作。
寄存器訪問模塊3,能與儀器硬件5連接,用于獲取儀器硬件5的單個或多個硬件寄存器狀態(tài)并傳送至緩存管理模塊2以獲取硬件寄存器狀態(tài),或根據(jù)緩存管理模塊2中的寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)對儀器硬件5執(zhí)行功能配置。
寄存器訪問模塊3實現(xiàn)對一個個獨立的寄存器進(jìn)行完整位(即某一個寄存器中所有數(shù)位的值)的讀寫操作。當(dāng)應(yīng)用程序4通過儀器組件驅(qū)動模塊1進(jìn)行儀器參數(shù)配置涉及到的是儀器硬件5的一個硬件寄存器的某一位時,由于寄存器狀態(tài)緩存中有該儀器硬件當(dāng)前所有硬件寄存器的最新狀態(tài)值,因此只需要從中取出對應(yīng)寄存器數(shù)據(jù),并修改對應(yīng)的位,之后通過一個i/o驅(qū)動的寫操作就完成了儀器硬件5的配置。
其中,緩存管理模塊2包括硬件句柄索引單元21,硬件句柄索引單元21以硬件句柄作為索引標(biāo)識組織寄存器狀態(tài)緩存,用于確定儀器硬件5的硬件寄存器狀態(tài)的當(dāng)前狀態(tài)、確定是否對儀器硬件5進(jìn)行初始化以及更新對應(yīng)的寄存器狀態(tài)緩存,以保持該緩存管理模塊2中的寄存器狀態(tài)緩存與硬件寄存器狀態(tài)同步。這里的硬件句柄指的是緩存管理模塊2所管理的儀器硬件的唯一編號,該編號可以根據(jù)需求進(jìn)行自定義或系統(tǒng)自動分配。
寄存器狀態(tài)緩存按硬件句柄作為索引組織,當(dāng)需要查詢或配置某個儀器硬件的某個硬件寄存器狀態(tài)時,首先查詢硬件句柄索引單元21中是否保存有該儀器硬件5的硬件句柄,如果存在則之前已經(jīng)完成了對應(yīng)儀器硬件5的初始化,也就是說硬件句柄索引單元21中已經(jīng)包含了對應(yīng)儀器硬件5的所有寄存器狀態(tài)緩存;如果不存在該硬件句柄,此時先執(zhí)行儀器硬件5初始化,也就是將該硬件句柄對應(yīng)的儀器硬件5的所有硬件寄存器狀態(tài)都一次性進(jìn)行讀取,并保存到該儀器硬件5以硬件句柄作為索引的寄存器狀態(tài)緩存中。當(dāng)然,儀器組件驅(qū)動模塊1通過寄存器訪問模塊3成功完成寄存器的寫操作后,也要將新的寄存器數(shù)據(jù)同時更新到對應(yīng)儀器硬件5的寄存器狀態(tài)緩存中,使得寄存器狀態(tài)緩存總是與硬件寄存器狀態(tài)保持同步。
優(yōu)選的是,儀器組件配置單元13還包括寄存器緩存控制塊,緩存管理模塊2還包括寄存器緩存隊列:
寄存器緩存控制塊,用于在執(zhí)行功能配置操作時對緩存管理模塊2中的寄存器緩存隊列進(jìn)行管理和執(zhí)行,包括執(zhí)行隊列的創(chuàng)建、隊列的傳輸及隊列的清空;
根據(jù)操作命令,儀器硬件5對應(yīng)的寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)能形成寄存器副本,更新后的寄存器副本組織成寄存器緩存隊列,寄存器緩存隊列以整體訪問形式與寄存器訪問模塊3進(jìn)行信息交互。
應(yīng)用程序4在開始一次新的單次或批量儀器硬件5配置動作指令前,可先通過儀器組件配置單元13發(fā)送配置開始指令,通知寄存器緩存控制塊發(fā)送開始消息給緩存管理模塊2,緩存管理模塊2創(chuàng)建一個新的寄存器緩存隊列,隨后的應(yīng)用程序4所有配置動作對應(yīng)的硬件寄存器都將創(chuàng)建副本并進(jìn)入寄存器緩存隊列;本次配置動作結(jié)束時,應(yīng)用程序4通過儀器組件配置單元13發(fā)送單次或批量儀器配置動作結(jié)束指令,通知寄存器緩存控制塊發(fā)送結(jié)束消息給緩存管理模塊2,緩存管理模塊2將寄存器緩存隊列中的所有更新后的寄存器副本(寄存器隊列數(shù)據(jù))通過寄存器訪問模塊3一次性寫入儀器硬件5,完成單次或批量儀器硬件5的參數(shù)配置。
這種通過緩存管理模塊中轉(zhuǎn)緩存的方式,在應(yīng)用程序?qū)x器硬件一次性進(jìn)行多項參數(shù)設(shè)置的時候,尤其能突顯優(yōu)勢。例如:在一次測量過程中,需要通過應(yīng)用程序操控其中的一臺頻譜儀(即儀器硬件)進(jìn)行頻率、幅度等多參數(shù)項設(shè)置,此時應(yīng)用程序下發(fā)的功能配置指令經(jīng)過一系列的指令轉(zhuǎn)換后,將對應(yīng)該頻譜儀的寄存器狀態(tài)緩存的對應(yīng)位進(jìn)行修改,當(dāng)所有設(shè)置參數(shù)都設(shè)置完畢后,對應(yīng)該頻譜儀的寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)一次性傳輸?shù)郊拇嫫髟L問模塊,對頻譜儀的硬件寄存器進(jìn)行更新,從而對該頻譜儀進(jìn)行功能配置,應(yīng)用程序和儀器硬件之間僅需一次寫操作即可,大大減少了對儀器硬件的寫操作次數(shù),提高了驅(qū)動訪問性能。
相應(yīng)的,本實施例還提供一種對應(yīng)的儀器驅(qū)動方法,通過建立與儀器硬件的硬件寄存器對應(yīng)的寄存器狀態(tài)緩存中轉(zhuǎn)更新的步驟,并通過對寄存器狀態(tài)緩存的管理或中轉(zhuǎn)更新的管理,避免了應(yīng)用程序與儀器硬件之間頻繁的、直接的數(shù)據(jù)交換,使得應(yīng)用程序?qū)x器硬件的狀態(tài)查詢和功能配置更加高效和快速。
如圖2所示,該儀器驅(qū)動方法包括步驟:
接收來自應(yīng)用程序的對儀器硬件的狀態(tài)查詢指令或功能配置指令,以及將狀態(tài)查詢指令或功能配置指令轉(zhuǎn)化為儀器硬件相應(yīng)的各個儀器組件的操作命令;
根據(jù)操作指令,將涉及到的儀器硬件對應(yīng)的寄存器狀態(tài)緩存中的數(shù)據(jù)整體傳輸至應(yīng)用程序:即將涉及到的寄存器狀態(tài)緩存中的對應(yīng)數(shù)據(jù)整體直接讀取至應(yīng)用程序,從而完成應(yīng)用程序?qū)x器硬件的狀態(tài)查詢;或者根據(jù)操作指令,將涉及到的儀器硬件的對應(yīng)的寄存器狀態(tài)緩存中的數(shù)據(jù)整體傳輸至儀器硬件:即對涉及到的寄存器狀態(tài)緩存中的對應(yīng)數(shù)據(jù)進(jìn)行修改,并將更新后的寄存器數(shù)據(jù)整體緩存,操作結(jié)束后整體寫入儀器硬件,從而完成應(yīng)用程序?qū)x器硬件的功能配置。
其中,接收來自應(yīng)用程序的狀態(tài)查詢指令或功能配置指令,以及將狀態(tài)查詢指令或功能配置指令轉(zhuǎn)化為相應(yīng)的各個儀器組件的操作命令的步驟包括:提供儀器硬件的功能訪問接口,接收應(yīng)用程序的狀態(tài)查詢指令或功能配置指令;
接著,將狀態(tài)查詢指令解析成對不同儀器硬件的寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或局部數(shù)據(jù)的操作命令,并根據(jù)操作命令得到對應(yīng)儀器組件的狀態(tài)數(shù)據(jù),直接返回給應(yīng)用程序;
或者,將功能配置指令解析成對不同儀器硬件的寄存器狀態(tài)緩存的寄存器數(shù)據(jù)或局部數(shù)據(jù)的操作命令,并根據(jù)操作命令得到對應(yīng)儀器組件的狀態(tài)數(shù)據(jù),對相應(yīng)的儀器硬件進(jìn)行配置。
由于寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)與儀器硬件保持同步,因此將寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)直接讀取至應(yīng)用程序即可,應(yīng)用程序?qū)x器硬件的狀態(tài)查詢實現(xiàn)較為簡單。相比之下,應(yīng)用程序?qū)x器硬件的配置實現(xiàn)較為復(fù)雜,因此以下將對功能配置過程進(jìn)行說明。
該儀器驅(qū)動方法中,以硬件句柄作為索引標(biāo)識組織對應(yīng)的硬件寄存器狀態(tài)進(jìn)行緩存,根據(jù)儀器硬件對應(yīng)的寄存器狀態(tài)緩存,確定是否對儀器硬件進(jìn)行初始化以及更新硬件寄存器狀態(tài),保持寄存器狀態(tài)緩存與儀器硬件的硬件寄存器狀態(tài)同步。
對相應(yīng)的儀器硬件進(jìn)行配置的過程中:
讀取操作命令對應(yīng)的儀器硬件相應(yīng)的寄存器狀態(tài)緩存,僅對操作指令涉及的寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)中數(shù)據(jù)位進(jìn)行修改,而保持寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)中其他數(shù)據(jù)位值不變;
更新并緩存寄存器數(shù)據(jù),將相關(guān)寄存器狀態(tài)緩存的寄存器數(shù)據(jù)的完整位以整體訪問方式與儀器硬件進(jìn)行信息交互。
該儀器驅(qū)動方法,還進(jìn)一步細(xì)化的是包括:對功能配置指令涉及的儀器硬件對應(yīng)的寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)進(jìn)行隊列管理和執(zhí)行,包括執(zhí)行隊列的創(chuàng)建、隊列的傳輸及隊列的清空;
根據(jù)儀器硬件對應(yīng)的寄存器狀態(tài)緩存中的更新后的寄存器數(shù)據(jù)創(chuàng)建寄存器副本,寄存器副本形成隊列,以整體訪問形式與儀器硬件進(jìn)行信息交互。
在對操作命令涉及的多個寄存器數(shù)據(jù)進(jìn)行隊列管理時,對儀器硬件對應(yīng)的寄存器狀態(tài)緩存創(chuàng)建寄存器副本,對其中需更新的寄存器數(shù)據(jù)中的數(shù)據(jù)位進(jìn)行修改、并將其他未修改的數(shù)據(jù)位一起更新形成一個寄存器副本,一個或多次寄存器副本形成隊列,將相關(guān)寄存器數(shù)據(jù)的完整位以整體訪問形式與應(yīng)用程序或儀器硬件進(jìn)行信息交互。
上述的儀器驅(qū)動模組和相應(yīng)的儀器驅(qū)動方法,適于在計算設(shè)備中執(zhí)行,并可以以軟件程序指令的方式進(jìn)行存儲,這些指令適于由處理器加載并執(zhí)行完成預(yù)設(shè)功能。
如圖3所示,應(yīng)用程序通常以界面顯示層的形式出現(xiàn),主要進(jìn)行控件的繪制和更新,從而實現(xiàn)顯示和儀器功能的解耦。儀器硬件可以是示波器、頻譜儀、信號發(fā)生器等可進(jìn)行儀器參數(shù)配置和狀態(tài)查詢的儀器。
基于上述的儀器驅(qū)動模組和相應(yīng)的儀器驅(qū)動方法,應(yīng)用程序在狀態(tài)查詢(或者說數(shù)據(jù)查詢)和功能配置的工作過程為:
一、初始化儀器:
應(yīng)用程序查詢系統(tǒng),得到所有儀器硬件各自對應(yīng)的visa地址即虛擬儀器軟件結(jié)構(gòu)地址,儀器硬件的visa地址是唯一的,可用來標(biāo)識不同的硬件設(shè)備;
應(yīng)用程序調(diào)用儀器驅(qū)動實現(xiàn)儀器硬件的初始化,該初始化是通過儀器組件驅(qū)動模塊中的儀器功能編程接口的init初始化調(diào)用實現(xiàn),在init中,查詢應(yīng)用程序傳遞下來的visa地址是否存在,如果存在就創(chuàng)建儀器硬件的硬件句柄(visa地址的代名詞),以后的訪問都使用硬件句柄進(jìn)行。并將硬件句柄保存到緩存管理模塊的硬件句柄索引單元中,以后上層應(yīng)用程序訪問對應(yīng)的儀器硬件,就會先查詢硬件句柄索引單元是否有此句柄;
使用儀器硬件的硬件句柄對儀器硬件參數(shù)進(jìn)行初始化:儀器驅(qū)動通過寄存器訪問模塊,將儀器硬件的所有硬件寄存器狀態(tài)一次性都讀取上來,并將其保存到緩存管理模塊中對應(yīng)的寄存器狀態(tài)緩存中。
應(yīng)用程序根據(jù)其需要獲取的儀器狀態(tài),讀取其涉及的儀器硬件參數(shù),這個過程不再訪問一起儀器硬件,而是通過緩存管理模塊直接讀取寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)實現(xiàn)的。
二、儀器配置過程,即應(yīng)用程序調(diào)用儀器驅(qū)動對儀器硬件的某個參數(shù)進(jìn)行設(shè)置:
1.首先調(diào)用對應(yīng)儀器驅(qū)動的儀器編程接口單元,該儀器編程接口單元會將操作指令傳遞給儀器組件驅(qū)動模塊中對應(yīng)的儀器組件配置單元;
2.儀器組件配置單元首先通過緩存管理模塊查詢硬件句柄索引單元中是否有要操作的對應(yīng)儀器硬件的硬件句柄。如果沒有,則說明儀器硬件還沒有初始化,執(zhí)行上面的初始化動作(其中會將儀器硬件的所有硬件寄存器狀態(tài)都讀取并保存到對應(yīng)寄存器狀態(tài)緩存中);如果硬件句柄已經(jīng)存在,說明寄存器狀態(tài)緩存中已經(jīng)包含儀器硬件的當(dāng)前所有硬件寄存器狀態(tài);
3.在開始一次新的儀器硬件配置過程前,儀器驅(qū)動中的儀器組件配置單元中的寄存器緩存控制塊創(chuàng)建新的寄存器緩存隊列;
4.儀器組件配置單元直接通過緩存管理模塊讀取對應(yīng)寄存器狀態(tài)緩存中相關(guān)的寄存器數(shù)據(jù),并建立寄存器副本,將寄存器副本中需要修改的位進(jìn)行修改,更新后的寄存器副本進(jìn)入寄存器緩存隊列;
如果一次有多個儀器硬件參數(shù)的設(shè)置時,重復(fù)上述1-4步驟,從而寄存器緩存隊列包含一組更新后的寄存器副本。
5.當(dāng)儀器組件驅(qū)動接收到配置結(jié)束指令后,儀器驅(qū)動中的儀器組件驅(qū)動模塊調(diào)用下層的寄存器訪問模塊將修改后的寄存器副本發(fā)送給儀器硬件。如果寫儀器硬件失敗,就報告此次操作錯誤代碼,并清空寄存器緩存隊列;如果寫儀器硬件成功,就將該寄存器副本又通過緩存管理模塊寫回硬件句柄對應(yīng)的寄存器狀態(tài)緩存中,從而保證儀器硬件的寄存器狀態(tài)緩存總是與實際的硬件寄存器狀態(tài)一致。
三、儀器硬件參數(shù)讀取過程,即應(yīng)用程序調(diào)用儀器驅(qū)動對儀器硬件的某個參數(shù)進(jìn)行查詢:
1.首先調(diào)用對應(yīng)儀器驅(qū)動的儀器編程接口單元,該儀器編程接口單元會將操作指令傳遞給儀器組件驅(qū)動模塊中對應(yīng)的儀器組件查詢單元;
2.儀器組件查詢單元首先通過緩存管理模塊查詢硬件句柄索引單元中是否有要操作的對應(yīng)儀器硬件的硬件句柄。如果沒有,則說明儀器硬件還沒有初始化,執(zhí)行上面的初始化動作(其中會將儀器硬件的所有硬件寄存器狀態(tài)都讀取并保存到對應(yīng)寄存器狀態(tài)緩存中);如果硬件句柄已經(jīng)存在,說明寄存器狀態(tài)緩存中已經(jīng)包含儀器硬件的當(dāng)前所有寄存器狀態(tài);
3.儀器組件查詢單元直接通過緩存管理模塊讀取對應(yīng)寄存器狀態(tài)緩存中相關(guān)的寄存器數(shù)據(jù),從對應(yīng)寄存器數(shù)據(jù)中取出對應(yīng)儀器參數(shù)對應(yīng)位的值返回,而不訪問底層儀器硬件。
在現(xiàn)有的儀器驅(qū)動架構(gòu)下,例如一個信號發(fā)生器的儀器驅(qū)動,有一個設(shè)置輸出頻率寄存器,其中包含有選擇信號通道濾波器的開關(guān)控制位,也有是否輸出信號的開關(guān)控制位。如果應(yīng)用程序要關(guān)斷信號輸出,通常的做法是應(yīng)用程序調(diào)用儀器驅(qū)動的設(shè)置信號輸出狀態(tài)函數(shù),在此函數(shù)中調(diào)用i/o驅(qū)動,先從儀器硬件中讀取整個輸出頻率寄存器,修改輸出信號開關(guān)的控制位,然后再整體寫回儀器硬件,完成對儀器硬件的設(shè)置??梢?,一次儀器硬件參數(shù)配置需要至少一次讀硬件操作和一次寫硬件操作。
而使用本實施例中的儀器驅(qū)動模組以及相應(yīng)的儀器驅(qū)動方法,由于總是管理一個與底層硬件寄存器狀態(tài)完全一致的寄存器狀態(tài)緩存,執(zhí)行寫操作時,不需要先從底層硬件中讀對應(yīng)的硬件寄存器狀態(tài),直接從寄存器狀態(tài)緩存中取出對應(yīng)寄存器數(shù)據(jù)的位值,修改之后寫入底層硬件即可,從而可以減少一次讀硬件操作,而僅需要一次寫硬件操作,性能提升了50%。
另外,當(dāng)上層應(yīng)用程序需要讀取儀器的狀態(tài)時,也不需要再對硬件進(jìn)行訪問,直接從寄存器狀態(tài)緩存中獲取,大大提高了系統(tǒng)性能。例如,上層應(yīng)用程序需要對多個相同的儀器進(jìn)行操作,需要不停切換儀器控制界面時,采用本實施例中的儀器驅(qū)動模組和相應(yīng)的儀器驅(qū)動方法,不需要頻繁的訪問硬件i/o并將儀器硬件的所有參數(shù)都更新到應(yīng)用程序中,只需要從寄存器狀態(tài)緩存中讀取對應(yīng)儀器的硬件寄存器的寄存器數(shù)據(jù)就可以了,避免通過i/o的大量的硬件寄存器訪問。
隨著當(dāng)今云技術(shù)的發(fā)展,使得儀器硬件共享和遠(yuǎn)程操控已經(jīng)成為可能,根據(jù)本實施例的儀器驅(qū)動模組和儀器驅(qū)動方法,能更加高效的協(xié)調(diào)遠(yuǎn)程用戶對同一儀器硬件的操控效率,對于多用戶的監(jiān)控系統(tǒng),也降低了多個用戶對于同一個執(zhí)行單元——儀器硬件同時進(jìn)行硬件訪問的概率。例如當(dāng)需要查詢當(dāng)前的儀器狀態(tài),完全不需要訪問儀器硬件,只需要通過緩存管理模塊訪問寄存器狀態(tài)緩存即可。
綜上,該儀器驅(qū)動模組及其相應(yīng)的儀器驅(qū)動方法,通過寄存器狀態(tài)緩存進(jìn)行儀器硬件的寄存器狀態(tài)緩存管理,具有如下優(yōu)點:
1.對儀器硬件的配置從現(xiàn)有的對儀器硬件進(jìn)行一次讀操作一次寫操作,減少成對儀器硬件進(jìn)行只需要一次寫操作,性能提升50%;
2.對儀器硬件參數(shù)的讀操作從現(xiàn)有的對儀器硬件進(jìn)行一次讀操作,變成無需訪問儀器硬件,直接從寄存器狀態(tài)緩存中獲取,性能提升巨大;
3.可以增加批量寫儀器硬件標(biāo)記,從而可以讓應(yīng)用程序?qū)τ趦x器硬件的訪問先集中到在寄存器狀態(tài)緩存中更新,之后一次將寄存器狀態(tài)緩存中的寄存器數(shù)據(jù)一次寫入儀器硬件,大大的降低了對于儀器硬件訪問的頻率;
4.保留了多個儀器硬件的寄存器狀態(tài)緩存,這樣即使控制端切換了當(dāng)前激活的儀器硬件,對連接的任何儀器硬件的訪問都不需要重新訪問意見硬件,直接在寄存器狀態(tài)緩存中進(jìn)行;
5.易于實現(xiàn)多個用戶監(jiān)控方式,例如安裝在一臺電腦上的多個應(yīng)用程序,或者多個遠(yuǎn)程的監(jiān)控端對具有該硬件儀器驅(qū)動的服務(wù)器端進(jìn)行儀器狀態(tài)監(jiān)控時,都不需要對底層的物理硬件進(jìn)行訪問,只需要對儀器驅(qū)動模組中的寄存器狀態(tài)緩存進(jìn)行訪問,避免了硬件訪問沖突,也不需要采用資源互鎖的方式避免公共資源同時訪問,提高了效率。
可以理解的是,以上實施方式僅僅是為了說明本發(fā)明的原理而采用的示例性實施方式,然而本發(fā)明并不局限于此。對于本領(lǐng)域內(nèi)的普通技術(shù)人員而言,在不脫離本發(fā)明的精神和實質(zhì)的情況下,可以做出各種變型和改進(jìn),這些變型和改進(jìn)也視為本發(fā)明的保護(hù)范圍。