2016-05-31 6 views
0

Ich mache meine "Haupt" S-Funktion basierend auf der Matlab Vorlage mit mdlStartmdlOutputs, etc, die mit einigen Ansi C-Dateien kommuniziert, die ich hatte, und diese S-Funktion ist in Simulink verwendet. Ich kompilierte die Dateien korrekt mit mex und um zu debuggen, verwende ich Visual Studio 2015. Ich kann Haltepunkte setzen und verwenden, so dass alles einwandfrei funktioniert.Matlab crasht mit S-Funktion nach mdlOutputs

Das Problem ist, nach Abschluss der 'mdlOutputs' Funktion, wo alle Inhalte korrekt in Matlab gedruckt werden, geht das Debugging in einen Haltepunkt und es geht in 'simulink.c'. Danach ist der Debug gebrochen, dass "libmex.pdb" nicht gefunden werden kann.

Wenn ich das Simulink-Modell ohne Visual Studio in der Schleife ausführen, stürzt Matlab einfach ab und funktioniert nicht mehr.

Also, irgendeine Idee, wie man richtig überprüft, wo es mir einen Fehler gibt? Haben Sie auch eine Ahnung, warum der Prozess nach dem Verlassen von mdlOutputs und vor der Eingabe von mdlTerminate abstürzt? Was passiert zwischen diesen beiden Funktionen?

Ich benutze Windows 7, 64-Bit und Matlab 2012b (ich werde versuchen, es in 2015b auszuführen).

Antwort

0

Ich denke, dass ich endlich die Lösung gefunden habe (obwohl ich es noch nicht ganz verstehe).

In der mdlInitializeSizes(SimStruct *S) ich ersetzte ssSetOptions(S, 0); durch ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE); wie es ist vorgeschlagen here.

+1

Diese Option garantiert, dass Ihre s-Funktion keine Ausnahmen auslöst, die zu langen Codesprüngen führen. Es ist möglich, dass diese Option ein anderes Problem maskiert, das den Absturz verursacht. Stellen Sie sicher, dass Sie keinen Speicher in mdlOutputs überschreiben. – Navan

+0

Ja, Sie haben Recht. Die Sache ist, wie kann ich sicherstellen, dass keine Überschreibungen von Speicher passieren? In Matlab + Visual Studio ist es ziemlich schwierig –