2016-05-31 71 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中,它非常困難 –