Funktionsdefinition
Bei der Erstellung von MATLAB®-Funktionen zur Verwendung für die Codegenerierung sind bestimmte Erwägungen erforderlich. Hierzu gehören bestimmte Einschränkungen bei der Verwendung von varargin
und varargout
, rekursiver Funktionen, anonymer Funktionen und verschachtelter Funktionen. Um Code für rekursive MATLAB Funktionen zu generieren, verwendet der Code-Generator entweder Kompilierzeit- oder Laufzeit-Rekursion. Um effizienten C/C++ Code zu erzeugen, erstellt der Code-Generator manchmal mehrere Versionen einer Funktion, die als Funktionsspezialisierungen bezeichnet werden. In bestimmten Fällen können Sie den Code-Generator mithilfe von coder.ignoreSize
und coder.ignoreConst
daran hindern, Funktionsspezialisierungen zu erstellen. Beim Erstellen einer MEX-Funktion können Sie die Codegenerierung für eine bestimmte Funktion in Ihrem MATLAB Programmcode umgehen und stattdessen die MATLAB-Engine zur Ausführung des Funktionsaufrufs verwenden. Verwenden Sie hierfür das Konstrukt coder.extrinsic
.
Funktionen
coder.extrinsic | Declare function as extrinsic and execute it in MATLAB |
coder.ignoreConst | Prevent use of constant value of expression for function specializations |
coder.ignoreSize | Prevent code generator from creating function specializations for constant-size expressions |
coder.mustBeComplex | Validate that value lies on the complex plane (Seit R2023b) |
coder.mustBeConst | Validate that value is a compile-time constant (Seit R2023b) |
coder.noImplicitExpansionInFunction | Disable implicit expansion within the specified function in the generated code (Seit R2021b) |
coder.sameSizeBinaryOp | Apply element-wise binary operations without implicit expansion (Seit R2021b) |
coder.specifyAsGPU | Specify that value is a GPU input to an entry-point function for GPU code generation (Seit R2023b) |
Themen
- Kompilierungsanweisung %#codegen
Geben Sie an, dass eine MATLAB-Funktion für die Codegenerierung vorgesehen ist.
- Generate Code with Implicit Expansion Enabled
The code generator introduces modifications in the generated code to accomplish implicit expansion.
- Optimize Implicit Expansion in Generated Code
Implicit expansion in the generated code is enabled by default.
- Code Generation for Variable Length Argument Lists
Generate code for
varargin
andvarargout
. - Generate Code for arguments Block That Validates Input and Output Arguments
Generate code for MATLAB code that constrains class, size, and other aspects of function input and output values.
- Code Generation for Recursive Functions
Use recursive functions in MATLAB code that is intended for code generation.
- Force Code Generator to Use Run-Time Recursion
Rewrite your MATLAB code so that the code generator uses run-time recursion instead of compile-time recursion.
- Code Generation for Anonymous Functions
Use anonymous functions in MATLAB code intended for code generation.
- Code Generation for Nested Functions
Use nested functions in MATLAB code intended for code generation.
- Resolution of Function Calls for Code Generation
The code generator uses precedence rules to resolve function calls.
- Resolution of File Types on Code Generation Path
The code generator uses precedence rules to resolve file types.
- Use MATLAB Engine to Execute a Function Call in Generated Code
If a function is not supported for code generation, declare it as extrinsic to execute in MATLAB.
Fehlersuche
Nonconstant Index into varargin or varargout in a for-Loop
Force loop unrolling when the code generator cannot
determine the value of the index into varargin
or varargout
.
Avoid Duplicate Functions in Generated Code
Reduce the occurrence of duplicate functions in the generated code.
Output Variable Must Be Assigned Before Run-Time Recursive Call
Troubleshoot output variable assignment for run-time recursion.
Compile-Time Recursion Limit Reached
Troubleshoot compile-time recursion limit error.
Resolve Error: Arrays Have Incompatible Sizes
Troubleshoot size incompatibility errors that occur during code generation.
Resolve Issue: coder.inline("never") and coder.nonInlineCall Do Not Prevent Function Inlining
Troubleshoot instances of coder.inline('never')
not
preventing inlining.
Resolve Issue: Variables Must Be Fully Defined Before Use
Troubleshoot code generation errors when variables, including structure fields and class properties, are not defined before use.
Resolve Error: Cannot Determine the Exact Number of Iterations for a Loop
Troubleshoot error when code generator is unable to correctly determine number of loop iterations.