MATLAB Coder: Option "generate one file for each MATLAB file"

Hello, I want to produce C/C++ standalone Code with MATLAB Coder. Although i took the option "generate one file for each MATLAB file" some MATLAB files are translated together in one C/C++ file. Is there another option to take influence on that? Kind regards Andreas

6 Kommentare

Hi Andreas. Can you provide an example of when this happens? For example, two .M files that MATLAB Coder will combine into a single file, even with the "generate one file for each MATLAB file" option selected.
Hello Carl,
I give a easy litle example. I want to generate code for the entry point function fcn1.fcn1 calls a second function fcn2, that's not declared as entry-point function.
function b = fcn1(a) b = fcn2(a); end
function b = fcn2(a) b = a+1; end
In my generated code i just get all the initialization files and one file fcn1. fcn2 doesn't get generated or declared somewhere. For a code with many 'private' nested functions C/C++ Code becomes very hard to understand. I'm using MATLAB R2016B.
For MATLAB Coder to generate separate files for fcn2, you will need to provide it as an entry-point function. Otherwise, like you observed, its functionality will simply get integrated into fcn1. Is there a specific use case for which you want to define fcn1 as an entry-point function, but not fcn2? For example, are you trying to have code generated for fcn2, but only accessible within fcn1.c?
I tried this allready. So ist get a file for fcn2. But in fcn1 there is no call of fcn2. Fcn1 is y=x+1
I thing dividig code into single functions is the the best Way to structure and reuse your Code. If i get just one large C\C++ File with some hundrets of lines, there is noch Chance to Debug that anymore. Furthermore i think thats the Common way to write Code with many private funktions and only export some public ones.
What i don't unterstand is, that for some of the called not entry point functions a extra C-file is generated and for some not. Is there any way to influence that by some Coder Flag.
Thanks for following up. To prevent MATLAB Coder from inlining a function, you can use the line "coder.inline('never')". For example:
function b = fcn2(a)
coder.inline('never')
b = a + 1;
end
This will prevent fcn2 from being inlined in fcn1.
Thank you.
The option coder.inline('never') was exactly, what i was searching for.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Carl
Carl am 28 Aug. 2017

1 Stimme

Possible solutions:
  1. Provide both functions as an entry-point function
  2. Use the coder.inline flag to control whether a function gets inlined (see documentation below)
https://www.mathworks.com/help/simulink/slref/coder.inline.html

Weitere Antworten (0)

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by