Controlling C Code Style - MATLAB & Simulink (original) (raw)
About This Tutorial
Learning Objectives
This tutorial shows you how to:
- Generate code for
if-elseif-else
decision logic asswitch-case
statements. - Generate C code from your MATLAB® code using the MATLAB Coder™ app.
- Configure code generation configuration parameters in the MATLAB Coder project.
- Generate a code generation report that you can use to trace between the original MATLAB code and the generated C code.
Required Products
This tutorial requires the following products:
- MATLAB
- MATLAB Coder
- C compiler
MATLAB Coder locates and uses a supported installed compiler. See Supported and Compatible Compilers on the MathWorks® website.
You can usemex -setup
to change the default compiler. See Change Default Compiler.
Required Files
Type | Name | Description |
---|---|---|
Function code | test_code_style.m | MATLAB example that uses if-elseif-else. |
Create File in a Local Working Folder
- Create a local working folder, for example,
c:\ecoder\work
. - Create a file
test_code_style.m
that contains this code:
function y = test_code_style(x)
%#codegen
if (x == 1)
y = 1;
elseif (x == 2)
y = 2;
elseif (x == 3)
y = 3;
else
y = 4;
end
Open the MATLAB Coder App
On the MATLAB Toolstrip Apps tab, under Code Generation, click the MATLAB Coder app icon. The app opens the Create MATLAB Coder Project dialog box.
Provide the name of the project file and the folder in which you want to place the file. For this example, create a file named code_style.coderprj
in your current working folder.
Specify Source Files
- Either click the Add Entry Points button in theInputs section of the MATLAB Coder panel or the Entry Points button in the toolstrip.
- The Entry Points tab opens. Enter the name of your entry-point function
test_code_style
. - The app runs the Code Generation Readiness Tool on the entry-point function. This tool screens the MATLAB code for features and functions that are not supported for code generation. If the app identifies issues with an entry-point function or one of its dependencies, it displays a warning message in the Entry Points tab. In this example, the app does not detect code generation readiness issues in the
test_code_style
function.
Define Input Types
Because C uses static typing, at compile time, the code generator must determine the properties of all variables in the MATLAB files. Therefore, you must specify the properties of all function inputs. To define the properties of the inputx
, in the Entry Points tab:
- Expand the
test_code_style
node. - Click the field to the right of
x
. From the list of options, selectint16
. Leave the size specification to its default value of 1-by-1.
Generate and Run MEX Function
A MEX function is generated code that can be called from inside MATLAB. Before you generate standalone C/C++ code, it is a best practice to generate and run a MEX function. This step enables you can detect and fix run-time errors that are harder to diagnose in the generated standalone C/C++ code. By default, the MEX function includes memory integrity checks. These checks perform array bounds and dimension checking. The checks detect violations of memory integrity in code generated for MATLAB functions. For more information, see Control Run-Time Checks.
- In the Prepare section of the MATLAB Coder tab of the toolstrip, set Output to C and Build type to MEX. Use the default values for the other code configuration settings.
- In the Generate section of the toolstrip, open theGenerate Code drop-down menu and select the
Generate Code and Build
option.
The Output section of the code generation panel indicates that code generation succeeded.
The generated MEX function test_code_style_mex
is located in your current working folder. In the Command Window, run the MEX function with example inputs. For example:
test_code_style_mex(int16(4));
The generated MEX runs without errors.
Configure Code Generation Parameters
In the Prepare section of the MATLAB Coder tab of the toolstrip:
- Set the Build type to
Static Library (.lib)
. - Click Settings and set these parameters:
- On the Code Appearance tab, select the Convert if-elseif-else patterns to switch-case statements check box.
- On the Debugging tab, make sure that Always create a report is selected.
- On the Advanced tab, make sure that Enable code traceability is selected.
Generate Standalone C Code
In the Generate section of the toolstrip, open theGenerate Code drop-down menu and select the Generate Code and Build
option.
When code generation is complete, the code generator produces a C static library,test_code_style.lib
, and C code in the/codegen/lib/test_code_style
subfolder. The Output section of the MATLAB Coder panel provides a link to the report.
View the Generated Code
- To open the code generation report, click the Code generation report link.
Thetest_code_style
function is displayed in the code pane. - To view the MATLAB code and the C code next to each other, click Trace Code.
- In the MATLAB code, place your cursor over the statement
if (x == 1)
.
The report tracesif (x == 1)
to aswitch
statement.