Control memory consumption by specifying whether the code generator defines variables locally or globally and how data passes to subsystem functions. Modify configuration settings to reduce the amount of memory for storing data.
The code generator reduces ROM consumption by combining control flow constructs, removing dead code paths and code for blocks that do not have an impact on computational results. You can further reduce ROM consumption by removing code that you might not need such as initialization code, the reset and disable functions, and defensive code.
Define Variables Locally or Globally
- Customize Stack Space Allocation
Control the maximum allowable stack size to provide some control over whether data is defined locally or globally in the generated code.
- Reduce Memory Usage for Signals
Enable parameters that provide the capability to reuse memory allocated for signals.
- Enable and Reuse Local Block Outputs in Generated Code
Where possible, the code generator declares block outputs as local variables, so that it can potentially reuse these variables.
- Reuse Global Block Outputs in the Generated Code
The code generator attempts to reuse global variables.
- Optimize Global Variable Usage
Choose a global variable reference optimization to satisfy your memory usage and execution speed requirements.
- Optimize Generated Code by Passing Reusable Subsystem Outputs as Individual Arguments
The code generator eliminates data copies from local variables back to global block I/O structures by passing reusable subsystem outputs as individual arguments instead of as a pointer to a structure stored in global memory.
- Reduce Global Variables in Nonreusable Subsystem Functions
To reduce global RAM for a nonreusable subsystem, generate a function interface that passes data through arguments instead of global variables.
Reduce Code Size
- Remove Zero Initialization Code
Control whether to initialize internal data (blocks states and block outputs) and external data (root inports and outports whose value is zero) in the generated code.
- Remove Reset and Disable Functions from the Generated Code
Remove unreachable (dead-code) instances of the reset and disable functions from the generated code for ERT-based systems that include model referencing hierarchies.
- Inline Invariant Signals
Use the numerical values of invariant signals instead of their symbolic names in the generated code.
- Inline Numeric Values of Block Parameters
Reduce global RAM usage by inlining the literal numeric values of block parameters.
- Optimize Generated Code by Consolidating Redundant If-Else Statements
The code generator optimizes the generated code by combining
if-elsestatements that share the same condition.
- Eliminate Dead Code Paths in Generated Code
The code generator eliminates dead (that is, unused) code paths from the generated code.
- Remove Code for Blocks That Have No Effect on Computational Results
The code generator increases execution speed and reduces ROM consumption by removing code that does not impact computational results.
- Optimize Generated Code by Combining Multiple for Constructs
The code generator uses data dependency analysis to combine
forconstructs to reduce static code size and runtime branching.
Reduce Memory for Storing Data
- Reuse Buffers of Different Sizes and Dimensions
Reuse buffers for matrices that have different sizes and shapes.
- Reduce Memory Usage for Boolean and State Configuration Variables
Reduce the amount of memory that stores state configuration variables and
- Optimize Memory Usage for Time Counters
Optimize memory that the code generator allocates for elapsed time or absolute time.
- Optimize Generated Code Using Boolean Data for Logical Signals
The code generator optimizes the generated code by storing logical signals as
- Optimize Generated Code by Packing Boolean Data into Bitfields
The code generator reduces RAM consumption by packing boolean data into 1-bit bitfields.
- Vector Operation Optimization
The code generator reduces stack memory by replacing temporary local arrays with local variables.
- Specify Single-Precision Data Type for Embedded Application
Generate code whose floating-point data types are only single precision, for example, for targeting a single-precision processor.
- Generate Efficient Code by Specifying Data Types for Block Parameters
To generate more efficient code, match parameter data types with signal data types or store parameters in smaller data types.
- Control Operator Type in Generated Code
Generate code with Logical or Bitwise Operators or a combination of both operators.
Analyze Stack Usage
- Stack Usage Profiling for Code Generated from Simulink Models
Determine size of stack memory that is required to run generated code.