位置:51电子网 » 技术资料 » 模拟技术

在MATLAB环境下实现对硬件资源的访问

发布时间:2008/5/27 0:00:00 访问次数:719

作者:北京航空航天大学(100083) 李传日 齐 华 袁宏杰

来源:《电子技术应用》

在matlab环境下实现对硬件资源的访问 摘要:在matlab环境下对硬件资源如i/o端口或存储单元进行访问的方法进行讨论,通过mex程序的设计,matlab可以访问硬件资源,与硬件进行数据交换,也可以在外部程序中调用matlab的函数。在mex程序中需要将matlab下的数据格式进行转换为c语言可以处理的数据类型。最后,结合应用实例说明mex程序的设计。 关键词:硬件资源 访问 matlab mex程序

matlab语言是一种高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。尽管matlab本身的编程和数据处理的环境是完整的和自成体系的,可经常在这种环境下,仍有必要与外部的程序和数据进行通讯和数据交换,如需要控制数据采集板的硬件,读取采集后存于数据缓存区的数据等;为此它提供了应用程序接口(api)函数来支持这样的操作,这样可以利用该函数来访问硬件资源。matlab环境提供了mex-文件,利用该文件可以调用用户自己的c语言或fortran语言程序,就像调用内部函数一样方便,这些程序是matlab编译器自身可以加载和运行的动态连接子程序库。本文主要就如何利用mex文件实现在windows环境下对数据采集硬件资源的控制和访问。

1 windows环境下对硬件资源的访问

我们有时可能需要在matlab下直接操作i/o端口,或者自己设计了专用的数据采集硬件设备并在matlab下使用,希望能够访问这些硬件资源。由于matlab是在windows环境下运行,要在它的环境下实现对硬件资源(如i/o端口或存储单元)的访问,就有必要了解windows下对硬件进行操作的原理。

在windows中,操作系统对i/o端口进行保护,它将检查是否允许当前程序对这个端口进行操作,如果允许,操作系统就代为执行i/o指令;否则,操作系统就会采取相应处理步骤,要么中止该程序,要么向用户报警。

在windows中,真正的核心是vmm(虚拟机管理器)和vxd(虚拟设备驱动程序),它们工作在特权级0上,控制着整个系统的运转。正是vmm和vxd一起负责管理i/o端口操作。系统正常运转后,如果应用程序执行了1条i/o指令, vmm接收到这个消息后,它将调用曾申请截获该端口的vxd 提供的处理函数。此时vxd可能会根据程序的需要选择采取以下四种动作之一:忽略这条i/o指令;仿真执行i/o指令;局部解除对该端口截获;代替应用程序执行i/o指令。如果i/o端口被保护,则应用程序需要利用vxd程序进行访问,否则应用程序可以直接进行访问。系统初始化完毕后,没有vxds申请要截获的i/o端口对应用程序来说就是可直接使用input/output指令进行访问。

对内存单元的访问要复杂一些,一般情况下硬件使用的是物理地址如d800:0。而在windows中,内存采用平板模式,利用分页式的内寸管理方案,即内存段起始地址为0,而偏移地址是线性地址,这样要访问实际的物理地址,就要先将物理地址变换为线性地址,而后利用指针对线性地址进行操作,就如同对其它内存单元进行操作一样。在windows中,可以调用sdk中的mapphystolinear服务函数将物理地址转换为线性地址,也可以利用现有的vxd程序进行转换,如使用vtoolsd公司的mapdev.vxd。

2 matlab环境下mex程序的设计

mex程序提供了matlab和外部应用程序(如c语言程序)的接口,它自身包含两部分代码:(1)执行外部程序中的计算和输入/输出命令的程序

作者:北京航空航天大学(100083) 李传日 齐 华 袁宏杰

来源:《电子技术应用》

在matlab环境下实现对硬件资源的访问 摘要:在matlab环境下对硬件资源如i/o端口或存储单元进行访问的方法进行讨论,通过mex程序的设计,matlab可以访问硬件资源,与硬件进行数据交换,也可以在外部程序中调用matlab的函数。在mex程序中需要将matlab下的数据格式进行转换为c语言可以处理的数据类型。最后,结合应用实例说明mex程序的设计。 关键词:硬件资源 访问 matlab mex程序

matlab语言是一种高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。尽管matlab本身的编程和数据处理的环境是完整的和自成体系的,可经常在这种环境下,仍有必要与外部的程序和数据进行通讯和数据交换,如需要控制数据采集板的硬件,读取采集后存于数据缓存区的数据等;为此它提供了应用程序接口(api)函数来支持这样的操作,这样可以利用该函数来访问硬件资源。matlab环境提供了mex-文件,利用该文件可以调用用户自己的c语言或fortran语言程序,就像调用内部函数一样方便,这些程序是matlab编译器自身可以加载和运行的动态连接子程序库。本文主要就如何利用mex文件实现在windows环境下对数据采集硬件资源的控制和访问。

1 windows环境下对硬件资源的访问

我们有时可能需要在matlab下直接操作i/o端口,或者自己设计了专用的数据采集硬件设备并在matlab下使用,希望能够访问这些硬件资源。由于matlab是在windows环境下运行,要在它的环境下实现对硬件资源(如i/o端口或存储单元)的访问,就有必要了解windows下对硬件进行操作的原理。

在windows中,操作系统对i/o端口进行保护,它将检查是否允许当前程序对这个端口进行操作,如果允许,操作系统就代为执行i/o指令;否则,操作系统就会采取相应处理步骤,要么中止该程序,要么向用户报警。

在windows中,真正的核心是vmm(虚拟机管理器)和vxd(虚拟设备驱动程序),它们工作在特权级0上,控制着整个系统的运转。正是vmm和vxd一起负责管理i/o端口操作。系统正常运转后,如果应用程序执行了1条i/o指令, vmm接收到这个消息后,它将调用曾申请截获该端口的vxd 提供的处理函数。此时vxd可能会根据程序的需要选择采取以下四种动作之一:忽略这条i/o指令;仿真执行i/o指令;局部解除对该端口截获;代替应用程序执行i/o指令。如果i/o端口被保护,则应用程序需要利用vxd程序进行访问,否则应用程序可以直接进行访问。系统初始化完毕后,没有vxds申请要截获的i/o端口对应用程序来说就是可直接使用input/output指令进行访问。

对内存单元的访问要复杂一些,一般情况下硬件使用的是物理地址如d800:0。而在windows中,内存采用平板模式,利用分页式的内寸管理方案,即内存段起始地址为0,而偏移地址是线性地址,这样要访问实际的物理地址,就要先将物理地址变换为线性地址,而后利用指针对线性地址进行操作,就如同对其它内存单元进行操作一样。在windows中,可以调用sdk中的mapphystolinear服务函数将物理地址转换为线性地址,也可以利用现有的vxd程序进行转换,如使用vtoolsd公司的mapdev.vxd。

2 matlab环境下mex程序的设计

mex程序提供了matlab和外部应用程序(如c语言程序)的接口,它自身包含两部分代码:(1)执行外部程序中的计算和输入/输出命令的程序

相关IC型号

热门点击

 

推荐技术资料

泰克新发布的DSA830
   泰克新发布的DSA8300在一台仪器中同时实现时域和频域分析,DS... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!