Global variables can increase memory requirements and reduce execution speed. To reduce
global RAM for a nonreusable subsystem, you can generate a function interface that passes data
through arguments instead of global variables. The Subsystem block parameter Function interface provides this
option. To compare the outputs for the Function interface options, first
generate a function for a subsystem with a void-void
interface, and then
generate a function with arguments.
void-void
FunctionBy default, when you configure a Subsystem block as a nonreusable function, it generates
a void-void
interface.
Open the example model rtwdemo_roll
.
Right-click the subsystem RollAngleReference
. From the list
select Block Parameter (Subsystem)
.
In the Block Parameters dialog box, confirm that the Treat as atomic unit check box is selected.
Click the Code Generation tab and set the Code
interface packaging parameter to Nonreusable
function
.
The Function interface parameter is already set to
void_void
.
Click Apply and OK.
Repeat steps 2–6, for the other subsystems HeadingMode
and
BasicRollMode
.
Generate code and the static code metrics report for
rtwdemo_roll
. This model is configured to generate a code generation
report and to open the report automatically. For more information, see Generate Static Code Metrics Report for Simulink Model.
In the code generation report, in rtwdemo_roll.c
, the generated code
for subsystem RollAngleReference
contains a void-void
function
definition:
static void RollAngleReference(void) { ... }
void_void
option, the number of bytes for global variables is
47
.
Next, generate the same function with the Allow arguments
(Optimized)
option to compare the results.
To reduce global RAM, improve ROM usage and execution speed, generate a function that allows arguments:
Open the Subsystem Block Parameter dialog box for
RollAngleReference
.
Click the Code Generation tab. Set the Function
interface parameter to Allow arguments
(Optimized)
.
Click Apply and OK.
Repeat steps 2 and 3, for the other subsystems HeadingMode
and
BasicRollMode
.
Generate code and the static code metrics report for
rtwdemo_roll
.
In the code generation report, in rtwdemo_roll.c
, the generated code
for subsystem RollAngleReference
now has
arguments:
static real32_T RollAngleReference(real32_T rtu_Phi,... boolean_T rtu_AP_Eng,... real32_T rtu_Turn_Knob) { ... }
Allow arguments
option set, the total number of bytes for global
variables is now 39
bytes.
In some cases, when generating optimized code, the code generator might not generate a
function that has arguments. To generate a predictable function interface that has
arguments, set Function interface to Allow arguments
(Match graphical interface)
.