c matlab 混合编程 调试,64位MATLAB和C混合编程以及联合调试

【环境说明】

电脑操作系统:win 7 旗舰版,64位

MATLAB版本:R2013b

VS版本:Microsoft Visual Studio 2010

【操作说明】

1、在原来工程的基础上添加下列内容:

#include "mex.h"

//添加库文件

#pragma comment(lib,"libmx.lib")

#pragma comment(lib,"libmex.lib")

#pragma comment(lib,"libmat.lib")

//下面这个是MATLAB和C进行通信的函数

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{//注意:nrhs代表的是输入变量的多少,而不是一个变量维数的大小//定义一个double类型的数组

unsigned int *outData;double test_data[223];double test_data_out[512];

unsignedint data_in[223];double *real_data_ptr;double *real_data_ptr_out;intloop_XDZ;

unsignedintback_length_my;

outData=chk_alloc(512, sizeof *outData);//初始化分配内存空间的过程

real_data_ptr_out=mxCalloc(514, sizeof(char)); //申请空间

real_data_ptr=mxGetPr(prhs[0]);

plhs[0] = mxCreateDoubleMatrix(1,512,mxREAL); //让第一个输出参数指向一个1*1的矩阵

real_data_ptr_out=mxGetPr(plhs[0]); //获得矩阵的第一个元素的指针

for (loop_XDZ=0;loop_XDZ<223;loop_XDZ++) //循环获取编码之前的数据源

{

test_data[loop_XDZ]=*real_data_ptr++;

data_in[loop_XDZ]=(unsigned int)test_data[loop_XDZ];

}

back_length_my= DCW_LDPCencode_packaged(data_in,outData,223,0);//最后一个参数是控制加扰与否的选项//下面是需要把数据送到外面去

for (loop_XDZ=0;loop_XDZ<511;loop_XDZ++) //循环获取编码之前的数据源

{

test_data_out[loop_XDZ]=(double)outData[loop_XDZ];*real_data_ptr_out++=test_data_out[loop_XDZ];

}return;

}

在上面的函数中,我调用了工程的顶层模块DCW_LDPCencode_packaged,这个模块实现的主要功能是,输入一定长度的数据,输出一定长度的信息。

2、配置VS工程属性

在常规选项卡中,把文件的扩展名设置为.mexw64;

31cc01db7daa7fcb4cc034f9d815d738.png

在VC++目录选项卡当中,更改包含目录为\MATLAB\extern\include文件夹;

在VC++目录选项卡当中,更改库目录为\MATLAB\extern\lib\win64\microsoft;

2a56a99dec496b1c97144b3f9f9a0435.png

在链接器-输入选项卡当中,添加附加依赖项libmat.lib、libeng.lib、libmx.lib、libmex.lib;

在下面的模块定义文件中,设置为test.tdf(这个文件需要自己创建);

d70b5b1ac63a12dd6496391dfa254569.png

【特别补充】在链接器->常规 界面上,需要修改输出文件的形式,否则无法正常生成mexw64文件!!!!!!

2c7f481ae4684d44506bbaea9ad24513.png

新建文本文档,更改名称为test.tdf。用文本编辑软件打开文件,更改其中的内容为:

3d7aba3904f9d0bcca4ba1a7e98d25d0.png

LIBRARY DCW_Packaged_RS_LDPC_encode_decode(这个是工程的名称,不是顶层名称)EXPORTS mexFunction

最后更改配置管理器,将项目改成x64属性,沿用win32的工程配置。

b6782cfe5d8d053499384f5835575abf.png

3、MATLAB文件

out_data=DCW_Packaged_RS_LDPC_encode_decode(enc_data,len_sel,scramble_en);

在MATLAB中写上面这一句就可以完成调用的过程。DCW_Packaged_RS_LDPC_encode_decode是工程的名字,也是.mexw64文件的名字。左边是输出的参数,右边是输入的控制参数。

4、编译工程,进行连接

右键点击VS工程的名字,选择 生成。发现工程的x64->Debug文件夹下面会生成一个后缀为.mexw64的文件。

更改MATLAB的工作目录为x64->Debug文件夹(就是.mexw64所在的文件夹)。

在VS中选择 调试 选项卡,选择 附加到进程…… 选项,选择MATLAB.exe,并且在VS中设置断点。

a000105988fc5ab673cc9a7279731a85.png

运行MATLAB程序,即可在VS中触发断点进行联合调试。

【参考文献】

值得参考的文献网址:

在64位的系统中,非常实用的参考文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值