【问题标题】:Matlab crashes with S-function after mdlOutputsMatlab 在 mdlOutputs 后使用 S-function 崩溃
【发布时间】:2016-05-31 15:55:34
【问题描述】:

我正在使用 mdlStart mdlOutputs 等基于 Matlab 模板执行我的“主要”S-Function,它与我拥有的一些 Ansi C 文件进行通信,并且此 S-Function 在 Simulink 中使用。我使用 mex 正确编译了文件,为了调试,我使用的是 Visual Studio 2015。我可以设置和使用断点,所以一切正常。

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

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

那么,关于如何正确检查它给我错误的地方有什么想法吗?另外,您是否知道为什么在离开mdlOutputs 和进入mdlTerminate 之前进程会崩溃?这两个函数之间会发生什么?

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

【问题讨论】:

    标签: c matlab simulink mex


    【解决方案1】:

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

    mdlInitializeSizes(SimStruct *S) 中,我将ssSetOptions(S, 0); 替换为ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);,就像建议的here 一样。

    【讨论】:

    • 该选项可确保您的 s-function 不会引发导致代码长跳转的异常。此选项可能掩盖了导致崩溃的其他问题。确保没有覆盖 mdlOutputs 中的任何内存。
    • 是的,你是对的。问题是,我如何确保没有发生内存覆盖?在 Matlab + Visual Studio 中这是相当困难的
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2015-05-14
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多