2016-05-31 35 views
0

Matlabのテンプレートに基づいて、私が持っていたAnsi Cファイルと通信するmdlStartmdlOutputsなどの "main" S関数を実行しています。 Simulinkで使用されます。 mexでファイルを正しくコンパイルし、デバッグするためにVisual Studio 2015を使用しています。ブレークポイントを設定して使用することができますので、すべて正常に動作します。MatlabがmdlOutputsの後にS関数でクラッシュする

問題は、すべての内容がMatlabに正しく印刷される 'mdlOutputs'関数を終了した後、デバッグがブレークポイントに入り、 'simulink.c'に入ります。その後、「libmex.pdb」が見つからないというデバッグが壊れてしまいます。

Visual StudioなしでSimulinkモデルをループ内で実行すると、Matlabがクラッシュして動作を停止します。

それで、どこでエラーが発生しているかを正しく確認する方法はありますか?また、mdlOutputsを終了してからmdlTerminateに入る前に、プロセスがクラッシュする理由についての手がかりはありますか?これらの2つの機能の間ではどうなりますか?

私はWindows 7、64ビット、Matlab 2012bを使用しています(2015bで試してみます)。

答えて

0

私は最終的に解決策を見つけたと思います(私はそれがまだ分かりませんが)。

mdlInitializeSizes(SimStruct *S)では、をssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);と置き換えて示しています(here)。

+1

このオプションは、s-functionがコード内で長いジャンプを引き起こす例外をスローしないことを保証します。このオプションは、クラッシュの原因となっている他のいくつかの問題をマスクしている可能性があります。 mdlOutputs内のメモリを上書きしていないことを確認してください。 – Navan

+0

あなたは正しいです。問題は、どのようにメモリの上書きが起こっていないことを確認するのですか? Matlab + Visual Studioではかなり難しいです –

関連する問題