zoukankan      html  css  js  c++  java
  • 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];
        unsigned int data_in[223];
        double *real_data_ptr;
        double *real_data_ptr_out;
        int loop_XDZ;
        unsigned int back_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;
    • 在VC++目录选项卡当中,更改包含目录为MATLABexterninclude文件夹;
    • 在VC++目录选项卡当中,更改库目录为MATLABexternlibwin64microsoft;
    • 在链接器-输入选项卡当中,添加附加依赖项libmat.lib、libeng.lib、libmx.lib、libmex.lib;
    • 在下面的模块定义文件中,设置为test.tdf(这个文件需要自己创建);

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

    •  

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

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

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

    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中设置断点。

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

    【参考文献】

    值得参考的文献网址:

    1、https://www.cnblogs.com/sea-wind/p/5712479.html

    2、http://www.cnblogs.com/tjulxh/archive/2012/04/23/2467087.html

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

    http://blog.sciencenet.cn/blog-568124-757193.html

  • 相关阅读:
    IDE 集成开发环境
    工匠若水 Android应用开发编译框架流程与IDE及Gradle概要
    史上最详细的Android Studio系列教程四--Gradle基础
    织梦首页怎么调用栏目下的文章列表
    html dl dt dd标签元素语法结构与使用
    a标签的link、visited、hover、active的顺序
    CSS3之border-radius圆角
    网页右键无法使用网站右键被禁止破解 利用火狐
    WEBZIP为什么打不开网页
    4种常用扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)
  • 原文地址:https://www.cnblogs.com/waimen/p/8553803.html
Copyright © 2011-2022 走看看