在MATLAB环境中调用DLL对硬件资源访问的方法

2013-07-30 14:46:24来源: 电子设计工程 关键字:MATLAB  动态链接库  硬件访问  数据采集

    MATLAB是美国MathWorks公司开发的高性能的科学与工程计算软件,凭借其强大的科学计算和绘图功能、大量稳定可靠的算法库和简洁高效的编程语言,被科技工作者们广泛应用于自动控制、数学运算信号分析、图像处理等各行各业。尽管MATLAB本身是一个完整的、自成体系的编程和数据处理环境,但由于语言的特性使其访问硬件的能力相对较差,这在一定程度上限制了它的使用。对于那些涉及复杂算法同时又需要对硬件资源进行访问的系统,一般的做法是在一个通用的编程平台(如Visual C++、Visual Basic、Delphi等)上实现对硬件资源的访问,而后调用MATLAB算法对数据进行处理。这种方法优点是通用性好,程序运行效率高,适用大多数场合,但对开发人员编程能力有较高要求,开发周期较长。在一些需要快速的验证模型和算法的场合,为充分发挥MATLAB强大的数值计算能力,以MATLAB作为主开发平台来得更为合适。随着模块化的设计思想在越来越多的产品中得到体现,器件生产厂商们一般都会提供该产品的二次开发函数库,方便了开发者们对硬件操作的同时,也使得MATLAB通过外部程序接口实现对硬件的访问成为可能。
    文中具体论述一种基于动态链接库调用实现MATLAB访问一般硬件的方法,并将该方法用于对高精度气压传感器MS5803的数据采集,实现了MATLAB与硬件的无缝结合,极大的方便了数据的后续处理。

1 动态链接库
   
在具体阐述MATLAB环境下调用动态链接库函数访问外部硬件之前,有必要对动态链接库做简要介绍。动态链接库英文为Dynamic Linka ble Library,缩写DLL,最初是为了解决代码共享的问题而提出的.通俗的理解可以把DLL看成一种仓库,它提供一些可以直接拿来使用的变量、函数或类。动态链接库可以使用不同编程语言来编写,只要符合标准即可。为了加深对动态链接库函数调用的理解,下面以C/C++语言为例简要介绍动态链接库的编写步骤。首先介绍两组关键字
    1)_declspec(dllimport)
    这组关键字表示从DLL中导入函数或者数据,一般用在DLL对应的头文件中。
    2)_declspec(dllexport)
    这组关键字表示从DLL中导出函数或者数据,一般用在DLL对应的工程文件中。
    编写动态链接库函数的方法与编写一般函数的方法基本相同,只不过要对库中的可导出函数进行必要的申明。下面以VC环境下一个最简单的DLL工程dll_test进行说明,工程包含dll_test.h和dll_test.cpp两个文件。
    a.jpg
    编译上述dll_test工程即可得到动态链接库dll_test.dll(在Debug或Release目录下),此动态链接库实现了add和sub函数的功能。在解决一些实际问题过程中,有时会遇到只有DLL而没有与之相对应的头文件的情况,而MATLAB在调用DLL文件中的函数之前,必须具备头文件中的函数声明才行,这样根据上述DLL的编写规范可以很容易的编写出与所调用的DLL相对应的头文件。

2 MATLAB调用C/C++动态链接库
   
从Matlab6.5(R13)起,Matlab提供了对动态连接库DLL文件的接口。利用这个接口,可以在Matlab中调用动态连接库导出的函数。MAT LAB加载和使用动态链接库函数仅通过7~8个函数就可以实现,只要掌握这些函数的使用方法,就掌握了加载和应用动态链接的基本方法,从而可以在MATLAB平台下轻松实现对硬件的访问。
    利用MATLAB共享库接口实现对外部DLL库的调用主要有以下几个步骤。
    1)加栽动态链接库文件
在使用动态链接库之前,必须将所需的动态链接库加载到MATLAB工作空间中,之后MATLAB才能调用动态库中的函数。函数lodalibrary用于加载动态链接库,其使用语法如下:
    loadlibrary(‘shdib’,‘hfile’)
    loadlibrary函数有两个输入参数,参数shrlib表示库文件的名称,参数hfile为对应库的C语言头文件,C语言的头文件用于向MATLAB提供基本的函数说明。下面以一示例说明loadlibrary的用法,在命令提示窗口中输入如下命令:
    >>loadlibrary(‘dll_test’,‘dll_test.h’)        (1)
    通过以上命令即将dll_test.dll加载到MATLAB工作空间中。
    2)浏览动态库中的函数
    成功加载动态链接库后便可调用库中提供的函数。与函数使用类似,在调用函数之前首先要明确函数各输入输出参数的含义及数据类型。一般情况下动态库编写者会提供相应函数的帮助文档,以便用户理解函数的含义并对其进行调用。动态链接库大多使用C或者C++语言编写,然而标准的C或C++数据类型与MATLAB所使用的数据类型不尽相同,因此调用函数前首先要弄清被调用函数参数对应于MATLAB环境下的数据类型。使用函数libfunctions可在MATLAB环境下查看动态库中函数的声明,并将原C函数中参数类型以对应MATLAB参数类型显示,之后便能正确的按照MATLAB语法规则进行调用。libfunctions用法如下:
    libfunctions(‘libname’,‘-full’)
    参数libname为已加载到MATLAB工作空间的动态库文件名,-full为可选参数用于输出函数的详细说明。
    >>libfunctions(‘dll_test’,‘-full’)              (2)
    输入语句(2)后命令行中会显示所有dll_test库中的函数,如下:
    Functions in library dll_test:
    int32 add(int32,int32)
    int32 sub(int32,int32)
    3)调用动态库中的导出函数
    明确了动态库中函数的参数类型后,便可利用MATLAB提供的calllib接口函数对库中函数进行调用。calllib函数使用方法如下:
    [x1,…,xN]=calllib(‘libname’,‘funcname’,arg1,…,argN)
    参数libname表示被调用函数所在的库文件名,funcname为被调用的函数名称,arg1,…,argN为函数funename的输入参数,x1,…,xN为函数funcname的返回值。以下为dll_test.dll中add函数的调用示例:
    >>calllib(‘dll_test’,‘add’,1,2)
    ans=
       3
    4)卸载动态链接库
    当不再需要对动态库中的函数进行访问后,应及时将动态库从MATLAB工作空间中卸载。与加载动态库类似MATLAB也提供对应的卸载动态库的命令unloadlibrary,例如:
    >>unloadlibrary(‘dll_test’)
    通过以上4步便可实现在MATLAB环境下对动态链接库导出函数的调用。在实际应用中通过调用硬件商提供的动态链接库或者将其提供的API函数编译为动态链接库,便可实现在MATLAB平台下实现对硬件资源的访问。

[1] [2]

关键字:MATLAB  动态链接库  硬件访问  数据采集

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2013/0730/article_7605.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:泰克公司宣布在中国成都设立新校准实验室
下一篇:基于过零点检测的高分辨率DAC静态测试方法研究

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
MATLAB
动态链接库
硬件访问
数据采集

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved