LABVIEW的深入探索之LABVIEW能否讀寫(xiě)物理內(nèi)存
除了直接操作端口外,個(gè)別情況下我們可能會(huì)遇到直接讀寫(xiě)物理內(nèi)存的問(wèn)題。LABWINDOWS/CVI提供了幾個(gè)有關(guān)物理內(nèi)存的函數(shù),自然我們可以通過(guò)CIN或者DLL,使LABVIEW間接具有操控物理內(nèi)存的能力,但這不是我們今天要探索的。
下面是CVI支持的IO端口操作函數(shù)和有關(guān)物理內(nèi)存操作的函數(shù)列表和簡(jiǎn)單說(shuō)明。
Port IO Input Byte From PortinpInput Word From PortinpwInput Double Word From PortinpdOutput Byte To PortoutpOutput Word To PortoutpwOutput Double Word To Port
outpd
Physical Memory Access Read From Physical MemoryReadFromPhysicalMemoryRead From Physical Memory ExReadFromPhysicalMemoryExWrite To Physical MemoryWriteToPhysicalMemoryWrite To Physical Memory ExWriteToPhysicalMemoryExMap Physical MemoryMapPhysicalMemoryUnmap Physical MemoryUnMapPhysicalMemory
過(guò)去一般的做法是把上述的函數(shù)封裝成DLL或者創(chuàng)建CIN。
如果我們跟蹤LV中的端口操作函數(shù),可以發(fā)現(xiàn)LV中的IN OUT實(shí)際上也是通過(guò)調(diào)用一個(gè)DLL中的函數(shù),從函數(shù)名稱(chēng)上也應(yīng)該是封裝了上述的函數(shù)。
實(shí)際上,這個(gè)DLL文件包含了很多函數(shù),只是沒(méi)有直接向用戶(hù)敞開(kāi),下面是隱藏的函數(shù)列表。
從DLL文件名稱(chēng)上看,該DLL文件應(yīng)該是重新封裝的打包DLL..
下面我們探索一下這些隱含的函數(shù)是否直接可用,由于直接操控物理內(nèi)存,使用時(shí)要特別注意??纯碈VI中ReadFromPhysicalMemory函數(shù)的原型定義。
--------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------
經(jīng)常使用計(jì)算機(jī)端口操作的朋友們可能經(jīng)常會(huì)在BIOS中查看計(jì)算機(jī)串口、并口的端口地址。COM1和COM2的地址一般為0X3F8和0X2F8,計(jì)算機(jī)并口的數(shù)據(jù)寄存器地址一般為0X378,早期計(jì)算機(jī)也有0X3BC的情況。這些端口地址在計(jì)算機(jī)啟動(dòng)后,會(huì)直接映射到0X400開(kāi)始的一段內(nèi)存空間上。DOS時(shí)代可以直接通過(guò)DEBUG來(lái)查看,下面我們通過(guò)讀物理內(nèi)存函數(shù)來(lái)驗(yàn)證一下這些函數(shù)是否可用。
從實(shí)驗(yàn)的結(jié)果上看,正確返回了0X3F8 0X2F8 0X378,這說(shuō)明了這些隱含的函數(shù)是完全可用的。這些函數(shù)使用時(shí)必須謹(jǐn)慎,下面給出讀物理內(nèi)存函數(shù)的詳細(xì)配置,以防出現(xiàn)問(wèn)題。
評(píng)論