MATLAB Answers

Chess
0

How to use structure pointer as an argument of function in code generation?

Asked by Chess
on 21 Mar 2019
First, I defined several bus signals in workspace, and I know these bus signals would be generated as structs in code generation.
For example, I defined a bus signal named PARA, then I added some bus elements like A, B, C to PARA. Eventually, in code generation, SIMULINK would generate
typedef struct{
int32 A;
int32 B;
int32 C;
} PARA;
And then it would define
PARA PARA_T;
My question is, how can I use the pointer of struct PARA_T to be an argument of a function, and to be clear, this function is being generated by SIMULINK code generation through a subsystem.
For example, I created a subsystem and set his code generation page as reusable function and name LPF, and so on.
Then in the code generation process, I want this subsystem to be code generated as
void LPF (PARA *k)
{
K->C = K->A + K->B;
}
And then in the main.c
LPF(&PARA_T);
My current strategy is like this,
I defined some bus signals in workspace like Bus Motor, and then I used some Data Store Memory modules and set their Date Type as Bus Motor.
Finally I used Data Store Read modules to read these data in Bus signals ( which were structs in code generation. ).
But this whole thing doesn't work.
So, how should I build and set these modules, then I can get functions which their arguments are pointers of structs, in code generation, like I said before?

  0 Comments

Sign in to comment.

4 Answers

Answer by Mark McBroom on 22 Mar 2019

You should be able to get a pointer to the struct passed to your function if you configure the subsystem to be atomic and set the code generation properties to be reusable subsystem. See this example.

  1 Comment

I read this example before, but how should I be able to get a pointer to the struct passed to my funtion?
I know that in code generation all the Bus Signals will be generated as structs, so how can I get pointers that contain the address of those structs?
And in this example, the generated code is
myfun(rtwdemo_ssreuse_U.In1, rtwdemo_ssreuse_U.In2, &rtwdemo_ssreuse_B.SS2,
rtwdemo_ssreuse_P.T2Data, rtwdemo_ssreuse_P.T2Break);
and I want it to be like this
myfun(&rtwdemo_ssreuse_U, &rtwdemo_ssreuse_B.SS2, &rtwdemo_ssreuse_P);
I mean rtwdemo_ssreuse_P.T2Data and rtwdemo_ssreuse_P.T2Break belong to the same struct, I don't have to pass them directly to myfun. I could just pass the address of this struct to myfun. It would be a little more concise and efficient, wouldn't it?
Anyway thanks a lot, buddy.

Sign in to comment.


Answer by Chess
on 26 Mar 2019

PLEASE HELP

  0 Comments

Sign in to comment.


Answer by Chess
on 2 Apr 2019

...

  0 Comments

Sign in to comment.



I really need this answer as well and I'm desesperate. Somewhere in a forum I read that embedded coder cannot translate any simulink model as pointer of a structure due to the data-flow rules. Having a pointer to a structure you can theorical write an input. That's why is not allowed.
For me this is stupid because in embedded programming working with pointers is one of the most commonly practices.

  0 Comments

Sign in to comment.