2016-05-31 44 views
0

我正在做我的“主”S函数基于Matlab模板与mdlStartmdlOutputs等,它与我有的一些Ansi C文件进行通信,此S函数是用于Simulink。我使用mex正确编译了这些文件,并且为了调试我正在使用Visual Studio 2015.我可以设置和使用断点,以便一切工作正常。Matlab在mdlOutputs后与S函数崩溃

问题是,在完成'mdlOutputs'函数后,所有内容都被正确打印到Matlab中,调试进入一个断点并进入'simulink.c'。之后,调试被打破,说“libmex.pdb”找不到。

如果我在循环中运行没有Visual Studio的Simulink模型,Matlab只会崩溃并停止工作。

那么,关于如何正确检查它给我一个错误的任何想法?此外,您是否有任何线索知道为什么在离开mdlOutputs之后以及在进入mdlTerminate之前进程崩溃?这两个功能之间会发生什么?

我使用的是Windows 7,64位和Matlab 2012b(我将尝试在2015b中运行它)。

回答

0

我认为我终于找到了解决方案(尽管我还是不太明白)。

mdlInitializeSizes(SimStruct *S)我通过ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);取代ssSetOptions(S, 0);等,建议here

+1

该选项保证你的s函数不会抛出导致代码长跳转的异常。这个选项可能掩盖了导致崩溃的其他问题。确保你不覆盖mdlOutputs中的任何内存。 – Navan

+0

是的,你是对的。事情是,我如何确保没有重写的内存正在发生?在Matlab + Visual Studio中,它非常困难 –