Configure Data Interface
Embedded Coder® reduces the effort for configuring data and function interfaces by providing a way to specify default configurations for categories of data elements and functions across a model. Applying default configurations can save time and reduce the risk of introducing errors in code, especially for larger models and models from which you generate multi-instance code. After applying default configurations, you can selectively override the default settings for individual data elements and functions.
Customize the data interface of model
rtwdemo_roll by configuring
Read input data from global variables that are declared and defined in external files
Write output data to global variables that the code generator declares in
output_data.hand defines in
To make these changes, in the MATLAB® Command Window, copy these external code files to your current MATLAB working folder.
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c')); copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
The data interface configuration changes that you make depend on these files being accessible for code generation and the build process. The build process compiles the generated code with the code that is in these files.
Configure Default Code Generation for Data
Configure default code generation configurations for model inports and outports.
In the C Code tab, select Code Interface > Default Code Mappings.
Configure Inport blocks at the root level of the model to appear in the generated code as separate global variables defined by external code. In the Code Mappings editor, under Inports and Outports, select category Inports. Set the default storage class to
With this setting, the generated code does not define global variables that represent the inport data. Instead, a
#includestatement includes a header file that declares the input variables. You specify the name of the header file with the Property Inspector.
In the Property Inspector, set property HeaderFile to
To see how the
externdeclarations in external header file
roll_input_data.hname the input variables, in the MATLAB Command Window, open
roll_input_data.hlocated in your current working folder.
extern boolean_T AP_Eng; extern real32_T HDG_Ref; extern real32_T Rate_FB; extern real32_T Phi; extern real32_T Psi; extern real32_T TAS; extern real32_T Turn_Knob;
Configure the code generation naming rule for global variables. By default, the code generator names global variables with the prefix
rt. For the code generator to produce code that matches the external variable declarations in
roll_input_data.h, configure the code generation naming rule for global variables accordingly.
Open the Model Configuration Parameters dialog box. In the toolstrip, on the C Code tab, click Settings.
Navigate to the Code Generation > Identifiers pane.
Set parameter Global variables to the naming rule
$Nrepresents the name of a data element in the model, for example, the name of an Inport or Outport block. Token
$Mrepresents name-mangling text that the code generator inserts, if necessary, to avoid name collisions with other global variables in the code.
Apply the change.
Configure Outport blocks at the root level of the model to appear in the generated code as separate global variables. In the Code Mappings editor, on the Data Defaults tab, for category Outports, set Storage Class to
The generated code declares and defines the output variables in header and definition files that you specify with the Property Inspector.
In the Property Inspector, specify the names for the generated header and definition files. Set property HeaderFile to
roll_output_data.hand property DefinitionFile to
Configure code generation for the model to include the external source files
roll_heading_mode.c. In the Configuration Parameters dialog box, set Code Generation > Custom Code > Additional build information > Source files to
roll_input_data.c roll_heading_mode.c. Then, click Apply and OK.
Save the model. Regenerate the code by clicking Build.
A compiler error indicates that variable
HDG_Modeis not declared. That variable is not declared in header file
roll_input_data.h, which you declared as the default header file for inports. You fix this error in the next section of this tutorial.
The model is configured to open the code generation report after code generation is complete. Minimize this report window for exploration later in this tutorial.
You configured Inport blocks to use an external header file to declare and define input variables. In the Code view, confirm that the generated code includes this external header file by searching for
Search for the root level Inport block name,
HDG_Ref. As you type, choose the search suggestion with the green
Vicon. This search suggestion finds instances of
HDG_Refused as a variable in the generated code. Confirm that
HDG_Refis defined as a separate global variable.
In the model,
rtwdemo_roll, click the Outport block
Ail_Cmd. Place your cursor over the ellipsis menu above the block and click Navigate To Code. The Code view highlights code in
rtwdemo_roll.cthat corresponds to the block. In the code, place your cursor over the ellipsis menu above the output variable
Ail_Cmd. The traceability dialog box displays variable definitions and model elements that correspond to the code. The dialog box confirms that
Ail_Cmdis defined as a separate global variable. Click the definition code to see the definition in
Override Default Settings for Individual Data Elements
The settings that you choose for a category under Data Defaults apply to elements in that category across a model. To override the default settings for an individual data element, use the Code Mappings editor.
When you generated code after configuring default settings for inports and outports, a
compiler error indicated that variable
HDG_Mode is not declared. You can
fix that error by overriding the default configuration for Inport block
In the Code Mappings editor, on the Inports tab, select source
Set Storage Class to
In the Property Inspector, set Identifier to
HDG_Modeand Header File to
Based on these settings, the code generator imports the declaration for external variable
HDG_Modefrom header file
extern boolean_T HDG_Mode;
Save the model and regenerate the code.
Minimize the code generation report window for exploration later in this tutorial.
In the Code view, search for
roll_heading_mode.hand confirm that it is included in the generated code with the default configuration file
HDG_Modeand confirm that it is defined as a separate global variable.
Next, configure a model parameter to be a global variable in the generated code. As a global variable, you can tune the parameter value at run time.