重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下MATLAB中MEX文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
杭锦后ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
正文:
1.mex文件简介
mex是matlab executable 的缩写,意思是在matlab中可执行。
通过C或者Fortan语言开发,经过编译,生成的目标文件能够被M语言解释器调用执行。
mex文件的使用和m文件类似,但是优先m文件执行。
2.mex源文件的结构
//mex源文件的结构,标准写法 #include "mex.h"//必须加 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { }
如果说C/C++语言程序设计中的main函数提供了 操作系统和C语言子程序之间的接口。
那么mexFunction 函数的作用就是提供了MATLAB与C/C++子程序之间的接口。
#include “mex.h”//必须加。
mexFunction不是您调用的例程。
而是mexFunction是C中每个MEX函数都需要的网关函数的名称。 调用MEX函数时,MATLAB®查找并加载相同名称的相应MEX函数。
然后,MATLAB在MEX函数中搜索名为mexFunction的符号。 如果找到一个,它将使用mexFunction符号的地址调用MEX函数。
如果MATLAB无法在MEX函数中找到名为mexFunction的例程,则会显示一条错误消息。
4个参数分别用来输出和输入数据:
nlhs 是输出参数个数;
plhs 是输出参数指针;
指向期望的mxArray输出参数的指针数组;
nrhs 是输入参数个数;
prhs 是输入参数指针,
指向mxArray输入参数的指针数组。
不要修改MEX文件中的任何prhs值。,
更改这些只读mxArrays中的数据可能会产生不良的副作用。
注意:
对输出和输入参数的操作都是通过指针的方式进行的。
指向mxArray输入参数的指针数组。 不要修改MEX文件中的任何prhs值。 更改这些只读mxArrays中的数据可能会产生不良的副作用。
3.调试mex文件
对于比较复杂的功能,并且是通过mex文件来实现,在MATLAB环境中调试mex文件就比较麻烦,这时候我们应该结合使用vs(C的开发环境)中进行调试。注:
我自己使用的是VS2017,下文指的vs即默认是vs2017,其他版本使用上稍有差异而已。
举个例子,步骤如下:
1)编写我们的测试文件
// demo_mextest.c#include "mex.h"//必须加void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])//mexFunction标准写法{ printf("hello mex world!\n");mexPrintf("hello mex world!\n");}
2)为了可以在vs中调试mex,进行编译,注意此处多了“-g”
%matlab 窗口运行结果>> mex demo_mextest.c -g 使用 'Microsoft Visual C++ 2017 (C)' 编译。 MEX 已成功完成。
3)附加进程
4)在VS中,对程序中设置断点,以便观察过程结果。
在VS中,设置断点的方法,在想要设置断点的代码处,鼠标右键,选择断点。
5)在matlab的命令行窗口,运行mex 文件。
运行结果,会如我们所设置的那样,在断点处暂停,因此可以 采用这种方法进行mex文件程序调试。
%matlab 窗口运行结果>> demo_mextest hello mex world!hello mex world!
另外,值得说明的是,在调试过程中,VS和MATLAB是关联的,待代码继续运行结束,才可以再操作matlab,否则,在断点处,MATLAB界面不响应。
以上是“MATLAB中MEX文件的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!