How to use structure pointer as an argument of function in code generation?
조회 수: 17 (최근 30일)
이전 댓글 표시
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,
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/209557/image.png)
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
답변 (5개)
Mark McBroom
2019년 3월 22일
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.
David Missael Maciel Morones
2019년 8월 9일
편집: David Missael Maciel Morones
2019년 8월 9일
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.
댓글 수: 1
Emanuele Pancani
2019년 12월 24일
I agree with you! It is stupid!
I'm a firmware designer and I work on DSP programming since 2006.
I started to use Simulink models for code generation 3 years ago and this is one of the major issue I faced. In my projects, genereted code works with hand written code and it is normal having arguments passed to function by pointers. Moreover it is normal having "in-out" arguments; I mean that an arguments passed by reference could be changed by the function itself.
Another stupid thing is that you could not have a pointer field in a bus or in a struct storage class...Why?
I hope that mathworks will solve this issue in future releases; I would like to have more options to manage storage classes.
In some cases I used the legacy code tool to import hand written C code; in those cases you should be able to pass arguments by pointer
Vit Valek
2020년 1월 30일
Hello Chess,
I have solution for your issue. First, it's necessary to create bus in Matlab (it will be structure in generated C code). Then you must create reusable subsystem. I attached 2 files - script (for create structure) and model (with correct configuration). I hope it will be helpful.
Vit
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Deployment, Integration, and Supported Hardware에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!