#include "mex.h"
/******************************************************************************/
/** main function
* @param[in] nlhs:number of left-hand side(output) plhs: the param of left-hand side(output)
nrhs:number of right-hand side(input) prhs: the param of right-hand side(input)
*
* @return
*
*//*
* History :
* 1.Date : 2020/8/3
* Author :
* Modification : Created function
*******************************************************************************/
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) {
/* input the x y z data */
if (nrhs == 5)
{
}
else
{
mexPrintf("hello");
}
}
matlab中输入mex -g swim_main.c % 暂时编译只使用这个文件即可,每次修改需要重新编译
编译成功:>> mex -g swim_main.c
使用 'MinGW64 Compiler (C)' 编译。
MEX 已成功完成。
若编译不成功,查看代码是否有错误,前提是安装了mex,
setenv('MW_MINGW64_LOC','C:\TDM-GCC-64') % 按安装好后还需要在matlab中运行这句话,配置一下环境
swim_mexFunction.m中编写
swim_main(0,0); % C语言中函数的入口,运行文件
运行swim_main(0,0),会执行C代码;
关于程序的数据和输出,比如在运行函数是[a1,a2,a3,a4]=swim_main(x, y, z, norm,1); % 这种形式nrhs=5,输入的个数; nlhs=4,输出的个数。程序自动识别,不需要指定输入输出个数。
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
float *filter_x, *filter_y, *filter_z;
ACC_DATA_T* XYZ_filtered;
DealSwimData(x, y, z, &XYZ_filtered);
plhs[0] = mxCreateNumericMatrix(1, 1, mxSINGLE_CLASS, mxREAL);
plhs[1] = mxCreateNumericMatrix(1, 1, mxSINGLE_CLASS, mxREAL);
plhs[2] = mxCreateNumericMatrix(1, 1, mxSINGLE_CLASS, mxREAL); /* 后面参数不同,输出数据的类型不同*/
filter_x = mxGetPr(plhs[0]);
filter_y = mxGetPr(plhs[1]);
filter_z = mxGetPr(plhs[2]);
*filter_x = XYZ_filtered->x; //将这三个数据传递出去
*filter_y = XYZ_filtered->y;
*filter_z = XYZ_filtered->z;
}
matlab里面的代码为
for j=1:length(xdata)
[xfilter(j), yfilter(j), zfilter(j)] = swim_main(0,xdata(j),ydata(j),zdata(j)); % C语言中函数的入口,运行文件
end
..