MATLAB调试C代码

MATLAB 调试C代码

1.环境搭建

1.安装 MinGW-w64 编译器

  • 在 MATLAB 主页选项卡的环境部分,点击附加功能 > 获取附加功能
  • 搜索 MinGW 或从功能菜单中选择。

2.设置Matlab的编译应用程序mex和编译器mbuild

Matlab编译应用程序mex的设置:mex -setup
Matlab编译器mbuild的设置:mbuild –setup 

2.编写入口函数与功能函数

​ MEX文件的源文件实际上就是一个C语言源文件, MEX的源文件结构由两部分组成:入口子程序功能子程序
入口子程序起链接C子程序与MATLAB系统的作用,是实现MATLAB与C混合编程所必须的。格式为:

#include “mex.h”   
  
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )  
{  
  
              //C语言代码   
  
}  

​ 入口子程序函数名必须为mexFunction。
​ nlhs (number of left-hand side) 是输出参数的个数,nrhs(number of right-hand side) 是输入参数的个数。例如对于c=add(a,b),有nlhs=1,hrhs=2。
​ prhs[]与plhs[]是指针数组变量,其元素为指向右变量与左变量的指针。
​ 在用户程序中可利用上述指针在C与MATLAB中相互传递数据。MEX函数库里的mexFunction()函数,相当于C语言中的main()函数。MEX源文件没有main(),而是以一个mexFunction()代替。

​ nlhs (number of left-handside) 是输出参数的个数,nrhs (number of right-hand side) 是输入参数的个数。例如对于c=add(a,b),有nlhs=1,hrhs=2。

​ prhs[],就是输入的参数,prhs[0]指向a,prhs[1]指向b,但是注意不能用*(prhs[0])得到a的值。因为 prhs[0]指向的东西的类型是mxArray(参数列表里看出),想把它的值以我们常用的数值形式赋给一个标量(Scalar),得使用 mxGetScalar()函数转化一下:

double a, b;
    a = mxGetScalar(prhs[0]);
    b = mxGetScalar(prhs[1]);

​ plhs对应的输出的内容。plhs[0]这个指针指向输出的第一个参数,就是c=add(a, b)中的c了。记住这个c应该是以mxArray的类型出现的,为了得到mxArray类型的输出量,要使用mxCreateDoubleMatrix()函数,它创建一个指向mxArray类型的指针。

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);

​ 参数(1, 1, mxREAL)定义了对应c的尺寸类型,MATLAB中c是以1×1的实数矩阵形式报保存的。
而使用mxGetPr()函数可以得到plhs[0]指向的mxArray的第一个double类型的指针。

double *c;
c = mxGetPr(plhs[0]);

​ 最后调用add()函数

*c = add(a,b);

功能子程序用于完成一些特定的计算功能或硬件处理功能,由上述的入口子程序调用。如果必要,该程序可与入口子程序合二为一。

引用链接:1.Matlab与C/C++联合编程之从Matlab调用C/C++代码

​ 2.Matlab调用C语言mexFunction入口函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值