Configure Generated C Function Interface for Model Entry-Point Functions
What Is an Entry-Point Function?
An entry point is a location in code where a transfer of program control (execution)
occurs. The main function (main()) is the entry point to a C/C++ program
and is called when the application starts executing. Calls to other functions, for example
from the main function, provide entry points to function code. Program
control is transferred to the called function. The function code executes, and when finished,
returns control to the main or other calling function.
When producing code for a model, the code generator defines a set of entry-point functions that you can call to execute the generated code. You can call the generated functions from external code or from a version of the generated main function that you modify.
The Code Interface Report section of the code generation report lists the entry-point functions that the code generator produces for a model. For more information, see Analyze Generated Data Code Interface Report.
Types of Generated Entry-Point Functions
The code generator produces entry-point functions for these types of model functions.
| Type of Model Function | Model Source Name | Default Generated Function Name | Description |
|---|---|---|---|
| Exported function (requires Embedded Coder®) | ExportedFunction:,
where is the name of the
function-call Inport block in the model |
or (if specified) | For an exported-function model, the exported function for a subsystem. |
| Initialize function | Initialize | | Initialization code for a model. At the start of the application code,
call the function once. Do not use this function to reset the
real-time model data structure ( |
| Partition function | Partition:, where
is a partition that
was created explicitly from a block in the model and shown in the Simulink® Schedule
Editor (for example, P1), or a task name in the Concurrent Execution dialog | ,
where uniquely identifies the
function generated for one of the model sample periods | For a model partition, output and update code. Model configuration parameter Single output/update function is selected (the default). |
| Partition update function | PartitionUpdate:,
where is a partition that
was created explicitly from a block in the model and shown in the Simulink® Schedule
Editor (for example, P1), or a task name in the Concurrent Execution dialog |
and ,
where uniquely identifies the
function generated for one of the model sample periods | For a model partition, output and update code in separate functions. Model configuration parameter Single output/update function is cleared. |
| Periodic multitasking function | Periodic: where
is an annotation that
corresponds to the sample time period for a periodic or continuous rate of a
multitasking model (for example, D1) | ,
where uniquely identifies the
function generated for one of the model sample periods | For blocks in a rate-based model configured for multitasking, output and update code. The code generator produces a function for each sample period. Model configuration parameter Single output/update function is selected (the default). To learn more about sample time information, see Specify Sample Time. |
| Periodic multitasking update function | PeriodicUpdate:
where is an annotation
that corresponds to the sample time period for a periodic or continuous rate of a
multitasking model (for example, D1) |
and ,
where uniquely identifies the
function generated for one of the model sample periods | For blocks in a rate-based model configured for multitasking, output and update code in separate functions. The code generator produces output and update functions for each sample period. Model configuration parameter Single output/update function is cleared. To learn more about sample time information, see Specify Sample Time. |
| Periodic single-tasking function | Periodic | | For blocks in a rate-based model configured for single-tasking, output and update code. Model configuration parameter Single output/update function is selected (the default). |
| Periodic single-tasking update function | PeriodicUpdate | and | For blocks in a rate-based model configured for single-tasking, output and update code in separate functions. Model configuration parameter Single output/update function is cleared. |
| Reset function | Reset: where
is the name of the
reset function in the model | | If the model includes a Reset Function block, reset code generated. To reset conditions or state, call the function from the application code. |
| Simulink Function | Simulink Function:
where is the name of the
Simulink Function block in the model | for a global
Simulink Function block or
for a scoped Simulink Function block | For an exported-function model, the exported function for a Simulink Function block. |
| Terminate function | Terminate | | Code for turning off a system. For ERT-based models, you can suppress generation of this function by clearing the model configuration parameter Terminate function required (set by default). |
If you have Embedded Coder software, to facilitate integration of external and generated code and achieve compliance with code standards and guidelines, you can configure how the code generator produces function interfaces from a model or subsystem.
Configure Reusability of Entry-Point Functions
By default, top models generate code that is not reusable or reentrant. Entry-point
functions have a void-void interface. Code communicates with other code by
directly accessing global data structures that reside in shared memory.
If your application requires reusable, multi-instance entry-point function code, you can configure the code generator to call each function (instance) with unique data. In this case, the code is reentrant.
You configure whether entry-point functions are reusable with the model configuration parameter Code interface packaging (component) and related parameters. The parameter settings that you choose depend on factors such as configuration selections for the system target file, programming language, and argument interface.
Default Configurations for Single-Instance C Entry-Point Functions
By default, for GRT- and ERT-based system target files, the code generator produces single-instance C entry-point functions. The generated code:
Creates an execution function without arguments (
void-void).Allocates memory statically (at compile time) for model data structures.
The default model configuration parameter settings for configuring single-instance entry-point function code are:
Language set to
C.Code interface packaging (component) set to
Nonreusable function.
Generate Reusable, Multi-Instance C Entry-Point Functions
You can configure the code generator to produce reusable entry-point functions in C for
either a GRT- or ERT-based system target file. However, the function interfaces that the
code generator produces by default varies. Assuming that model configuration parameter Language is set to C and Code interface packaging
(component) is set to Reusable function, the
code generator produces this entry-point function code for each system target file
scenario.
| System Target File | Interface |
|---|---|
| GRT-based |
|
| ERT-based |
|
If you are using an ERT-based system target file and want to generate reusable, multi-instance C entry-point functions that are reentrant, consider:
Using dynamic memory allocation to initialize model data structures. Select Use dynamic memory allocation for model initialization.
Note
If you use dynamic memory allocation for a reusable C function interface, calls to the
rt_VALIDATE_MEMORYmacro appear in the generated code. By default, this function is defined as an empty macro that performs no operations. To add handling of allocation failures, define a custom macro forrt_VALIDATE_MEMORY.Packing values of model root-level Inport blocks into a structure, packing values of root-level Outport blocks into a second structure, and passing the structures to the execution function as arguments by reference. Set Pass root-level I/O as to
Structure reference.Packing values of model root-level Inport blocks and Outport blocks into the real-time model data structure and passing that structure to the execution function as an argument by reference. Set Pass root-level I/O as to
Part of model data structure.
Configure Reusability of Model Reference Entry-Point Functions
By default, model references generate code that is reusable and reentrant. The code generator calls each referenced model function with unique data.
You can configure whether a referenced model entry-point function is reusable with the model configuration parameter Code interface packaging (subcomponent).
By default, nonreusable model references generate code that passes root-level I/O data
to entry-point functions as function arguments. If you are using an ERT-based system target
file, consider eliminating function arguments by passing root-level I/O data as global
variables. Set the model configuration parameter Implement
root-level I/O as to Global
variables.
Choose an Approach for Configuring Generated C Function Interfaces
To facilitate integration of external and generated code and achieve compliance with code standards and guidelines, you can use the Code Mappings editor or code mappings API to configure how the code generator produces function interfaces from a model or subsystem.
For models configured with a service interface, you can configure:
Function name
Function arguments for functions in subcomponents and functions in component models that are represented as Simulink Function blocks
Memory section
| Configuration | More Information |
|---|---|
| Default naming rules for categories of functions (initialize/terminate, execution, and shared utility) across a model | Configure Default Code Generation for Functions |
| Name for individual entry-point functions (override the default naming rule) | Configure Names for Individual C Entry-Point Functions |
| Step function interface (function name, return value, and argument C type qualifiers, names, and order) for the base rate step entry-point function interactively | Configure Name and Arguments for Individual Step Functions |
| Function interfaces (function name, return value, and argument C type qualifiers, names, and order) for Simulink Function and Function Caller blocks interactively | Configure C Entry-Point Function Interfaces for Simulink Function and Function Caller Blocks |
You can use software-in-the-loop (SIL) testing to verify code generated for customized entry-point functions. Create a SIL block by using your generated code. Then, integrate the SIL block into a model to verify that the generated code provides the same result as the original model or nonvirtual subsystem. For more information, see Choose a SIL or PIL Approach.
Configure Default Code Generation Settings for a Function Category
Reduce the effort of preparing a model for C code generation by specifying default configurations for categories of functions across a model. For example, you can configure function name rules and placement of function code in memory sections. Applying default configurations can save time and reduce the risk of introducing errors in code, especially for models that have a large number functions.
The code generator produces entry-point functions for these categories of model functions:
| Function Category | Description |
|---|---|
| Initialize/Terminate | Functions that initialize and turn off a system |
| Execution | Functions that initiate execution and resets |
| Shared utility | Shared utility function code |
Configure default code mappings for functions by using the Code Mappings Editor â€"
C or code mappings API function setFunctionDefault. Using these interfaces, you can associate a function
category with a function customization template defined in the model's Embedded Coder
Dictionary.
If your application requires that you configure the placement of entry-point functions in memory, for example, to optimize the generated code for specific hardware, you can apply a default memory section to a category of functions across a model. In the Code Mappings editor, map a function category to a function customization template that is defined to use a specific memory section. See Create Function Customization Template.
If a function customization template does not exist, you can create one by using the Embedded Coder Dictionary (see Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architecture).
For an example of how to configure default configurations for function categories, see Configure Default C Code Generation for Categories of Data Elements and Functions.
Configure Names for Individual C Entry-Point Functions
For your generated C code to adhere to code standards and guidelines or to more easily
integrate that code with external code, you can configure the name of an individual
entry-point function. For example, you can name the initialize function generated for a model
myInitFunc.
If your model meets at least one of these criteria, consider configuring the names of functions individually:
Uses multiple functions that have unique naming requirements.
Uses few functions.
Has a default configuration for a function category and you need to override the configuration for a specific function.
Configure function names for individual step functions by using the Code
Mappings editor or code mappings API function setFunction.
To learn more, see:
Configure Name and Arguments for Individual Step Functions
For your generated C code to adhere to code standards and guidelines or to more easily integrate the code with external code, you can configure the name and arguments of individual step functions generated for Simulink periodic functions. You can customize these aspects of a step function:
Function name
Argument names
Order of the arguments
Return value and argument data qualifiers
Buffering optimizations for arguments
If your model meets at least one of these criteria, consider configuring the name and arguments of a step function individually:
Is a periodic, single-tasking model for which the code generator produces one step function.
Has a default configuration for
Executionfunction category and you need to override the configuration for a specific step function.
Configure code mappings for individual step functions by using the Code
Mappings editor or code mappings API function setFunction.
To learn more, see:
Customize Default Naming Rule of Generated Entry-Point C Functions in Subcomponent Models
Customize Generated Entry-Point C Function Arguments for Component Models
Customize Generated Entry-Point C Function Arguments for Subcomponent Models
Customize Arguments of Step C Function Generated from Single-Tasking Model
Configure Code Generation Settings for C Entry-Point Functions Programmatically
To automate configuration of model functions for C code generation, use the programming interface for code mappings. For example, when creating custom block libraries or part of an application test environment, use the programming interface to automate function configuration.
Typical uses of these functions include:
Create a function interface.
Modify an existing function interface.
Create a function interface, starting with default configuration information from a model.
Reset the model function interface to the default ERT function configuration.
For an example of how to configure code generation settings for C entry-point functions programmatically, see Configure Default Data and Function Code Generation Programmatically. That example shows how to configure default settings for function categories and individual functions.
To learn more about using the programmatic interface for customizing generated C entry-point functions, see:
How to Interface with Generated Entry-Point Functions
After generating code for a model, use the Code view to review the generated entry-point functions and, if applicable, variables representing external input and output ports.
Add
#includestatements to your external code that include the generated header files that declare the model entry-point functions.Add an
#includestatement that includes the generated filertwtypes.h. This file provides type definitions,#definestatements, and enumerations.Initialize target-specific data structures and hardware, such as ADCs or DACs.
If applicable, initialize data for each instance of a reusable model.
If applicable, write input data to generated variables that represent model Inport blocks.
Call the generated entry-point functions or set up use of the
rt_OneStepfunction.If applicable, read data from generated variables that represent model Outport blocks.
For more information, see Deploy Applications to Target Hardware.
C Function Interface Customization Limitations
These limitations apply to customizations for generated C function interfaces:
You must select the model configuration parameter Single output/update function.
Multirate models are supported, but you must configure the models for single tasking.
You must configure root-level inports and outports to use the
Defaultstorage class.If you choose to customize a function interface, you must provide your own custom
mainprogram. You cannot configure the function interface with the staticrt_main.cthat MathWorks® provides. Specifying a function interface configuration other than the default creates a mismatch between the generated code and the default staticrt_main.c.The code generator removes the data structure for the root inports of the model unless a subsystem implemented by a nonreusable function uses the value of one or more of the inports.
The code generator removes the data structure for the root outports of the model except when you enable MAT-file logging or if the sample time of one or more of the outports is not the fundamental base rate (including a constant rate).
If you copy a subsystem block to create a block in a new model or the same model, the function interface information from the original subsystem block is not copied to the new subsystem block.
If you have Stateflow®, for a Stateflow chart that uses a model root inport value or that calls a subsystem that uses a model root inport value, do one of the following to generate code:
Clear the Execute (enter) Chart At Initialization check box in the Stateflow chart.
Make the Stateflow function a nonreusable function.
Insert a Simulink® Signal Conversion block immediately after the root inport. In the Signal Conversion block parameters dialog box, select Exclude this block from 'Block reduction' optimization.
If a model root inport value connects to a Simscape™ conversion block, insert a Simulink Signal Conversion block between the root inport and the Simscape conversion block. In the Signal Conversion block parameters dialog box, select Exclude this block from 'Block reduction' optimization.
When building a referenced model that is configured with a function interface, do not use virtual buses as inputs or outputs to the referenced model. Use nonvirtual buses instead.
If the C function interface is not the default, the value is ignored for the model configuration parameter Pass fixed-size scalar root inputs by value for code generation. For more information, see Pass fixed-size scalar root inputs by value for code generation.
See Also
setFunctionDefault | setFunction | Simulink Function | Function Caller
Topics
- Customize Generated Entry-Point C Function Names
- Customize Default Naming Rule of Generated Entry-Point C Functions in Subcomponent Models
- Customize Generated Entry-Point C Function Arguments for Component Models
- Customize Generated Entry-Point C Function Arguments for Subcomponent Models
- Customize Arguments of Step C Function Generated from Single-Tasking Model
- Programmatically Customize Generated Entry-Point C Function Names
- Programmatically Customize Generated Entry-Point C Function Arguments for Component Models
- Programmatically Customize Arguments of Step C Function Generated from Single Tasking Model
- C Data Code Interface Configuration for Model Interface Elements
- Configure Default C Code Generation for Categories of Data Elements and Functions
- Simulink Function Blocks and Code Generation