Azzera filtri
Azzera filtri

codegen: Problems using a structure as an input parmeter

10 visualizzazioni (ultimi 30 giorni)
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');

Risposta accettata

Fred Smith
Fred Smith il 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

Più risposte (1)

Fred Smith
Fred Smith il 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.
  1 Commento
AJ
AJ il 6 Feb 2012
Thanks for the reply.
I did build this project with a single codegen call with multiple entry points.
For defining input types, there seems to be no concept of "named structures". Structures are defined by only their fields. I was hoping there would be some codegen directive and/or method to assign names to input structures. I am not intimately familiar with coder, and have been replying on the user interfaces for project building.
AJ

Accedi per commentare.

Categorie

Scopri di più su Generating Code in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by