C语言学习网

MATLAB中MEX文件的示例分析

发表于:2022-08-11 作者:安全数据网编辑
编辑最后更新 2022年08月11日,小编给大家分享一下MATLAB中MEX文件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正文:1.mex文件简介

小编给大家分享一下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[])  {  }

如果说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_mextesthello mex world!hello mex world!


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

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

0