S-Function return types

3 次查看(过去 30 天)
Hello,
I am trying to generate an S-Function code from a C++ source code in which I wish both input and output to be arrays.
In my C++ code the function follows:
double* function(double param1[], param2[])
{
double *varReturn = new double[sizeof(param1[])];
...
//body
...
return varReturn;
}
In the Matlab environment I enter the Output definition:
def.OutputFcnSpec = 'double y1 = TPh(double u1[], double u2[])'; then I get the
error:
error C2440: '=' : cannot convert from 'double *' to 'real_T',
logically due to "double y1" does not be an array nor a pointer declaration. However I am having a hard time in write the output definition to make it work.
Can someone please give me some help with this. I sense I am being careless at some details or I have a misunderstanding.
Thank you.
Sincerely,
Dan
  1 个评论
José-Luis
José-Luis 2012-8-16
编辑:José-Luis 2012-8-16
in C++, if you have a pointer to some data and then you set the value of the data inside the function, you can access it outside the function. If you define the pointer inside the function, as you seem to be doing, then the return values will be undefined once the function exits. This might be the source of the problem.

请先登录,再进行评论。

采纳的回答

Kaustubha Govind
Kaustubha Govind 2012-8-16
The compiler error occurs, because in your specification:
double y1 = TPh(double u1[], double u2[])
The output 'y1' is returned by value, not a pointer which your function returns. As José-Luis Guerrero suggested, you should probably return the output via an input pointer argument, so that your specification can be:
TPh(double u1[], double u2[], double y1[])
  9 个评论
Daniel
Daniel 2012-8-16
Thanks!
All was of great help!
Kaustubha Govind
Kaustubha Govind 2012-8-17
Daniel: Simulink already allocates the memory for the output, so you shouldn't be allocating it again. In fact, you might see memory leaks and other bad things happen if you overwrite the pointer (y1) allocated by Simulink to a different location.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Simulink Coder 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by