我有一个问题,即我很难为这个问题的标题做准备。
我有一个库来计算制冷剂的属性。例如,你给出压力和焓,它会告诉你温度。该库在Fortran中编码,带有mex
文件以与Matlab连接。现在,我100%确定库已经彻底调试(它由比我更聪明的人编码,并且已经使用了近十年)。问题肯定在于我如何称呼它。
问题就在于此。我在simulink模型的子系统中从StartFcn
回调(.m脚本文件)调用库。我第一次运行这个模型,它运行得很好。因此,我正在服务于该函数的值是正确的。然而,第二次我运行它,它崩溃了。输入两次完全相同。
另外,如果我在两次运行之间执行clear all
,那么就不会发生崩溃。但如果我只做clearvars
或clear
,我仍然会崩溃。当我调试并查看函数调用中传递的变量时,它们都是有效的,并且两次都是相同的。
有人有这方面的经验,或者可以告诉我我可能做错了什么?函数调用中是否存在仅clear all
可以删除而不是clear
的内容?救我的灵魂!
答案 0 :(得分:0)
是的,persistent keyword可以声明持久变量。
如果您只想清除那些,请尝试
clear StartFcn
清除函数StartFcn
的所有变量。来自documentation:
如果name是函数名,则clear name重新初始化函数中的任何持久变量。
答案 1 :(得分:0)
在模拟之间快速尝试clear mex
- 这应该清除matlab中的所有mex代码。
要考虑的其他问题......
希望其中一些有用。
答案 2 :(得分:0)
我会尝试将clear all
置于您在StartFcn Callback中调用的函数中。
所以,让我们说你的功能是:
function [out] = nameoffunction(a,b,c)
%do calculation with a,b,c
d = a + b + c;
%output out
out = d;
assignin('base','out',d)
clear all
你可以调用这个函数:
nameoffunction(a,b,c)
让我知道它是否有所改变。如果这样可行,你可以在函数内部尝试其他清除命令。