擴展內(nèi)存(XMS)技術(shù)及其在數(shù)控軟件中應(yīng)用
點擊:1584
A+ A-
所屬頻道:新聞中心
PC機及兼容機內(nèi)存通常包括基本內(nèi)存(640K)和擴展內(nèi)存(XMS),擴展內(nèi)存(XMS)可以通過EMM386.EXE仿真為擴充內(nèi)存(EMS),擴展內(nèi)存通常是指1M尋址之外內(nèi)存,在擴展內(nèi)存規(guī)范中。擴展內(nèi)存也包括高端內(nèi)存區(qū)(HMA)和上位內(nèi)存塊(UMB)?;贒OS下應(yīng)用程序開發(fā),通常是在實模式下運行,只能使用基本內(nèi)存640K范圍以內(nèi),有些數(shù)控軟件,如工程計算,設(shè)計分析,圖形信息處理等都涉及到大量數(shù)據(jù)計算及中間過程,如果只有640K內(nèi)存無法滿足需要;如果將文件保存到硬盤,再從硬盤調(diào)用,顯然速度太慢,效率低。由于數(shù)控系統(tǒng)要求實時控制,所以,一般在DoS實模式下開發(fā)。如果只用常規(guī)內(nèi)存,除了DOS操作系統(tǒng),數(shù)控系統(tǒng)數(shù)控軟件本身等以外,剩下的內(nèi)存只有500K左右,一次可以容納的數(shù)控加工代碼非常有限,而在數(shù)控加工中心上加工三維曲面,其加工代碼一般為幾兆基至幾十兆字節(jié),目前解決的辦法是用一臺PC機作主機和數(shù)控系統(tǒng)之間通過RS-232串行口相連,做DNC傳輸控制。數(shù)控系統(tǒng)一邊接收PC機傳來的NC代碼存入內(nèi)存緩沖區(qū),一邊控制機床運動,通過內(nèi)存緩沖區(qū)的不斷刷新來實現(xiàn)大程序量的NC代碼的加工。這樣,需要有另外一臺PC機專門為它服務(wù),浪費資源,同時,傳輸過程中容易產(chǎn)生錯誤或傳輸中斷,使得加工過程不可靠。為此本文開發(fā)了一個完整的在DOS實模式下調(diào)用擴展內(nèi)存(XMS)進行存取數(shù)據(jù)的程序模塊,同時提供了調(diào)用接口,該模塊使用C語言和嵌套匯編語言混合編程,將此模塊加入到數(shù)控系統(tǒng)數(shù)控軟件中。這樣在數(shù)控系統(tǒng)數(shù)控軟件中就可以直接處理大程序量的NC代碼了。另外,在系統(tǒng)數(shù)控軟件界面設(shè)計、圖形顯示、屏幕保護、內(nèi)存緩沖等方面都可以使用擴展內(nèi)存,以提高運行速度,特別是多屏幕之間切換需要占用大內(nèi)存時,Ⅺ瞞的使用尤為重要。
1 數(shù)控軟件功能模塊分析
擴展內(nèi)存是通過專用XMS驅(qū)動程序?qū)崿F(xiàn),它是HIMEM.SYS程序中一個子模塊,它的使用要求計算機在啟動配置文件config.sys中有device=himem.sys這一句oXMS驅(qū)動程序提供五組功能:驅(qū)動程序信息,HMA管理,A20線管理,擴展內(nèi)存管理和上位存儲區(qū)管理,另外兩個功能是檢查XMS驅(qū)動程序是否存在和XMS驅(qū)動程序控制地址。后面的源程序主要完成以下幾個功能:
(1)int XMS-test(void)測試擴展內(nèi)存是否存在,如不存在則退出;如存在調(diào)用int 2fh中斷并取得XMS驅(qū)動程序入口偏移地址,并存入函數(shù)變量XMS-control中,以供數(shù)據(jù)移動時調(diào)用。
(2)int XMS-avail(void)返回擴展內(nèi)存中最大自由塊大小,并存入變量TotalFreeMemory中。
(3)int XMS-anoc(int KSize)申請擴展內(nèi)存,申請大小為KSize。單位為K字節(jié),如果申請成功。返回句柄為handle。
(4)int INIT(void)用戶開發(fā)程序在使用擴展內(nèi)存之前,只要調(diào)用這一個模塊進行初始化就可,它實際上是連續(xù)調(diào)用上面(1),(2),(3)三個模塊。
(5)int MoveXMS(10ng int source-addr,long int dest-addr,int source-handle,int desthandle,long int sk)
本功能不僅可把數(shù)據(jù)塊在常規(guī)內(nèi)存區(qū)和擴展內(nèi)存問移動,也可把塊在常規(guī)內(nèi)存內(nèi)部或擴展內(nèi)存內(nèi)部移動。用戶開發(fā)程序使用擴展內(nèi)存存取數(shù)據(jù)主要使用這一個模塊就可。80urce-addr為32位源偏移地址值。dest-addr為32位目的偏移地址值。source-handle為源塊句柄。dest.handle為目的塊旬柄,Count為需傳送的32位字節(jié)長度,但長度必須為偶數(shù),否則會出錯。如果為常規(guī)內(nèi)存,貝0對應(yīng)的句柄值為O,對應(yīng)的偏移值為緩沖區(qū)內(nèi)數(shù)據(jù)塊頭指針值。
(6)int FreeXMS(int handle)釋放句柄為handle部分擴展內(nèi)存。
2 返回錯誤代碼
所有調(diào)用返回寄存器相同,AX為狀態(tài)寄存器,如果AX等于0000H,調(diào)用失??;如果AX等于o001H,調(diào)用成功。3 各模塊源程序清單
4 結(jié)束語
該源程序全部上機調(diào)試通過。并應(yīng)用在數(shù)控系統(tǒng)軟件和某建筑工程結(jié)構(gòu)設(shè)計數(shù)控軟件中,都取得良好效果,由于突破了DOs實模式下常規(guī)640K內(nèi)存的限制。使得軟件性能大大提高。
(審核編輯: 智匯胡妮)
分享