我正在使用simulink中的S函数。 MATLAB工作区中有一些变量可用。我想打电话给他们。如何从S函数调用matlab变量?
所以在MATLAB:
a=3;
,并在S功能(用C/C++):
double a = CallFromMATLABWorkSpace(a); //Something like this.
我该怎么办呢?有类似mexCallMATLAB
,但目前还不清楚在这种情况下我应该如何使用它。
我正在使用simulink中的S函数。 MATLAB工作区中有一些变量可用。我想打电话给他们。如何从S函数调用matlab变量?
所以在MATLAB:
a=3;
,并在S功能(用C/C++):
double a = CallFromMATLABWorkSpace(a); //Something like this.
我该怎么办呢?有类似mexCallMATLAB
,但目前还不清楚在这种情况下我应该如何使用它。
从我可以在文档中看到mexCallMATLAB
,以及interoping with C++ source code,它看起来像下面这样:
假设你有一个MATLAB函数MyDoubleFunction
接受单个标量双值,并返回一个标量双值。
//setup the input args
mxArray* input_args[1] = {mxCreateDoubleScalar(4.0)};
mxArray** output_args; //will be allocated during call to mexCallMATLAB
//make the call to the Matlab function
if (mexCallMATLAB(1 /* number of output arguments */,
output_args,
1 /* number of input arguments */,
&input_args,
"MyDoubleFunction"))
{
//error if we get to this code block since it returned a non-zero value
}
//inspect the output arguments
double answer = mxGetScalar(*output_args);
为了从工作区的数据使用功能mexGetVariable:如果你想传递给函数的4.0
值,看看答案是什么,你会做以下。
但是,这是一件有点不寻常的事情。 为什么不将数据作为参数传递给S函数?
mexCallMATLAB的第二个和第四个参数需要是mxArray * ... []类型。在你的代码中,他们应该在前面有“&”。 – Navan
谢谢,修正.. – Jason