最近刚刚接触在vs中编写s-function,在“s-function does not exit“ 和调试时无法命中断点的问题上折腾了一天,
终于搞清楚怎样配置避免这两个问题。环境:VS2017 + Matlab2018b
(本文中的示例程序使用的是matlab库中的sfun_counter_cpp.cpp中的程序,使用前添加MATLAB_MEX_FILE宏)
——————————————————————————————————————————————————
一、在VS中建立工程
- 新建项目,选择dll类型
VS2017会自动创建预编译头,若不使用则在项目配置中禁用即可。
- 配置项目,修改生成可执行文件类型(默认为dll,修改成mexw32或mexw64,依matlab版本而定),添加matlab的包含路径以及库路径,添加使用到的库
注:项目属性配置的平台要和编辑器中的平台一致才会生效
- 添加并编辑模块定义文件
- 编译,若成功会看到如下输出
二、将mex文件加载到simulink模型文件并执行
1.将mex文件所在目录添加至matlab的搜索路径(这一步很重要,若不添加,运行模型时会出现s-function不存在的错误)
2.建立simulink模型文件,加载刚刚生成的mex文件,正确设置参数
运行时遇到了如下错误:
修改模型文件名称即可。
运行成功。
三、在VS中调试mex文件
1.在Matlab搜索路径中添加源文件路径(若不添加无法触发断点)
2.在VS中选择”附加到进程“,选择当前模型文件窗口
注:每次附加到进程前应重新编译工程,并且在附加到进程之前不要运行模型文件,否则会出现不能进入断点的问题
3.运行模型文件,成功进入断点
至此,vs与matlab混合调试mex文件的工作已全部完成。