MATLAB混合编程.ppt_第1页
MATLAB混合编程.ppt_第2页
MATLAB混合编程.ppt_第3页
MATLAB混合编程.ppt_第4页
MATLAB混合编程.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子科技大学迈瑞创新俱乐部 技术交流主题学习会 MATLAB混合编程技术 报告人:吴强,MATLAB应用程序接口,MATLAB 混合编程的3个例子,1.MAT文件的读写 2.C语言调用MATLAB编译器生成的DLL模块 3.Matlab调用C语言编写的MEX文件,MAT文件的读写,MAT文件由128bytes MAT 文件头和尾随其后的数据单元组成,每个数据单元头部都有一个8字节的标志,表示这个数据单元里有多少数据,以及以什么方式读写这里的数据。一般读写方式有16位、32位、浮点或别的形式。MAT文件的结构如右图,mxArray,MAT文件的读写,MATLAB 提供的用于操作 MAT 文件的

2、API 函数封装于两个标准库文件中:libmat.lib 和 libmx.lib。 前者用于对MAT文件的操作,后者用于对MAT文件中矩阵的操作。这两个库文件对 于不同语言和不同版本的编辑器而有所不同,存放在binwin32相应子文件夹中。此外,在externinclude 中有与前面两个标准库文件对应的.def 文件:libmat.def、libmx.def。 其导出函数的原型位于同一目录下的 mat.h和 matrix.h中,mat.h包含了 MAT文件的创建、 读写等函数的定义; matrix.h包含了MATLAB中基本的数据类型、 矩阵的定义和操作方法。,MAT文件的读写,一个实例小程

3、序,用于将BCI脑电数据CNT格式转变为MAT格式数据,C语言调用MATLAB编译器生成的DLL模块,09年脑电麻醉深度检测项目,C语言调用MATLAB编译器生成的DLL模块,09年脑电麻醉深度检测项目流程图: 信号处理模块:function ADep=AD(EEG,SampleRate),C语言调用MATLAB编译器生成的DLL模块,VC编写的界面调用MATLAB编写的函数function ADep=AD(EEG,SampleRate),C语言调用MATLAB编译器生成的DLL模块,MATLAB编译器的配置,C语言调用MATLAB编译器生成的DLL模块,MATLAB编译器MCC 编译一个C动

4、态库,C语言调用MATLAB编译器生成的DLL模块,MATLAB编译器MCC 编译一个C+动态库 mcc -B cpplib:DatComp DatProcess.m,C语言调用MATLAB编译器生成的DLL模块,MATLAB编译器MCC 编译一个C+动态库 mcc -B cpplib:DatComp DatProcess.m,补充:函数库的简介,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file) (完整复制或提供地址) (1).h与.lib是必

5、须的,dll是运行时需要的。 (2)静态库 只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。 (3)动态库 有两个文件,一个是引入库(.LIB)文件,一个是DLL文件。 引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。,C语言调用MATLAB编译器生成的DLL模块,对 C

6、B的编译器环境进行设置。 在Project-options-directory里面设置include和lib的路径,源代码中加入头文件 Datcomp.h,项目中加入 libmat.lib libmx.lib mclmcrrt.lib 以及 MCC生成的Datcomp.lib,C语言调用MATLAB编译器生成的DLL模块,对 VC的编译器环境进行设置。 在Tool-options-directory里面设置include和lib的路径,项目中加入 libmat.lib libmx.lib mclmcrrt.lib 以及 MCC生成的Datcomp.lib,C语言调用MATLAB编译器生成的DL

7、L模块,Matlab调用C语言编写的MEX文件,MEX文件的源程序由两个部分组成: (1)入口子程序 mexFunction。其作用是在MATLAB系统与被调用的外部子程序间建立通信联系。函数中有四个参数nlhs、plhs、nrhs和prhs。函数原型如下: void mexFunction(int nlhs, mxArray *plhs,int nrhs, const mxArray *prhs) 这里nlhs是输出数据的个数plhs是指向mxArray(MATLAB中所有数据都由mxArray定义)的输出数据的指针nrhs是输人数据的个数,prhs是指向mxArray的输入数据的指针。 (

8、2)用户子程序。包含MEX文件中完成计算功能的程序代码,计算子程序可以是普通的C语言程序按照C语言规则编写即可。计算子程序由入口子程序调用。,Matlab生成MEX文件:mex setupmex getname.c生成文件后缀:*.mexw32,MATLAB 混合编程的注意事项,选择合适的MATLAB版本CB 推荐 matlab 2007B,MATLAB 混合编程的注意事项,C语言中使用这种调用形式最好 try MRC_FUNCTION() catch (const mwException MRC版本必须与编译所用的MATLAB匹配 编译时使用不同文件名,且尽量按照MATLAB的文件命名要求,如mcc -B cpplib:DatComp DatProcess.m,MATLAB 混合编程的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论