LABVIEW的深入探索之LABVIEW能否读写物理内存
扫描二维码
随时随地手机看文章
熟悉LABVIEW的朋友们都知道,LABVIEW提供了类似于汇编语言的IN OUT指令,可以直接操作计算机端口,这在一般编程语言中是禁止的, 体现了LABVIEW强大的硬件操控能力。
除了直接操作端口外,个别情况下我们可能会遇到直接读写物理内存的问题。LABWINDOWS/CVI提供了几个有关物理内存的函数,自然我们可以通过CIN或者DLL,使LABVIEW间接具有操控物理内存的能力,但这不是我们今天要探索的。
下面是CVI支持的IO端口操作函数和有关物理内存操作的函数列表和简单说明。
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
过去一般的做法是把上述的函数封装成DLL或者创建CIN。
如果我们跟踪LV中的端口操作函数,可以发现LV中的IN OUT实际上也是通过调用一个DLL中的函数,从函数名称上也应该是封装了上述的函数。
实际上,这个DLL文件包含了很多函数,只是没有直接向用户敞开,下面是隐藏的函数列表。
从DLL文件名称上看,该DLL文件应该是重新封装的打包DLL..
下面我们探索一下这些隐含的函数是否直接可用,由于直接操控物理内存,使用时要特别注意。看看CVI中ReadFromPhysicalMemory函数的原型定义。
--------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------
经常使用计算机端口操作的朋友们可能经常会在BIOS中查看计算机串口、并口的端口地址。COM1和COM2的地址一般为0X3F8和0X2F8,计算机并口的数据寄存器地址一般为0X378,早期计算机也有0X3BC的情况。这些端口地址在计算机启动后,会直接映射到0X400开始的一段内存空间上。DOS时代可以直接通过DEBUG来查看,下面我们通过读物理内存函数来验证一下这些函数是否可用。
从实验的结果上看,正确返回了0X3F8 0X2F8 0X378,这说明了这些隐含的函数是完全可用的。这些函数使用时必须谨慎,下面给出读物理内存函数的详细配置,以防出现问题。