为模型入口点函数配置代码生成
什么是入口函数?
入口点是代码中发生程序控制(执行)转移的位置。主要功能(main ()
)是C/ c++程序的入口点,在应用程序开始执行时调用。调用其他函数,例如从主要
函数,提供函数代码的入口点。程序控制被转移到被调用的函数。函数代码执行,完成后,将控制权返回给主要
或者其他调用函数。
在为模型生成代码时,代码生成器定义了一组入口点函数,您可以调用这些函数来执行生成的代码。可以从外部代码或修改后的生成的主函数的版本调用生成的函数。
代码生成报告的代码接口报告部分列出了代码生成器为模型生成的入口点函数。有关更多信息,请参见分析生成的代码接口.
生成的入口点函数的类别和类型
代码生成器为模型生成的入口点函数的类型和函数的调用接口取决于模型是否:
基于速率的or是一个导出函数模型
配置为可重用的多实例代码生成
根据模型的样式和配置,代码生成器生成一个或多个这样的入口点函数。
功能分类 | 函数 | 描述 |
---|---|---|
初始化和终止 |
|
模型的初始化代码。在应用程序代码的开头,调用该函数一次.不要使用此函数重置实时模型数据结构( |
|
关闭系统的代码。对于基于ert的模型,您可以通过清除模型配置参数来抑制该函数的生成需要终止函数(金宝app默认为Simulink Coder)。 |
|
执行 |
|
对于基于速率的模型中的块,输出和更新代码。如果您清除模型配置参数单输出/更新功能(金宝appSimulink Coder)(默认选择),而不是生成一个 |
|
对于导出函数模型,子系统的导出函数。 | |
|
对于导出函数模型,为Simulink function块的导出函数。金宝app | |
|
如果模型包含复位功能块,则生成复位代码。若要重置条件或状态,请从应用程序代码中调用该函数。 |
|
|
对于参考模型,输出和更新代码。 | |
isr_num |
对于异步中断块,中断服务例程(ISR)代码。 | |
共享效用 |
|
对于共享实用程序函数,输出代码。 |
配置入口点函数是否可重用
默认情况下,对于顶级模型,代码生成器生成不可重用或不可重入的代码。入口点函数有void-void
接口。代码通过直接访问驻留在共享内存中的全局数据结构与其他代码通信。
如果应用程序需要可重用的多实例入口点函数代码,则可以配置代码生成器,以使用唯一数据调用每个函数(实例)。在这种情况下,代码是可重入的。
您可以使用模型配置参数配置入口点函数是否可重用代码接口打包(金宝appSimulink Coder)和相关参数。所选择的参数设置取决于系统目标文件的配置选择、编程语言和参数接口等因素。
单实例C入口点函数的默认配置
默认情况下,对于基于GRT和ert的系统目标文件,代码生成器生成单实例C入口点函数。生成的代码:
创建不带参数的执行函数(
void-void
).为模型数据结构静态分配内存(在编译时)。
用于配置单实例入口点函数代码的默认模型配置参数设置如下:
生成可重用的多实例C入口点函数
您可以配置代码生成器,为基于GRT或基于ert的系统目标文件用C生成可重用的入口点函数。但是,代码生成器默认生成的函数接口是不同的。假设模型配置参数语言(金宝appSimulink Coder)设置为C
而且代码接口打包(金宝appSimulink Coder)设置为可重用的功能
,代码生成器为每个系统目标文件场景生成此入口点函数代码。
系统目标文件 | 接口 |
---|---|
GRT-based |
|
ERT-based |
|
如果您正在使用基于ert的系统目标文件,并希望生成可重用的、可重入的多实例C入口点函数,请考虑:
使用动态内存分配来初始化模型数据结构。选择对模型初始化使用动态内存分配(金宝app仿真软件编码器)。
将模型根级导入块的值打包到结构中,将根级输出块的值打包到第二个结构中,并通过引用将结构作为参数传递给执行函数。集传递根级I/O为(金宝appSimulink Coder)到
结构参考
.将模型根级导入块和输出块的值打包到实时模型数据结构中,并通过引用将该结构作为参数传递给执行函数。集传递根级I/O为(金宝appSimulink Coder)到
部分模型数据结构
.
生成可重用的多实例c++入口点函数
c++类接口将模型数据封装为类属性,将入口点函数封装为类方法。该接口可用于基于ert的系统目标文件。要使用该接口,请设置语言(金宝appSimulink Coder)到c++
并设置代码接口打包(金宝appSimulink Coder)到c++类
.您可以:
通过单击,预览和自定义c++类接口配置c++类接口(金宝app仿真软件编码器)。自定义意味着您可以生成用于与外部代码集成的代码,并验证代码是否符合编码标准。
通过指定是否将块参数结构生成为公共、私有或受保护的数据成员,配置类继承的可见性。集参数的可见性(金宝appSimulink Coder)到
公共
,私人
,或受保护的
.为满足代码执行速度或可调性要求的模型块参数生成c++接口代码。代码可以是非内联的或内联的访问方法。集参数访问(金宝appSimulink Coder)到
方法
或内联方法
.为模型根级的import和Outport块集生成c++接口代码,以满足代码执行速度、数据可调性或数据打包需求。代码可以是这些类型的访问方法之一。
访问方法类型 集外部I/O访问(金宝appSimulink Coder)到 Noninlined 方法
内联 内联方法
Noninlined基于结构 基于结构的方法
内联structured-based 基于内联结构的方法
配置生成的入口点函数声明
根据应用程序需求(例如集成或代码标准的遵从),您可能需要配置代码生成器如何为入口点函数生成声明。嵌入式编码器®提供多种配置选项。
将默认函数命名规则应用于模型中的函数类别。例如,默认命名规则可以生成
函数用于多费率模型中的每个费率。在“代码映射”编辑器中功能默认值选项卡,将函数类别映射到定义为使用函数命名规则的函数自定义模板(请参阅代码映射编辑器).控件上的名称可以覆盖函数的默认命名功能选项卡(参见重写各个C入口点函数的默认命名或覆盖默认C步骤功能接口).模型
_step为各个入口点功能配置接口。在“代码映射”编辑器中功能选项卡,指定各个函数的名称(参见重写各个C入口点函数的默认命名).对于一个
(执行)函数,可以自定义整个入口点函数接口(参见覆盖默认C步骤功能接口).模型
_step
在内存中配置入口点函数的位置
例如,如果您的应用程序要求您在内存中配置入口点函数的位置,以优化特定硬件的生成代码,那么您可以跨模型对函数类别应用默认内存段。在“代码映射”编辑器中,将函数类别映射到定义为使用特定内存段的函数自定义模板。看到代码映射编辑器.
如何与生成的入口点函数接口
在为模型生成代码之后,使用代码查看生成的入口点函数,以及(如果适用的话)表示外部输入和输出端口的变量。
添加
# include
包含声明模型入口点函数的生成头文件的外部代码的语句。添加一个
# include
语句,其中包含生成的文件rtwtypes.h
.该文件提供类型定义,#定义
语句和枚举。初始化特定于目标的数据结构和硬件,例如adc或dac。
如果适用,初始化可重用模型的每个实例的数据。
如果适用,将输入数据写入表示模型导入块的生成变量。
调用生成的入口点函数或设置使用
rt_OneStep
函数。如果适用,从表示模型输出端口块的生成变量中读取数据。
有关更多信息,请参见将生成的独立可执行程序部署到目标硬件.
相关的话题
- 从顶层模型生成可重入代码(金宝app仿真软件编码器)
- 为模型数据和函数类别配置默认的C代码生成
- 执行从模型生成的代码(金宝app仿真软件编码器)
- 使用实时模型数据结构
- 将生成的独立可执行程序部署到目标硬件
- 生成的代码如何与环境交换数据(金宝app仿真软件编码器)
- 为代码生成配置模型数据和函数的环境
- 生成响应初始化、重置和终止事件的代码(金宝app仿真软件编码器)
- 配置系统目标文件