文档

为模型入口点函数配置代码生成

什么是入口函数?

入口点是代码中发生程序控制(执行)转移的位置。主要功能(main ())是C/ c++程序的入口点,在应用程序开始执行时调用。调用其他函数,例如从主要函数,提供函数代码的入口点。程序控制被转移到被调用的函数。函数代码执行,完成后,将控制权返回给主要或者其他调用函数。

在为模型生成代码时,代码生成器定义了一组入口点函数,您可以调用这些函数来执行生成的代码。可以从外部代码或修改后的生成的主函数的版本调用生成的函数。

代码生成报告的代码接口报告部分列出了代码生成器为模型生成的入口点函数。有关更多信息,请参见分析生成的代码接口

生成的入口点函数的类别和类型

代码生成器为模型生成的入口点函数的类型和函数的调用接口取决于模型是否:

  • 基于速率的or是一个导出函数模型

  • 配置为可重用的多实例代码生成

根据模型的样式和配置,代码生成器生成一个或多个这样的入口点函数。

功能分类 函数 描述
初始化和终止 模型_initialize

模型的初始化代码。在应用程序代码的开头,调用该函数一次.不要使用此函数重置实时模型数据结构(rtM).

模型_terminate

关闭系统的代码。对于基于ert的模型,您可以通过清除模型配置参数来抑制该函数的生成需要终止函数(金宝app默认为Simulink Coder)。

执行 模型_step

对于基于速率的模型中的块,输出和更新代码。如果您清除模型配置参数单输出/更新功能(金宝appSimulink Coder)(默认选择),而不是生成一个模型_step函数,代码生成器生成函数模型_output而且模型_update

模型_函数名 对于导出函数模型,子系统的导出函数。
函数名 对于导出函数模型,为Simulink function块的导出函数。金宝app
模型_reset

如果模型包含复位功能块,则生成复位代码。若要重置条件或状态,请从应用程序代码中调用该函数。

ref-model 对于参考模型,输出和更新代码。
isr_num中断号_vecinterrupt-vector-offset 对于异步中断块,中断服务例程(ISR)代码。
共享效用 函数名 对于共享实用程序函数,输出代码。

配置入口点函数是否可重用

默认情况下,对于顶级模型,代码生成器生成不可重用或不可重入的代码。入口点函数有void-void接口。代码通过直接访问驻留在共享内存中的全局数据结构与其他代码通信。

如果应用程序需要可重用的多实例入口点函数代码,则可以配置代码生成器,以使用唯一数据调用每个函数(实例)。在这种情况下,代码是可重入的。

您可以使用模型配置参数配置入口点函数是否可重用代码接口打包(金宝appSimulink Coder)和相关参数。所选择的参数设置取决于系统目标文件的配置选择、编程语言和参数接口等因素。

单实例C入口点函数的默认配置

默认情况下,对于基于GRT和ert的系统目标文件,代码生成器生成单实例C入口点函数。生成的代码:

  • 创建不带参数的执行函数(void-void).

  • 为模型数据结构静态分配内存(在编译时)。

用于配置单实例入口点函数代码的默认模型配置参数设置如下:

  • 语言(金宝appSimulink Coder)设置为C

  • 代码接口打包(金宝appSimulink Coder)设置为那种一次性的功能

生成可重用的多实例C入口点函数

您可以配置代码生成器,为基于GRT或基于ert的系统目标文件用C生成可重用的入口点函数。但是,代码生成器默认生成的函数接口是不同的。假设模型配置参数语言(金宝appSimulink Coder)设置为C而且代码接口打包(金宝appSimulink Coder)设置为可重用的功能,代码生成器为每个系统目标文件场景生成此入口点函数代码。

系统目标文件 接口
GRT-based
  • 可重用、可重入的多实例C入口点函数。

  • 将模型根级的import块和Output块的值打包到实时模型数据结构中。通过引用将该结构作为参数传递给执行函数。

  • 在运行时为模型实例的数据动态分配内存。通过调用函数来分配内存,例如malloc

ERT-based
  • 可重用、可重入的多实例C入口点函数。

  • 将每个模型根级别的import块和Outport块的值作为单独的参数传递给执行函数。

  • 为模型数据结构静态分配内存。

如果您正在使用基于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 基于内联结构的方法

配置生成的入口点函数声明

根据应用程序需求(例如集成或代码标准的遵从),您可能需要配置代码生成器如何为入口点函数生成声明。嵌入式编码器®提供多种配置选项。

在内存中配置入口点函数的位置

例如,如果您的应用程序要求您在内存中配置入口点函数的位置,以优化特定硬件的生成代码,那么您可以跨模型对函数类别应用默认内存段。在“代码映射”编辑器中,将函数类别映射到定义为使用特定内存段的函数自定义模板。看到代码映射编辑器

如何与生成的入口点函数接口

  1. 在为模型生成代码之后,使用代码查看生成的入口点函数,以及(如果适用的话)表示外部输入和输出端口的变量。

  2. 添加# include包含声明模型入口点函数的生成头文件的外部代码的语句。

  3. 添加一个# include语句,其中包含生成的文件rtwtypes.h.该文件提供类型定义,#定义语句和枚举。

  4. 初始化特定于目标的数据结构和硬件,例如adc或dac。

  5. 如果适用,初始化可重用模型的每个实例的数据。

  6. 如果适用,将输入数据写入表示模型导入块的生成变量。

  7. 调用生成的入口点函数或设置使用rt_OneStep函数。

  8. 如果适用,从表示模型输出端口块的生成变量中读取数据。

有关更多信息,请参见将生成的独立可执行程序部署到目标硬件

相关的话题