codegen: Problems using a structure as an input parmeter
7 views (last 30 days)
Show older comments
I am developing a codegen project with multiple functions. One function BAR1 returns a structure of type FOO. Another function BAR2 accepts a structure of type FOO. However, the code generator creates two structures, indentical except they have different structure names. The code, as generated, produces a syntax error in my app:
FOO_TYPE foo;
double c;
foo = bar1();
c = bar2(foo);
error C2664: 'bar2' : cannot convert parameter 1 from 'FOO_TYPE' to 'const struct_T'
How can I make bar2() accept a struct of type 'FOO_TYPE' instead of internally generated type 'struct_T'?
A workaround is to use:
c = bar2(*(struct_T*)&foo);
but this is not robust if the structure name is redefined by codegen.
Thanks, AJ
Here is the Matlab code. In the codegen project, for bar2, I specified the input type "by example" using "FOO_TYPE". ====================
function foo = bar1
%bar1 - Code generator test case - Structure as an output
%#codegen
foo = FOO_TYPE;
foo.a = 1.0;
foo.b = 2.0;
====================
function c = bar2(foo)
%bar2 - Code generator test case - Structure as an input
%#codegen
c = double(0);
c = sqrt(foo.a^2 + foo.b^2);
====================
function s = FOO_TYPE
%FOO_TYPE - Defines a structure
%#codegen
s = struct(...
'a', double(0), ...
'b', double(0));
coder.cstructname(s, 'FOO_TYPE');
0 Comments
Accepted Answer
Fred Smith
on 16 Feb 2012
Hi AJ,
Have you looked at coder.cstructname? That command can be used to specify the C name to use for a structure type.
-Fred
0 Comments
More Answers (1)
Fred Smith
on 3 Feb 2012
Have you tried compiling both of these files with a single call to the codegen command? You can pass multiple entry points, and MATLAB Coder should ensure that the types are resolved correctly.
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!