Admin مدير المنتدى
عدد المساهمات : 18996 التقييم : 35494 تاريخ التسجيل : 01/07/2009 الدولة : مصر العمل : مدير منتدى هندسة الإنتاج والتصميم الميكانيكى
| موضوع: كتاب MATLAB Coder - User's Guide الإثنين 02 يناير 2023, 4:55 pm | |
|
أخواني في الله أحضرت لكم كتاب MATLAB Coder - User's Guide MathWorks
و المحتوى كما يلي :
About MATLAB Coder 1 MATLAB Coder Product Description 1-2 Product Overview 1-3 When to Use MATLAB Coder 1-3 Code Generation for Embedded Software Applications . 1-3 Code Generation for Fixed-Point Algorithms . 1-3 Design Considerations for C/C++ Code Generation 2 When to Generate Code from MATLAB Algorithms 2-2 When Not to Generate Code from MATLAB Algorithms . 2-2 Which Code Generation Feature to Use 2-3 Prerequisites for C/C++ Code Generation from MATLAB . 2-4 MATLAB Code Design Considerations for Code Generation . 2-5 See Also 2-5 Differences Between Generated Code and MATLAB Code . 2-6 Functions that have Multiple Possible Outputs . 2-7 Writing to ans Variable . 2-7 Logical Short-Circuiting 2-7 Loop Index Overflow . 2-8 Indexing for Loops by Using Single Precision Operands 2-9 Index of an Unentered for Loop . 2-10 Character Size 2-11 Order of Evaluation in Expressions . 2-11 Name Resolution While Constructing Function Handles . 2-12 Termination Behavior . 2-13 Size of Variable-Size N-D Arrays . 2-13 Size of Empty Arrays . 2-14 Size of Empty Array That Results from Deleting Elements of an Array . 2-14 Binary Element-Wise Operations with Single and Double Operands . 2-14 Floating-Point Numerical Results 2-15 NaN and Infinity . 2-15 Negative Zero 2-16 Code Generation Target . 2-16 MATLAB Class Property Initialization . 2-16 vii ContentsMATLAB Classes in Nested Property Assignments That Have Set Methods . 2-16 MATLAB Handle Class Destructors . 2-17 Variable-Size Data . 2-17 Complex Numbers . 2-17 Converting Strings with Consecutive Unary Operators to double 2-17 Display Function . 2-17 Potential Differences Reporting . 2-20 Addressing Potential Differences Messages 2-20 Disabling and Enabling Potential Differences Reporting for MATLAB Coder . 2-20 Disabling and Enabling Potential Differences Reporting for Fixed-Point Designer . 2-21 Potential Differences Messages . 2-22 Automatic Dimension Incompatibility . 2-22 mtimes No Dynamic Scalar Expansion 2-22 Matrix-Matrix Indexing 2-23 Vector-Vector Indexing 2-23 Loop Index Overflow 2-24 MATLAB Language Features Supported for C/C++ Code Generation . 2-26 MATLAB Features That Code Generation Supports . 2-26 MATLAB Language Features That Code Generation Does Not Support 2-27 Functions, Classes, and System Objects Supported for Code Generation 3 Functions and Objects Supported for C/C++ Code Generation . 3-2 Defining MATLAB Variables for C/C++ Code Generation 4 Variables Definition for Code Generation 4-2 Best Practices for Defining Variables for C/C++ Code Generation 4-3 Define Variables By Assignment Before Using Them . 4-3 Use Caution When Reassigning Variables . 4-5 Use Type Cast Operators in Variable Definitions 4-5 Define Matrices Before Assigning Indexed Variables . 4-5 Index Arrays by Using Constant Value Vectors . 4-5 Eliminate Redundant Copies of Variables in Generated Code 4-7 When Redundant Copies Occur . 4-7 How to Eliminate Redundant Copies by Defining Uninitialized Variables 4-7 Defining Uninitialized Variables 4-7 viii ContentsReassignment of Variable Properties 4-9 Reuse the Same Variable with Different Properties . 4-10 When You Can Reuse the Same Variable with Different Properties . 4-10 When You Cannot Reuse Variables . 4-10 Limitations of Variable Reuse . 4-11 Supported Variable Types 4-13 Edit and Represent Coder Type Objects and Properties 4-14 Object Properties 4-14 Legacy Representation of Coder Type Objects 4-15 Defining Data for Code Generation 5 Data Definition Considerations for Code Generation . 5-2 Code Generation for Complex Data . 5-8 Restrictions When Defining Complex Variables . 5-8 Code Generation for Complex Data with Zero-Valued Imaginary Parts 5-8 Results of Expressions That Have Complex Operands . 5-11 Results of Complex Multiplication with Nonfinite Values . 5-11 Encoding of Characters in Code Generation . 5-12 Array Size Restrictions for Code Generation 5-13 Code Generation for Constants in Structures and Arrays 5-14 Code Generation for Strings 5-16 Limitations . 5-16 Differences Between Generated Code and MATLAB Code 5-16 Define String Scalar Inputs 5-17 Define String Scalar Types at the Command Line 5-17 Define String Scalar Inputs in the MATLAB Coder App 5-18 Code Generation for Sparse Matrices 5-19 Sparse Data Types in Generated Code 5-19 Input Definition . 5-19 Code Generation Guidelines 5-20 Code Generation Limitations . 5-21 Specify Array Layout in Functions and Classes . 5-22 Specify Array Layout in a Function . 5-22 Query Array Layout of a Function 5-23 Specify Array Layout in a Class 5-23 Code Design for Row-Major Array Layout . 5-26 Understand Potential Inefficiencies Caused by Array Layout 5-26 Linear Indexing Uses Column-Major Array Layout . 5-28 ixCode Generation for Variable-Size Data 6 Code Generation for Variable-Size Arrays 6-2 Memory Allocation for Variable-Size Arrays . 6-2 Enabling and Disabling Support for Variable-Size Arrays . 6-3 Variable-Size Arrays in a Code Generation Report . 6-3 Control Memory Allocation for Variable-Size Arrays . 6-4 Provide Upper Bounds for Variable-Size Arrays . 6-4 Disable Dynamic Memory Allocation . 6-4 Configure Code Generator to Use Dynamic Memory Allocation for Arrays Bigger Than a Threshold 6-4 Specify Upper Bounds for Variable-Size Arrays . 6-6 Specify Upper Bounds for Variable-Size Inputs . 6-6 Specify Upper Bounds for Local Variables . 6-6 Define Variable-Size Data for Code Generation . 6-8 Use a Matrix Constructor with Nonconstant Dimensions 6-8 Assign Multiple Sizes to the Same Variable 6-8 Define Variable-Size Data Explicitly by Using coder.varsize 6-9 Diagnose and Fix Variable-Size Data Errors . 6-12 Diagnosing and Fixing Size Mismatch Errors . 6-12 Diagnosing and Fixing Errors in Detecting Upper Bounds 6-14 Incompatibilities with MATLAB in Variable-Size Support for Code Generation 6-15 Incompatibility with MATLAB for Scalar Expansion . 6-15 Incompatibility with MATLAB in Determining Size of Variable-Size N-D Arrays 6-16 Incompatibility with MATLAB in Determining Size of Empty Arrays 6-16 Incompatibility with MATLAB in Determining Class of Empty Arrays 6-18 Incompatibility with MATLAB in Matrix-Matrix Indexing . 6-18 Incompatibility with MATLAB in Vector-Vector Indexing . 6-19 Incompatibility with MATLAB in Matrix Indexing Operations for Code Generation . 6-19 Incompatibility with MATLAB in Concatenating Variable-Size Matrices 6-20 Differences When Curly-Brace Indexing of Variable-Size Cell Array Inside Concatenation Returns No Elements 6-20 Variable-Sizing Restrictions for Code Generation of Toolbox Functions . 6-22 Common Restrictions . 6-22 Toolbox Functions with Restrictions for Variable-Size Data . 6-23 Generate Code With Implicit Expansion Enabled . 6-27 Output Size 6-27 Additional Code Generation 6-27 Performance Variation 6-29 x ContentsOptimize Implicit Expansion in Generated Code . 6-31 Disable Implicit Expansion in Specified Function by Using coder.noImplicitExpansionInFunction . 6-33 Disable Implicit Expansion for Specific Binary Operation by Using coder.sameSizeBinaryOp 6-34 Disable Implicit Expansion in your Project . 6-35 Representation of Arrays in Generated Code 6-36 Customize Interface Generation . 6-38 Control Memory Allocation for Fixed-Size Arrays . 6-40 Enable Dynamic Memory Allocation for All Fixed-Size Arrays . 6-40 Enable Dynamic Memory Allocation for Arrays Bigger Than a Threshold . 6-40 Resolve Error: Size Mismatches . 6-42 Issue . 6-42 Possible Solutions 6-42 Code Generation for MATLAB Structures 7 Structure Definition for Code Generation 7-2 Structure Operations Allowed for Code Generation 7-3 Define Scalar Structures for Code Generation 7-4 Restrictions When Defining Scalar Structures by Assignment 7-4 Adding Fields in Consistent Order on Each Control Flow Path 7-4 Restriction on Adding New Fields After First Use . 7-4 Define Arrays of Structures for Code Generation 7-6 Ensuring Consistency of Fields . 7-6 Using repmat to Define an Array of Structures with Consistent Field Properties 7-6 Defining an Array of Structures by Using struct 7-6 Defining an Array of Structures Using Concatenation 7-7 Index Substructures and Fields 7-8 Assign Values to Structures and Fields . 7-10 Code Generation for Categorical Arrays 8 Code Generation for Categorical Arrays . 8-2 Define Categorical Arrays for Code Generation . 8-2 Allowed Operations on Categorical Arrays 8-2 MATLAB Toolbox Functions That Support Categorical Arrays 8-3 xiDefine Categorical Array Inputs 8-6 Define Categorical Array Inputs at the Command Line . 8-6 Define Categorical Array Inputs in the MATLAB Coder App 8-6 Representation of Categorical Arrays 8-7 Categorical Array Limitations for Code Generation 8-9 Code Generation for Cell Arrays 9 Code Generation for Cell Arrays 9-2 Homogeneous vs. Heterogeneous Cell Arrays 9-2 Controlling Whether a Cell Array Is Homogeneous or Heterogeneous 9-2 Naming the Structure Type That Represents a Heterogeneous Cell Array in the Generated Code . 9-3 Cell Arrays in Reports 9-3 Control Whether a Cell Array Is Variable-Size 9-5 Define Cell Array Inputs 9-7 Cell Array Limitations for Code Generation 9-8 Cell Array Element Assignment . 9-8 Variable-Size Cell Arrays 9-9 Definition of Variable-Size Cell Array by Using cell 9-9 Cell Array Indexing . 9-12 Growing a Cell Array by Using {end + 1} 9-13 Cell Array Contents 9-14 Passing Cell Arrays to External C/C++ Functions 9-14 Code Generation for Datetime Arrays 10 Code Generation for Datetime Arrays 10-2 Define Datetime Arrays for Code Generation . 10-2 Allowed Operations on Datetime Arrays . 10-2 MATLAB Toolbox Functions That Support Datetime Arrays . 10-2 Define Datetime Array Inputs . 10-5 Define Datetime Array Inputs at the Command Line 10-5 Define Datetime Array Inputs in the MATLAB Coder App 10-5 Representation of Datetime Arrays . 10-6 Datetime Array Limitations for Code Generation . 10-7 xii ContentsCode Generation for Duration Arrays 11 Code Generation for Duration Arrays 11-2 Define Duration Arrays for Code Generation 11-2 Allowed Operations on Duration Arrays . 11-2 MATLAB Toolbox Functions That Support Duration Arrays . 11-3 Define Duration Array Inputs . 11-6 Define Duration Array Inputs at the Command Line 11-6 Define Duration Array Inputs in the MATLAB Coder App . 11-6 Representation of Duration Arrays . 11-7 Duration Array Limitations for Code Generation . 11-8 Code Generation for Tables 12 Code Generation for Tables 12-2 Define Tables for Code Generation . 12-2 Allowed Operations on Tables . 12-2 MATLAB Toolbox Functions That Support Tables 12-3 Define Table Inputs . 12-5 Define Table Inputs at the Command Line 12-5 Define Table Inputs in the MATLAB Coder App 12-5 Representation of Tables 12-6 Table Limitations for Code Generation . 12-8 Creating Tables Limitations 12-8 Modifying Tables Limitations . 12-8 Using Table Functions Limitations 12-10 Code Generation for Timetables 13 Code Generation for Timetables 13-2 Define Timetables for Code Generation 13-2 Allowed Operations on Timetables . 13-2 MATLAB Toolbox Functions That Support Timetables . 13-3 Define Timetable Inputs . 13-6 Define Timetable Inputs at the Command Line 13-6 Define Timetable Inputs in the MATLAB Coder App 13-6 Representation of Timetables . 13-7 Timetable Limitations for Code Generation . 13-9 Creating Timetables Limitations . 13-9 xiiiModifying Timetables Limitations . 13-10 Using Timetable Functions Limitations . 13-12 Code Generation for Enumerated Data 14 Code Generation for Enumerations 14-2 Define Enumerations for Code Generation . 14-2 Allowed Operations on Enumerations . 14-4 MATLAB Toolbox Functions That Support Enumerations . 14-5 Customize Enumerated Types in Generated Code 14-7 Specify a Default Enumeration Value . 14-8 Specify a Header File . 14-8 Include Class Name Prefix in Generated Enumerated Type Value Names . 14-9 Generate C++11 Code Containing Ordinary C Enumeration . 14-10 Code Generation for MATLAB Classes 15 MATLAB Classes Definition for Code Generation . 15-2 Language Limitations . 15-2 Code Generation Features Not Compatible with Classes . 15-3 Defining Class Properties for Code Generation 15-4 Inheritance from Built-In MATLAB Classes Not Supported . 15-6 Classes That Support Code Generation . 15-7 Generate Code for MATLAB Value Classes 15-8 Generate Code for MATLAB Handle Classes and System Objects . 15-12 Code Generation for Handle Class Destructors . 15-15 Guidelines and Restrictions . 15-15 Behavioral Differences of Objects in Generated Code and in MATLAB 15-16 Class Does Not Have Property . 15-18 Solution 15-18 Passing By Reference Not Supported for Some Properties 15-20 Handle Object Limitations for Code Generation . 15-21 A Variable Outside a Loop Cannot Refer to a Handle Object Allocated Inside a Loop . 15-21 A Handle Object That a Persistent Variable Refers To Must Be a Singleton Object . 15-22 References to Handle Objects Can Appear Undefined 15-23 xiv ContentsSystem Objects in MATLAB Code Generation . 15-25 Usage Rules and Limitations for System Objects for Generating Code 15-25 System Objects in codegen 15-27 System Objects in the MATLAB Function Block . 15-27 System Objects in the MATLAB System Block 15-27 System Objects and MATLAB Compiler Software . 15-27 Specify Objects as Inputs at the Command Line 15-28 Consistency Between coder.ClassType Object and Class Definition File 15-29 Limitations for Using Objects as Entry-Point Function Inputs 15-29 Specify Objects as Inputs in the MATLAB Coder App . 15-31 Automatically Define an Object Input Type 15-31 Provide an Example . 15-31 Consistency Between the Type Definition and Class Definition File 15-32 Limitations for Using Objects as Entry-Point Function Inputs 15-32 Work Around Language Limitation: Code Generation Does Not Support Object Arrays . 15-34 Issue 15-34 Possible Solutions . 15-34 Generating C++ Classes 16 Generate C++ Classes for MATLAB Classes . 16-2 Example: Generate Code for a Handle Class That Has Private and Public Members 16-2 Additional Usage Notes and Limitations . 16-5 Code Generation for Function Handles 17 Function Handle Limitations for Code Generation 17-2 Code Generation for Deep Learning Arrays 18 Code Generation for dlarray 18-2 Define dlarray for Code Generation 18-2 dlarray Object Functions with Code Generation Support . 18-3 Deep Learning Toolbox Functions with dlarray Code Generation Support . 18-4 MATLAB Functions with dlarray Code Generation Support . 18-4 xvdlarray Limitations for Code Generation . 18-12 Recommended Usage 18-12 Limitations 18-12 Defining Functions for Code Generation 19 Code Generation for Variable Length Argument Lists . 19-2 Generate Code for arguments Block That Validates Input Arguments . 19-3 Supported Features 19-3 Input Type Specification and arguments blocks . 19-3 Specify Number of Entry-Point Function Input or Output Arguments to Generate 19-5 Control Number of Input Arguments 19-5 Control the Number of Output Arguments . 19-6 Code Generation for Anonymous Functions . 19-8 Anonymous Function Limitations for Code Generation 19-8 Code Generation for Nested Functions . 19-9 Nested Function Limitations for Code Generation 19-9 Calling Functions for Code Generation 20 Resolution of Function Calls for Code Generation 20-2 Key Points About Resolving Function Calls . 20-2 Compile Path Search Order 20-2 When to Use the Code Generation Path . 20-2 Resolution of File Types on Code Generation Path 20-4 Compilation Directive %#codegen . 20-5 Use MATLAB Engine to Execute a Function Call in Generated Code . 20-6 When To Declare a Function as Extrinsic 20-6 Use the coder.extrinsic Construct 20-7 Call MATLAB Functions Using feval 20-9 Working with mxArrays . 20-9 Restrictions on Using Extrinsic Functions . 20-11 Code Generation for Recursive Functions 20-12 Compile-Time Recursion 20-12 Run-Time Recursion . 20-13 Disallow Recursion 20-13 Disable Run-Time Recursion . 20-13 xvi ContentsRecursive Function Limitations for Code Generation . 20-14 Force Code Generator to Use Run-Time Recursion . 20-15 Treat the Input to the Recursive Function as a Nonconstant . 20-15 Make the Input to the Recursive Function Variable-Size 20-16 Assign Output Variable Before the Recursive Call . 20-17 Avoid Duplicate Functions in Generated Code 20-18 Issue 20-18 Cause 20-18 Solution 20-18 Fixed-Point Conversion 21 Detect Unexecuted and Constant-Folded Code . 21-2 What Is Unexecuted Code? . 21-2 Detect Unexecuted Code 21-2 Fix Unexecuted Code . 21-3 Convert MATLAB Code to Fixed-Point C Code . 21-5 Propose Fixed-Point Data Types Based on Simulation Ranges 21-6 Propose Fixed-Point Data Types Based on Derived Ranges 21-17 Specify Type Proposal Options . 21-29 Detect Overflows 21-32 Replace the exp Function with a Lookup Table 21-40 Replace a Custom Function with a Lookup Table 21-47 Enable Plotting Using the Simulation Data Inspector 21-53 Visualize Differences Between Floating-Point and Fixed-Point Results 21-54 View and Modify Variable Information 21-64 View Variable Information 21-64 Modify Variable Information . 21-64 Revert Changes 21-65 Promote Sim Min and Sim Max Values . 21-65 Automated Fixed-Point Conversion . 21-67 Automated Fixed-Point Conversion Capabilities 21-67 Code Coverage . 21-67 Proposing Data Types 21-70 Locking Proposed Data Types 21-73 Viewing Functions 21-73 Viewing Variables . 21-80 xviiLog Data for Histogram 21-82 Function Replacements 21-84 Validating Types 21-84 Testing Numerics . 21-85 Detecting Overflows . 21-85 Convert Fixed-Point Conversion Project to MATLAB Scripts . 21-86 Generated Fixed-Point Code . 21-88 Location of Generated Fixed-Point Files 21-88 Minimizing fi-casts to Improve Code Readability 21-88 Avoiding Overflows in the Generated Fixed-Point Code . 21-89 Controlling Bit Growth . 21-89 Avoiding Loss of Range or Precision . 21-90 Handling Non-Constant mpower Exponents . 21-91 Fixed-Point Code for MATLAB Classes 21-93 Automated Conversion Support for MATLAB Classes 21-93 Unsupported Constructs 21-93 Coding Style Best Practices . 21-93 Automated Fixed-Point Conversion Best Practices . 21-95 Create a Test File . 21-95 Prepare Your Algorithm for Code Acceleration or Code Generation 21-96 Check for Fixed-Point Support for Functions Used in Your Algorithm 21-96 Manage Data Types and Control Bit Growth . 21-97 Convert to Fixed Point . 21-97 Use the Histogram to Fine-Tune Data Type Settings . 21-98 Optimize Your Algorithm . 21-98 Avoid Explicit Double and Single Casts 21-100 Replacing Functions Using Lookup Table Approximations . 21-101 MATLAB Language Features Supported for Automated Fixed-Point Conversion 21-102 MATLAB Language Features Supported for Automated Fixed-Point Conversion . 21-102 MATLAB Language Features Not Supported for Automated Fixed-Point Conversion . 21-103 Inspecting Data Using the Simulation Data Inspector 21-104 What Is the Simulation Data Inspector? . 21-104 Import Logged Data 21-104 Export Logged Data 21-104 Group Signals 21-104 Run Options 21-104 Create Report 21-105 Comparison Options 21-105 Enabling Plotting Using the Simulation Data Inspector 21-105 Save and Load Simulation Data Inspector Sessions . 21-105 Custom Plot Functions 21-106 Data Type Issues in Generated Code . 21-107 Enable the Highlight Option in the MATLAB Coder App . 21-107 xviii ContentsEnable the Highlight Option at the Command Line . 21-107 Stowaway Doubles . 21-107 Stowaway Singles 21-107 Expensive Fixed-Point Operations 21-107 Automated Fixed-Point Conversion Using Programmatic Workflow 22 Convert MATLAB Code to Fixed-Point C Code . 22-2 Propose Fixed-Point Data Types Based on Simulation Ranges 22-4 Propose Fixed-Point Data Types Based on Derived Ranges . 22-9 Detect Overflows 22-16 Replace the exp Function with a Lookup Table 22-19 Replace a Custom Function with a Lookup Table 22-21 Enable Plotting Using the Simulation Data Inspector 22-23 Visualize Differences Between Floating-Point and Fixed-Point Results 22-24 Single-Precision Conversion 23 Generate Single-Precision C Code at the Command Line 23-2 Prerequisites . 23-2 Create a Folder and Copy Relevant Files . 23-2 Determine the Type of the Input Argument . 23-4 Generate and Run Single-Precision MEX to Verify Numerical Behavior . 23-4 Generate Single-Precision C Code 23-4 View the Generated Single-Precision C Code . 23-4 View Potential Data Type Issues . 23-5 Generate Single-Precision C Code Using the MATLAB Coder App . 23-6 Prerequisites . 23-6 Create a Folder and Copy Relevant Files . 23-6 Open the MATLAB Coder App . 23-8 Select the Source Files 23-8 Enable Single-Precision Conversion 23-8 Define Input Types . 23-9 Check for Run-Time Issues . 23-9 Generate Single-Precision C Code 23-10 xixView the Generated C Code . 23-10 View Potential Data Type Issues 23-10 Generate Single-Precision MATLAB Code 23-11 Prerequisites 23-11 Create a Folder and Copy Relevant Files 23-11 Set Up the Single-Precision Configuration Object . 23-12 Generate Single-Precision MATLAB Code . 23-13 View the Type Proposal Report . 23-13 View Generated Single-Precision MATLAB Code 23-14 View Potential Data Type Issues 23-14 Compare the Double-Precision and Single-Precision Variables . 23-15 Optionally Generate Single-Precision C Code 23-16 Choose a Single-Precision Conversion Workflow 23-18 Single-Precision Conversion Best Practices 23-19 Use Integers for Index Variables 23-19 Limit Use of assert Statements . 23-19 Initialize MATLAB Class Properties in Constructor 23-19 Provide a Test File That Calls Your MATLAB Function 23-19 Prepare Your Code for Code Generation 23-20 Verify Double-Precision Code Before Single-Precision Conversion . 23-20 Best Practices for Generation of Single-Precision C/C++ Code . 23-20 Best Practices for Generation of Single-Precision MATLAB Code 23-21 Warnings from Conversion to Single-Precision C/C++ Code . 23-22 Function Uses Double-Precision in the C89/C90 Standard . 23-22 Built-In Function Is Implemented in Double-Precision 23-22 Built-In Function Returns Double-Precision . 23-23 Combining Integers and Double-Precision Numbers . 23-24 MATLAB Language Features Supported for Single-Precision Conversion 23-25 MATLAB Language Features Supported for Single-Precision Conversion 23-25 MATLAB Language Features Not Supported for Single-Precision Conversion 23-26 Setting Up a MATLAB Coder Project 24 Set Up a MATLAB Coder Project 24-2 Create a Project . 24-2 Open an Existing Project 24-2 Specify Properties of Entry-Point Function Inputs Using the App . 24-3 Why Specify Input Properties? 24-3 Specify an Input Definition Using the App 24-3 Automatically Define Input Types by Using the App . 24-4 xx ContentsMake Dimensions Variable-Size When They Meet Size Threshold . 24-5 Define Input Parameter by Example by Using the App . 24-6 Define an Input Parameter by Example 24-6 Specify Input Parameters by Example . 24-7 Specify a String Scalar Input Parameter by Example 24-8 Specify a Structure Type Input Parameter by Example 24-8 Specify a Cell Array Type Input Parameter by Example 24-9 Specify an Enumerated Type Input Parameter by Example 24-10 Specify an Object Input Type Parameter by Example 24-11 Specify a Fixed-Point Input Parameter by Example 24-12 Specify an Input from an Entry-Point Function Output Type . 24-13 Define or Edit Input Parameter Type by Using the App . 24-14 Define or Edit an Input Parameter Type 24-14 Specify a String Scalar Input Parameter 24-15 Specify an Enumerated Type Input Parameter . 24-15 Specify a Fixed-Point Input Parameter . 24-16 Specify a Structure Input Parameter . 24-16 Specify a Cell Array Input Parameter 24-18 Define Constant Input Parameters Using the App . 24-23 Define Inputs Programmatically in the MATLAB File 24-24 Add Global Variables by Using the App 24-25 Specify Global Variable Type and Initial Value Using the App 24-26 Why Specify a Type Definition for Global Variables? . 24-26 Specify a Global Variable Type . 24-26 Define a Global Variable by Example . 24-26 Define or Edit Global Variable Type . 24-27 Define Global Variable Initial Value 24-27 Define Global Variable Constant Value . 24-28 Remove Global Variables . 24-28 Undo and Redo Changes to Type Definitions in the App 24-29 Code Generation Readiness Screening in the MATLAB Coder App 24-30 Slow Operations in MATLAB Coder App . 24-31 Unable to Open a MATLAB Coder Project 24-32 Preparing MATLAB Code for C/C++ Code Generation 25 Workflow for Preparing MATLAB Code for Code Generation 25-2 See Also . 25-2 Fixing Errors Detected at Design Time . 25-3 See Also . 25-3 xxiUsing the Code Analyzer . 25-4 Check Code with the Code Analyzer 25-5 Check Code by Using the Code Generation Readiness Tool . 25-7 Run Code Generation Readiness Tool at the Command Line 25-7 Run Code Generation Readiness Tool from the Current Folder Browser . 25-7 Run the Code Generation Readiness Tool Using the MATLAB Coder App . 25-7 Code Generation Readiness Tool 25-8 Issues Tab . 25-8 Files Tab . 25-9 Unable to Determine Code Generation Readiness . 25-11 Generate MEX Functions by Using the MATLAB Coder App . 25-12 Workflow for Generating MEX Functions Using the MATLAB Coder App 25-12 Generate a MEX Function Using the MATLAB Coder App . 25-12 Configure Project Settings 25-14 Build a MATLAB Coder Project . 25-14 See Also 25-15 Generate MEX Functions at the Command Line . 25-16 Command-line Workflow for Generating MEX Functions 25-16 Generate a MEX Function at the Command Line 25-16 Fix Errors Detected at Code Generation Time 25-17 See Also 25-17 Running and Debugging MEX Functions 25-18 Debug MEX Functions . 25-18 Debug MEX Functions by Using a C/C++ Debugger . 25-18 Debugging Strategies 25-19 Collect and View Line Execution Counts for Your MATLAB Code . 25-20 Resolve Error: Function Is Not Supported for Code Generation 25-23 Issue 25-23 Possible Solutions . 25-23 Debug Generated C/C++ Code . 25-25 Testing MEX Functions in MATLAB 26 Why Test MEX Functions in MATLAB? 26-2 xxii ContentsWorkflow for Testing MEX Functions in MATLAB . 26-3 See Also . 26-3 Running MEX Functions . 26-4 Debug MEX Functions 26-4 Debug MEX Functions by Using a C/C++ Debugger 26-4 Check for Run-Time Issues by Using the App 26-5 Collect MATLAB Line Execution Counts . 26-5 Disable JIT Compilation for Parallel Loops . 26-5 Verify MEX Functions in the MATLAB Coder App . 26-7 Verify MEX Functions at the Command Line . 26-8 Debug Run-Time Errors 26-9 Viewing Errors in the Run-Time Stack . 26-9 Handling Run-Time Errors 26-10 Using MEX Functions That MATLAB Coder Generates . 26-11 Generating C/C++ Code from MATLAB Code 27 Code Generation Workflow . 27-3 See Also . 27-3 Generating Standalone C/C++ Executables from MATLAB Code 27-4 Generate a C Executable Using the MATLAB Coder App . 27-4 Generate a C Executable at the Command Line 27-10 Specifying main Functions for C/C++ Executables 27-11 Specify main Functions 27-12 Configure Build Settings 27-13 Specify Build Type 27-13 Specify a Language for Code Generation . 27-15 Specify Output File Name . 27-16 Specify Output File Locations 27-16 Parameter Specification Methods . 27-17 Specify Build Configuration Parameters 27-17 Specify Configuration Parameters in Command-Line Workflow Interactively 27-22 Create and Modify Configuration Objects by Using the Dialog Box 27-22 Additional Functionalities in the Dialog Box . 27-22 Specify Data Types Used in Generated Code 27-25 Specify Data Type Using the MATLAB Coder App . 27-25 Specify Data Type at the Command Line 27-25 Use Generated Initialize and Terminate Functions 27-26 Initialize Function 27-26 xxiiiTerminate Function . 27-28 Change the Language Standard 27-30 Convert codegen Command to Equivalent MATLAB Coder Project 27-31 Example: Convert a Complete codegen Command to a Project File 27-31 Example: Convert an Incomplete codegen Command to a Template Project File . 27-32 Limitations 27-32 Share Build Configuration Settings . 27-34 Export Settings 27-34 Import Settings 27-35 Convert MATLAB Coder Project to MATLAB Script 27-36 Convert a Project Using the MATLAB Coder App . 27-36 Convert a Project Using the Command-Line Interface 27-36 Run the Script . 27-36 Special Cases That Generate Additional MAT-File . 27-37 Preserve Variable Names in Generated Code . 27-39 Reserved Keywords 27-40 C Reserved Keywords 27-40 C++ Reserved Keywords . 27-40 Keywords Reserved for Code Generation . 27-41 Reserved Prefixes . 27-42 MATLAB Coder Code Replacement Library Keywords 27-42 Specify Properties of Entry-Point Function Inputs . 27-44 Why You Must Specify Input Properties 27-44 Properties to Specify 27-44 Rules for Specifying Properties of Primary Inputs . 27-47 Methods for Defining Properties of Primary Inputs 27-47 Define Input Properties by Example at the Command Line 27-48 Specify Constant Inputs at the Command Line . 27-50 Specify Variable-Size Inputs at the Command Line 27-51 Input Type Specification and arguments blocks 27-52 Specify Cell Array Inputs at the Command Line . 27-54 Specify Cell Array Inputs by Example 27-54 Specify the Type of the Cell Array Input 27-55 Make a Homogeneous Copy of a Type 27-55 Make a Heterogeneous Copy of a Type . 27-56 Specify Variable-Size Cell Array Inputs . 27-57 Specify Type Name for Heterogeneous Cell Array Inputs . 27-58 Specify Constant Cell Array Inputs 27-58 Constant Input Checking in MEX Functions 27-59 Control Whether a MEX Function Checks the Value of a Constant Input 27-60 Define Input Properties Programmatically in the MATLAB File 27-63 How to Use assert with MATLAB Coder 27-63 Rules for Using assert Function 27-67 xxiv ContentsSpecifying General Properties of Primary Inputs 27-68 Specifying Properties of Primary Fixed-Point Inputs . 27-69 Specifying Properties of Cell Arrays . 27-69 Specifying Class and Size of Scalar Structure 27-70 Specifying Class and Size of Structure Array 27-71 Create and Edit Input Types by Using the Coder Type Editor 27-72 Open the Coder Type Editor . 27-72 Common Editor Actions 27-72 Type Browser Pane 27-73 Type Properties Pane 27-74 MATLAB Code Pane . 27-75 Speed Up Compilation by Generating Only Code 27-77 Disable Creation of the Code Generation Report 27-78 Paths and File Infrastructure Setup 27-79 Compile Path Search Order . 27-79 Specify Folders to Search for Custom Code 27-79 Naming Conventions 27-79 Generate Code for Multiple Entry-Point Functions 27-81 Generating Code for Multiple Entry-Point Functions . 27-81 Call a Single Entry-Point Function from a MEX Function . 27-82 Generate Code for More Than One Entry-Point Function Using the MATLAB Coder App 27-82 Generate One MEX Function for Multiple Signatures 27-85 Generate Multisignature MEX Function for a Single Entry-Point Function 27-85 Generate Multisignature MEX Function for Multiple Entry-Point Functions 27-86 Pass an Entry-Point Function Output as an Input . 27-88 Pass an Entry-Point Function Output as an Input to Another Entry-Point Function 27-88 Use coder.OutputType to Facilitate Code Componentization . 27-89 Generate Code for Global Data . 27-91 Workflow . 27-91 Declare Global Variables 27-91 Define Global Data 27-91 Synchronizing Global Data with MATLAB . 27-93 Define Constant Global Data . 27-95 Global Data Limitations for Generated Code . 27-97 Specify Global Cell Arrays at the Command Line 27-99 Generate Code for Enumerations 27-100 Generate Code for Variable-Size Data 27-101 Disable Support for Variable-Size Data 27-101 Control Dynamic Memory Allocation 27-101 Generating Code for MATLAB Functions with Variable-Size Data 27-103 xxvGenerate Code for a MATLAB Function That Expands a Vector in a Loop . 27-104 How MATLAB Coder Partitions Generated Code . 27-109 Partitioning Generated Files 27-109 How to Select the File Partitioning Method . 27-109 Partitioning Generated Files with One C/C++ File Per MATLAB File 27-109 Generated Files and Locations 27-113 File Partitioning and Inlining . 27-115 Requirements for Signed Integer Representation 27-118 Build Process Customization . 27-119 RTW.BuildInfo Methods . 27-119 coder.updateBuildInfo Function . 27-120 coder.ExternalDependency Class 27-120 Post-Code-Generation Command 27-120 Run-time Stack Overflow 27-122 Compiler and Linker Errors 27-123 Failure to Specify a Main Function . 27-123 Failure to Specify External Code Files 27-123 Errors Caused by External Code . 27-124 Pass Structure Arguments by Reference or by Value in Generated Code . 27-125 Name the C Structure Type to Use With a Global Structure Variable 27-132 Generate Code for an LED Control Function That Uses Enumerated Types . 27-134 Generate Code That Uses N-Dimensional Indexing . 27-137 Improve Readability with N-Dimensional Indexing and Row-Major Layout . 27-137 Column-Major Layout and N-Dimensional Indexing . 27-138 Other Code Generation Considerations 27-139 Install OpenMP Library on macOS Platform . 27-141 Generate Code to Detect Edges on Images 27-142 C Code Generation for a MATLAB Kalman Filtering Algorithm . 27-148 Generate Code to Optimize Portfolio by Using Black Litterman Approach . 27-157 Generate Code for Persistent Variables . 27-167 Generate Code for Structure Arrays . 27-171 Add Custom Toolchains to MATLAB Coder Build Process . 27-173 xxvi ContentsGenerate Code for Sobel Edge Detection That Uses Half-Precision Data Type . 27-182 Build Process Support for File and Folder Names . 28-25 Filenames with Spaces . 28-25 Folder Names with Spaces 28-25 Troubleshooting Errors When Folder Names Have Spaces 28-27 Folder Names with Special Characters . 28-28 Very Long Folder Paths . 28-28 Generate Code That Reads Data from a File 28-29 Verify Generated C/C++ Code 29 Tracing Generated C/C++ Code to MATLAB Source Code 29-2 Generate Traceability Tags . 29-2 Format of Traceability Tags 29-2 Location of Comments in Generated Code 29-2 Traceability Tag Limitations 29-6 Code Generation Reports 29-7 Report Generation . 29-7 Report Location . 29-8 Errors and Warnings 29-8 Files and Functions 29-8 MATLAB Source . 29-9 MATLAB Variables 29-10 Tracing Code 29-11 Code Insights 29-11 Additional Reports 29-12 Report Limitations 29-12 Access Code Generation Report Information Programmatically 29-13 Create Report Information Object . 29-13 Example: Create Report Information Object for Successful Code Generation 29-13 Example: Create Report Information Object for Successful Code Generation That Checks Out Toolbox Licenses 29-16 Example: Create Report Information Object for Failed Code Generation 29-17 Inspect Code Manually . 29-18 Transferring Code Configuration Objects to a New MATLAB Session 29-19 Generate Standalone C/C++ Code That Detects and Reports Run-Time Errors . 29-20 Generated C Code vs. Generated C++ Code . 29-20 Example: Compare Generated C and C++ Code That Include Run-Time Checks . 29-20 Limitations 29-23 xxviiExample: Generate Standalone C Code That Detects and Reports RunTime Errors 29-25 Testing Code Generated from MATLAB Code . 29-27 Unit Test Generated Code with MATLAB Coder . 29-28 Unit Test External C Code with MATLAB Coder . 29-34 Calculate Number of Lines of Code by Using Report Information Object 29-44 Code Replacement for MATLAB Code 30 What Is Code Replacement? 30-2 Code Replacement Libraries 30-2 Code Replacement Terminology . 30-4 Code Replacement Limitations 30-5 Choose a Code Replacement Library . 30-6 About Choosing a Code Replacement Library . 30-6 Explore Available Code Replacement Libraries 30-6 Explore Code Replacement Library Contents . 30-6 Replace Code Generated from MATLAB Code 30-8 Generate SIMD Code for MATLAB Functions . 30-10 MATLAB Functions That Support SIMD Code 30-10 Generate SIMD Code Versus Plain C Code 30-12 Limitations 30-14 Custom Toolchain Registration 31 Custom Toolchain Registration . 31-2 What Is a Custom Toolchain? . 31-2 What Is a Factory Toolchain? . 31-2 What is a Toolchain Definition? 31-2 Key Terms . 31-3 Typical Workflow 31-3 About coder.make.ToolchainInfo 31-5 Create and Edit Toolchain Definition File . 31-7 Toolchain Definition File with Commentary . 31-8 Steps Involved in Writing a Toolchain Definition File 31-8 Write a Function That Creates a ToolchainInfo Object . 31-8 xxviii ContentsSetup . 31-9 Macros 31-9 C Compiler . 31-9 C++ Compiler . 31-10 Linker . 31-10 Archiver 31-11 Builder . 31-11 Build Configurations . 31-11 Create and Validate ToolchainInfo Object 31-13 Register the Custom Toolchain 31-14 Use the Custom Toolchain 31-16 Troubleshooting Custom Toolchain Validation 31-17 Build Tool Command Path Incorrect . 31-17 Build Tool Not in System Path 31-17 Tool Path Does Not Exist 31-18 Path Incompatible with Builder or Build Tool 31-18 Unsupported Platform . 31-18 Toolchain is Not installed . 31-18 Project or Configuration Is Using the Template Makefile 31-19 Prevent Circular Data Dependencies with One-Pass or Single-Pass Linkers 31-20 Build 32-bit DLL on 64-bit Windows Platform Using MSVC Toolchain 31-21 Deploying Generated Code 32 C Compiler Considerations for Signed Integer Overflows 32-2 Use C Arrays in the Generated Function Interfaces . 32-3 Implementation of Arrays in the Generated C/C++ Code 32-3 The emxArray Dynamic Data Structure Definition 32-4 Utility Functions for Interacting with emxArray Data . 32-5 Examples 32-6 Use Dynamically Allocated C++ Arrays in Generated Function Interfaces 32-15 Using the coder::array Class Template . 32-15 Examples . 32-16 Change Interface Generation 32-19 Use a Dynamic Library in a Microsoft Visual Studio Project . 32-20 Incorporate Generated Code Using an Example Main Function 32-23 Workflow for Using an Example Main Function . 32-23 Control Example Main Generation Using the MATLAB Coder App . 32-23 xxixControl Example Main Generation Using the Command-Line Interface 32-24 Use an Example C Main in an Application 32-25 Prerequisites 32-25 Create a Folder and Copy Relevant Files 32-25 Run the Sobel Filter on the Image 32-27 Generate and Test a MEX Function 32-29 Generate an Example Main Function for sobel.m . 32-29 Copy the Example Main Files 32-32 Modify the Generated Example Main Function . 32-32 Generate the Sobel Filter Application 32-40 Run the Sobel Filter Application 32-41 Display the Resulting Image . 32-41 Package Code for Other Development Environments . 32-42 When to Package Code . 32-42 Package Generated Code Using the MATLAB Coder App 32-42 Package Generated Code at the Command Line 32-43 Specify packNGo Options . 32-44 Structure of Generated Example C/C++ Main Function 32-46 Contents of the File main.c or main.cpp 32-46 Contents of the File main.h 32-48 Troubleshoot Failures in Deployed Code . 32-50 Using Dynamic Memory Allocation for an Atoms Simulation 32-51 Register New Hardware Devices . 32-56 Specify Hardware Implementation for New Device 32-56 Specify Hardware Implementation That Persists Over MATLAB Sessions 32-57 Create Hardware Implementation by Modifying Existing Implementation 32-57 Create Hardware Implementation by Reusing Existing Implementation 32-57 Validate Hardware Device Data 32-58 Export Hardware Device Data . 32-59 Create Alternative Identifier for Target Object . 32-59 Upgrade Data Definitions for Hardware Devices 32-60 Configure CMake Build Process 32-62 Specify CMake Toolchain Definition . 32-62 Available CMake Toolchain Definitions . 32-63 Create Custom CMake Toolchain Definition 32-65 Deploy Generated C Code to External Hardware: Raspberry Pi Examples 32-68 Prerequisites 32-68 Hardware Implementation Parameters . 32-69 Hello World Example 32-70 Spring Mass Damper System Example . 32-71 xxx ContentsDeploy Generated Code . 32-75 Main Function . 32-75 Generated Function Interfaces . 32-75 Executable Applications 32-76 Static and Dynamic Libraries 32-77 Generated File Structure . 32-77 Code Verification . 32-78 Custom Hardware Considerations 32-78 Other Deployment Strategies 32-78 Approaches for Building Code Generated from MATLAB Code . 32-79 Accelerating MATLAB Algorithms 33 Workflow for Accelerating MATLAB Algorithms 33-2 See Also . 33-2 Best Practices for Using MEX Functions to Accelerate MATLAB Algorithms 33-3 Accelerate Code That Dominates Execution Time 33-3 Include Loops Inside MEX Function 33-3 Avoid Generating MEX Functions from Unsupported Functions . 33-4 Avoid Generating MEX Functions if Built-In MATLAB Functions Dominate Run Time 33-4 Minimize MEX Function Calls . 33-4 Accelerate MATLAB Algorithms . 33-6 Modifying MATLAB Code for Acceleration 33-7 How to Modify Your MATLAB Code for Acceleration 33-7 Profile MEX Functions by Using MATLAB Profiler 33-8 MEX Profile Generation . 33-8 Example . 33-8 Effect of Folding Expressions on MEX Code Coverage . 33-11 Control Run-Time Checks . 33-12 Types of Run-Time Checks 33-12 When to Disable Run-Time Checks 33-12 How to Disable Run-Time Checks . 33-13 Algorithm Acceleration Using Parallel for-Loops (parfor) . 33-14 Parallel for-Loops (parfor) in Generated Code 33-14 How parfor-Loops Improve Execution Speed . 33-14 When to Use parfor-Loops 33-15 When Not to Use parfor-Loops . 33-15 parfor-Loop Syntax 33-15 parfor Restrictions 33-16 Control Compilation of parfor-Loops 33-18 When to Disable parfor . 33-18 xxxiReduction Assignments in parfor-Loops . 33-19 What are Reduction Assignments? 33-19 Multiple Reductions in a parfor-Loop 33-19 Classification of Variables in parfor-Loops . 33-20 Overview . 33-20 Sliced Variables 33-21 Broadcast Variables . 33-22 Reduction Variables . 33-22 Temporary Variables . 33-27 Accelerate MATLAB Algorithms That Use Parallel for-Loops (parfor) 33-29 Specify Maximum Number of Threads in parfor-Loops . 33-30 Troubleshooting parfor-Loops . 33-31 Global or Persistent Declarations in parfor-Loop 33-31 Compiler Does Not Support OpenMP 33-31 Generate MEX Code to Accelerate Simulation of Bouncing Balls . 33-32 Generate MEX Code to Calculate Geodesics in Curved Space-Time . 33-36 Generate Accelerated MEX Code for Reverberation Using MATLAB Classes 33-40 Using PARFOR to Speed Up an Image Contrast Enhancement Algorithm 33-42 Use Generated Code to Accelerate an Application Deployed with MATLAB Compiler . 33-51 External Code Integration 34 Call Custom C/C++ Code from the Generated Code . 34-2 Call C Code 34-2 Return Multiple Values from a C Function 34-3 Pass Data by Reference . 34-4 Integrate External Code that Uses Custom Data Types 34-5 Integrate External Code that Uses Pointers, Structures, and Arrays 34-6 Configure Build for External C/C++ Code . 34-9 Provide External Files for Code Generation 34-9 Configure Build from Within a Function . 34-9 Configure Build by Using the Configuration Object 34-10 Configure Build by Using the MATLAB Coder App 34-11 Develop Interface for External C/C++ Code 34-12 Create a class from coder.ExternalDependency . 34-12 Best Practices for Using coder.ExternalDependency . 34-13 xxxii ContentsMapping MATLAB Types to Types in Generated Code 34-15 Complex Types . 34-16 Structure Types 34-16 Fixed-Point Types . 34-16 Character Vectors . 34-17 Multiword Types . 34-17 Generate Code to Read a Text File 34-19 Generate C/C++ Strings from MATLAB Strings and Character Row Vectors 34-27 Add New Line to Strings in Generated Code . 34-27 Limitations 34-28 Generate Efficient and Reusable Code 35 Optimization Strategies . 35-3 Modularize MATLAB Code . 35-5 Avoid Data Copies of Function Inputs in Generated Code 35-6 Inline Code 35-8 Control Inlining to Fine-Tune Performance and Readability of Generated Code . 35-9 Control Inlining of a Specific MATLAB Function . 35-9 Control Inlining by Using Code Generation Settings 35-9 Interaction Between Different Inlining Controls 35-11 Example: Control Inlining at the Boundary Between Your Functions and MathWorks Functions 35-11 Fold Function Calls into Constants . 35-14 Control Stack Space Usage 35-15 Stack Allocation and Performance 35-18 Allocate Heap Space from Command Line 35-18 Allocate Heap Space Using the MATLAB Coder App . 35-18 Dynamic Memory Allocation and Performance 35-19 When Dynamic Memory Allocation Occurs 35-19 Minimize Dynamic Memory Allocation 35-20 Provide Maximum Size for Variable-Size Arrays . 35-21 Disable Dynamic Memory Allocation During Code Generation . 35-25 xxxiiiSet Dynamic Memory Allocation Threshold 35-26 Set Dynamic Memory Allocation Threshold Using the MATLAB Coder App 35-26 Set Dynamic Memory Allocation Threshold at the Command Line . 35-26 Optimize Dynamic Array Access 35-28 Disable Cache Dynamic Array Data Pointer Property 35-28 Compare Generated C Code . 35-28 Excluding Unused Paths from Generated Code . 35-30 Prevent Code Generation for Unused Execution Paths . 35-31 Prevent Code Generation When Local Variable Controls Flow 35-31 Prevent Code Generation When Input Variable Controls Flow 35-31 Generate Code with Parallel for-Loops (parfor) . 35-33 Minimize Redundant Operations in Loops . 35-34 Unroll for-Loops and parfor-Loops 35-35 Force for-Loop Unrolling by Using coder.unroll . 35-35 Set Loop Unrolling Threshold for All for-Loops and parfor-Loops in the MATLAB Code . 35-36 Disable Support for Integer Overflow or Nonfinites 35-40 Disable Support for Integer Overflow 35-40 Disable Support for Nonfinite Numbers 35-40 Integrate External/Custom Code . 35-42 MATLAB Coder Optimizations in Generated Code . 35-46 Constant Folding . 35-46 Loop Fusion . 35-47 Successive Matrix Operations Combined . 35-47 Unreachable Code Elimination . 35-47 memcpy Calls 35-48 memset Calls 35-48 Use coder.const with Extrinsic Function Calls 35-49 Reduce Code Generation Time by Using coder.const with feval . 35-49 Force Constant-Folding by Using coder.const with feval 35-49 memcpy Optimization 35-51 memset Optimization 35-52 Reuse Large Arrays and Structures . 35-53 LAPACK Calls in Generated Code . 35-54 Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls 35-55 Specify LAPACK Library 35-55 Write LAPACK Callback Class 35-55 Generate LAPACK Calls by Specifying a LAPACK Callback Class 35-56 xxxiv ContentsLocate LAPACK Library in Execution Environment 35-57 BLAS Calls in Generated Code . 35-58 Speed Up Matrix Operations in Generated Standalone Code by Using BLAS Calls . 35-59 Specify BLAS Library 35-59 Write BLAS Callback Class 35-59 Generate BLAS Calls by Specifying a BLAS Callback Class 35-61 Locate BLAS Library in Execution Environment 35-61 Usage Notes and Limitations for OpenBLAS Library . 35-61 Speed Up Fast Fourier Transforms in Generated Standalone Code by Using FFTW Library Calls . 35-63 FFTW Planning Considerations . 35-63 Install FFTW Library 35-63 Write an FFT Callback Class . 35-64 Generate FFTW Library Calls by Specifying an FFT Library Callback Class 35-65 Synchronize Multithreaded Access to FFTW Planning in Generated Standalone Code 35-67 Prerequisites 35-67 Create a MATLAB Function . 35-67 Write Supporting C Code . 35-68 Write an FFT Library Callback Class . 35-68 Generate a Dynamically Linked Library 35-69 Specify Configuration Parameters in the MATLAB Coder App 35-70 Speed Up MEX Generation by Using JIT Compilation 35-71 Specify Use of JIT Compilation in the MATLAB Coder App 35-71 Specify Use of JIT Compilation at the Command Line 35-71 JIT Compilation Incompatibilities . 35-71 Automatically Parallelize for Loops in Generated Code . 35-73 Parallelize for Loops by Using MATLAB Coder App 35-73 Parallelize for Loops at Command Line . 35-73 Inspect Generated Code and Code Insights 35-74 Disable Automatic Parallelization of a for Loop . 35-75 Parallelize Implicit for Loops 35-75 Parallelize for Loops Performing Reduction Operations . 35-76 Usage Notes and Limitations 35-77 Specify Maximum Number of Threads to Run Parallel for-Loops in the Generated Code . 35-79 Specify Number of Threads by Using MATLAB Coder App 35-79 Specify Number of Threads at the Command Line . 35-80 Create Custom Hardware Processor . 35-81 Optimize Generated Code for Fast Fourier Transform Functions . 35-83 Intel Target Support . 35-83 ARM Target Support . 35-84 MEX Target Support . 35-85 xxxvGenerating Reentrant C Code from MATLAB Code 36 Generate Reentrant C Code from MATLAB Code . 36-2 About This Tutorial . 36-2 Copying Files Locally . 36-3 About the Example . 36-3 Providing a C main Function 36-4 Configuring Build Parameters . 36-6 Generating the C Code 36-6 Viewing the Generated C Code 36-6 Running the Code 36-7 Key Points to Remember . 36-7 Learn More 36-8 Reentrant Code 36-9 Specify Generation of Reentrant Code 36-11 Specify Generation of Reentrant Code Using the MATLAB Coder App 36-11 Specify Generation of Reentrant Code Using the Command-Line Interface 36-11 API for Generated Reusable Code 36-12 Call Reentrant Code in a Single-Threaded Environment 36-13 Call Reentrant Code in a Multithreaded Environment 36-14 Multithreaded Examples 36-14 Call Reentrant Code with No Persistent or Global Data (UNIX Only) 36-15 Provide a Main Function 36-15 Generate Reentrant C Code . 36-17 Examine the Generated Code 36-17 Run the Code 36-18 Call Reentrant Code — Multithreaded with Persistent Data (Windows Only) 36-19 MATLAB Code for This Example 36-19 Provide a Main Function 36-19 Generate Reentrant C Code . 36-22 Examine the Generated Code 36-22 Run the Code 36-23 Call Reentrant Code — Multithreaded with Persistent Data (UNIX Only) 36-24 MATLAB Code for This Example 36-24 Provide a Main Function 36-24 Generate Reentrant C Code . 36-27 Examine the Generated Code 36-28 Run the Code 36-28 xxxvi ContentsTroubleshooting Code Generation Problems 37 JIT MEX Incompatibility Warning . 37-2 Issue . 37-2 Cause . 37-2 Solution . 37-2 JIT Compilation Does Not Support OpenMP . 37-3 Issue . 37-3 Cause . 37-3 Solution . 37-3 Output Variable Must Be Assigned Before Run-Time Recursive Call . 37-4 Issue . 37-4 Cause . 37-4 Solution . 37-4 Compile-Time Recursion Limit Reached 37-7 Issue . 37-7 Cause . 37-7 Solutions 37-7 Force Run-Time Recursion . 37-7 Increase the Compile-Time Recursion Limit 37-9 Unable to Determine That Every Element of Cell Array Is Assigned 37-10 Issue 37-10 Cause 37-10 Solution 37-11 Nonconstant Index into varargin or varargout in a for-Loop 37-14 Issue 37-14 Cause 37-14 Solution 37-14 Unknown Output Type for coder.ceval . 37-16 Issue 37-16 Cause 37-16 Solution 37-16 MEX Generated on macOS Platform Stays Loaded in Memory . 37-18 Issue 37-18 Cause 37-18 Solution 37-18 Resolve Error: Code Generator Failed to Produce C++ Destructor for MATLAB Class 37-20 Issue 37-20 Possible Solutions . 37-20 xxxviiRow-Major Array Layout 38 Row-Major and Column-Major Array Layouts 38-2 Array Storage in Computer Memory 38-2 Conversions Between Different Array Layouts 38-2 Generate Code That Uses Row-Major Array Layout . 38-4 Specify Row-Major Layout . 38-4 Array Layout and Algorithmic Efficiency . 38-5 Row-Major Layout for N-Dimensional Arrays . 38-6 Specify Array Layout in External Function Calls . 38-7 Deep Learning with MATLAB Coder 39 Prerequisites for Deep Learning with MATLAB Coder . 39-2 MathWorks Products . 39-2 Third-Party Hardware and Software 39-2 Environment Variables 39-4 Workflow for Deep Learning Code Generation with MATLAB Coder 39-7 Networks and Layers Supported for Code Generation . 39-8 Supported Pretrained Networks . 39-8 Supported Layers 39-9 Supported Classes 39-20 int8 Code Generation 39-27 Analyze Network for Code Generation . 39-29 Check dlnetwork for Code Generation Compatibility . 39-29 Analyze Classification Network for Code Generation Compatibility 39-31 Load Pretrained Networks for Code Generation . 39-37 Load a Network by Using coder.loadDeepLearningNetwork . 39-37 Specify a Network Object for Code Generation . 39-37 Specify a dlnetwork Object for Code Generation 39-38 Generate Generic C/C++ Code for Deep Learning Networks . 39-40 Requirements 39-40 Code Generation by Using codegen . 39-40 Code Generation by Using the MATLAB Coder App 39-41 Code Generation for Deep Learning Networks with MKL-DNN . 39-43 Requirements 39-43 Code Generation by Using codegen . 39-43 Code Generation by Using the MATLAB Coder App 39-44 Code Generation for Deep Learning Networks with ARM Compute Library 39-46 Requirements 39-46 xxxviii ContentsCode Generation by Using codegen . 39-46 Code Generation by Using the MATLAB Coder App 39-49 Cross-Compile Deep Learning Code That Uses ARM Compute Library 39-51 Prerequisites 39-51 Generate and Deploy Deep Learning Code 39-52 Generate int8 Code for Deep Learning Networks 39-54 ARM Cortex-A Processors . 39-54 ARM Cortex-M Processors 39-55 Update Network Parameters After Code Generation . 39-57 Create an Entry-Point Function . 39-57 Create a Network . 39-57 Code Generation by Using codegen . 39-58 Run the Generated MEX 39-58 Update Network with Different Learnable Parameters . 39-59 Run the Generated MEX with Updated Learnables 39-59 Limitations 39-60 Deep Learning Code Generation on Intel Targets for Different Batch Sizes 39-61 Deep Learning Prediction with ARM Compute Using codegen . 39-70 Code Generation for Deep Learning on ARM Targets 39-75 Generate C++ Code for Object Detection Using YOLO v2 and Intel MKLDNN 39-80 Code Generation and Deployment of MobileNet-v2 Network to Raspberry Pi . 39-83 Code Generation for Semantic Segmentation Application on Intel CPUs That Uses U-Net . 39-87 Code Generation for Semantic Segmentation Application on ARM Neon Targets That Uses U-Net 39-96 Code Generation for LSTM Network on Raspberry Pi . 39-105 Code Generation for LSTM Network That Uses Intel MKL-DNN . 39-112 Code Generation for Convolutional LSTM Network That Uses Intel MKLDNN . 39-116 Cross Compile Deep Learning Code for ARM Neon Targets 39-120 Generate INT8 Code for Deep Learning Network on Raspberry Pi . 39-126 Generate INT8 Code for Deep Learning Network on Cortex-M Target . 39-134 xxxixGenerate Generic C/C++ Code for Sequence-to-Sequence Regression That Uses Deep Learning 39-137 Generate Digit Images Using Variational Autoencoder on Intel CPUs . 39-146 Post-Code-Generation Update of Deep Learning Network Parameters . 39-152 Generate Code for LSTM Network and Deploy on Cortex-M Target 39-161 Prune Filters in a Detection Network Using Taylor Scores . 39-168 Generating Code for C++ 40 C++ Code Generation . 40-2 Generate C++ Code 40-2 C++ Language Features Supported in Generated Code . 40-2 Additional Differences Between Generated C Code and C++ Code . 40-3 Generate C++ Code with Class Interface . 40-4 Generate C++ Code with a Class Interface . 40-4 Globals and Persistents in a Generated C++ Class . 40-6 Put Multiple Entry-Point Functions in the Same Class . 40-7 Organize Generated C++ Code into Namespaces . 40-9 Settings That Control Namespace Structure 40-9 Example: Generate C++ Code with Namespaces . 40-10 Integrate Multiple Generated C++ Code Projects . 40-14 Generate C++ Classes for MATLAB Classes That Model Simple and Damped Oscillators 40-18 Simulation Data Inspector 41 View Data in the Simulation Data Inspector . 41-2 View Logged Data . 41-2 Import Data from the Workspace or a File 41-3 View Complex Data 41-5 View String Data 41-6 View Frame-Based Data . 41-9 View Event-Based Data 41-9 Import Data from a CSV File into the Simulation Data Inspector 41-11 Basic File Format . 41-11 Multiple Time Vectors 41-11 xl ContentsSignal Metadata 41-12 Import Data from a CSV File . 41-13 Microsoft Excel Import, Export, and Logging Format 41-16 Basic File Format . 41-16 Multiple Time Vectors 41-16 Signal Metadata 41-17 User-Defined Data Types . 41-19 Complex, Multidimensional, and Bus Signals 41-21 Function-Call Signals 41-21 Simulation Parameters . 41-22 Multiple Runs 41-22 Configure the Simulation Data Inspector 41-24 Logged Data Size and Location . 41-24 Archive Behavior and Run Limit 41-25 Incoming Run Names and Location 41-26 Signal Metadata to Display 41-27 Signal Selection on the Inspect Pane 41-28 How Signals Are Aligned for Comparison . 41-28 Colors Used to Display Comparison Results . 41-29 Signal Grouping 41-29 Data to Stream from Parallel Simulations . 41-30 Options for Saving and Loading Session Files 41-30 Signal Display Units . 41-30 How the Simulation Data Inspector Compares Data . 41-32 Signal Alignment . 41-32 Synchronization 41-33 Interpolation 41-34 Tolerance Specification . 41-34 Limitations 41-36 Save and Share Simulation Data Inspector Data and Views . 41-37 Save and Load Simulation Data Inspector Sessions 41-37 Share Simulation Data Inspector Views 41-38 Share Simulation Data Inspector Plots . 41-38 Create Simulation Data Inspector Report . 41-39 Export Data to the Workspace or a File . 41-40 Export Video Signal to an MP4 File 41-41 Inspect and Compare Data Programmatically 41-43 Create a Run and View the Data 41-43 Compare Two Signals in the Same Run . 41-44 Compare Runs with Global Tolerance 41-45 Analyze Simulation Data Using Signal Tolerances . 41-46 Limit the Size of Logged Data . 41-49 Limit the Number of Runs Retained in the Simulation Data Inspector Archive . 41-49 Specify a Minimum Disk Space Requirement or Maximum Size for Logged Data . 41-49 View Data Only During Simulation 41-50 Reduce the Number of Data Points Logged from Simulation . 41-50 #ماتلاب,#متلاب,#Matlab,
كلمة سر فك الضغط : books-world.net The Unzip Password : books-world.net أتمنى أن تستفيدوا من محتوى الموضوع وأن ينال إعجابكم رابط من موقع عالم الكتب لتنزيل كتاب MATLAB Coder - User's Guide رابط مباشر لتنزيل كتاب MATLAB Coder - User's Guide
|
|