温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MATLAB中MEX文件的示例分析

发布时间:2021-12-30 17:32:22 来源:亿速云 阅读:188 作者:小新 栏目:互联网科技

小编给大家分享一下MATLAB中MEX文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

正文:

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[])
  {
  }

MATLAB中MEX文件的示例分析

如果说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)附加进程
MATLAB中MEX文件的示例分析

MATLAB中MEX文件的示例分析

4)在VS中,对程序中设置断点,以便观察过程结果。

在VS中,设置断点的方法,在想要设置断点的代码处,鼠标右键,选择断点。
MATLAB中MEX文件的示例分析

5)在matlab的命令行窗口,运行mex 文件。
运行结果,会如我们所设置的那样,在断点处暂停,因此可以 采用这种方法进行mex文件程序调试。

%matlab 窗口运行结果>> demo_mextest
hello mex world!hello mex world!

MATLAB中MEX文件的示例分析
另外,值得说明的是,在调试过程中,VS和MATLAB是关联的,待代码继续运行结束,才可以再操作matlab,否则,在断点处,MATLAB界面不响应。

以上是“MATLAB中MEX文件的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI