Specifying inputs/outputs for C-code functions generated from MATLAB m-code using emlc as pass-by-reference
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Todd
am 17 Aug. 2011
Kommentiert: Benjamin
am 12 Mär. 2024
How do I make the generated c-code use pass-by-reference for all inputs and outputs instead of pass-by-value?
I am using emlc to generate c-code for a function that has constant, scalar, array (vector), and struct inputs and outputs. I am going to be calling this c-code from FORTRAN code, so I need to use pass-by-reference for all inputs and outputs. Depending on my FORTRAN compiler, I also may need to specify a calling convention. In the past, I have been writing wrappers for the generated code, which is tedious. How can I specify the interface that I want?
3 Kommentare
Akzeptierte Antwort
Alexander Bottema
am 17 Aug. 2011
To force call-by-reference for the top-level function you declare every input also as output.
Suppose you have the following function signature:
function y = foobar(a,b,c)
and you want call-by-reference on 'a', 'b' and 'c'.
Then add them as etra outputs:
function [y,a,b,c] = foobar(a,b,c)
For example:
function [y,a,b,c] = foobar(a,b,c) %#eml
y = a + b.field1 + c(3);
compiled with:
emlc -T RTW foobar.m -eg { 0, struct('field1',0), zeros(1,10) }
Will produce the C code:
real_T foobar(const real_T *a, const struct_T *b, const real_T c[10]) { return (*a + b->field1) + c[2]; }
As you can see the parameters 'a', 'b' and 'c' are now being passed by reference. In C arrays are always passed by reference so there are no need for using a pointer on that argument.
1 Kommentar
Benjamin
am 12 Mär. 2024
This is quite an old answer by now. Is it with newer Matlab releases still not possible to specifiy this explicitly with a coder or embedded coder configuration?
I'm currently dealing with similar issues and wouuld love to hear if I still need to handle this the same way as suggested here in 2011.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu MATLAB Coder finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!