主要内容

配置生成的C函数入口点函数接口模型

一个入口点函数是什么?

一个入口点的位置在代码转移程序控制(执行)。主要功能(main ())的入口点是一个C / c++程序,叫做当应用程序开始执行。调用其他函数,例如主要函数,提供入口点函数的代码。程序控制是转移到被调用的函数。函数代码执行,完成后,返回控制主要或其他调用函数。

为模型生成代码的时候,代码生成器定义了一组入口点函数,你可以调用执行生成的代码。你可以从外部代码调用生成的函数或从一个版本修改生成的主要功能。

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

类型的入口点函数生成的

代码生成器产生的入口点函数为这些类型的模型函数。

类型的模型函数 模型名称来源 默认生成的函数名 描述
导出功能(需要嵌入式编码器®) ExportedFunction:slIdentifier,在那里slIdentifier是函数调用的名称替代进口块模型 function-call-inport-block-namesignal-label(如果指定了的话) 对于一个输出函数模型,导出的函数为一个子系统。
初始化函数 初始化 模型_initialize

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

配分函数 分区:slIdentifier,在那里slIdentifier是显式地创建一个分区从一块模型和仿真软件中显示®时间表编辑器(例如,P1),或并发执行的任务名称对话框金宝app 模型_stepn,在那里n唯一地标识模型的函数生成的一个样本 为一个模型分区、输出和更新代码。模型配置参数单输出/更新功能选择(默认)。
分区更新功能 PartitionUpdate:slIdentifier,在那里slIdentifier是显式地创建一个分区从一块模型和仿真软件中显示®时间表编辑器(例如,P1),或并发执行的任务名称对话框金宝app 模型_outputn模型_updaten,在那里n唯一地标识模型的函数生成的一个样本 分区,模型输出和更新代码在单独的函数。模型配置参数单输出/更新功能清除。
周期性的多任务功能 周期:slIdentifier,在哪里slIdentifier是一个注释,对应的样品时间定期或连续的多任务模型(例如,D1) 模型_stepn,在那里n唯一地标识模型的函数生成的一个样本 的块率模型配置为多任务处理,输出和更新代码。代码生成器为每个样本生成一个函数。模型配置参数单输出/更新功能选择(默认)。
周期性任务更新功能 PeriodicUpdate:slIdentifier,在哪里slIdentifier是一个注释,对应的样品时间定期或连续的多任务模型(例如,D1) 模型_outputn模型_updaten,在那里n唯一地标识模型的函数生成的一个样本 的块率模型配置为多任务处理,输出和更新代码在单独的功能。代码生成器产生的输出为每个样本期和更新功能。模型配置参数单输出/更新功能清除。
定期做单一的功能 周期 模型_step 的块率模型配置为单一任务,输出和更新代码。模型配置参数单输出/更新功能选择(默认)。
周期性的单一任务更新功能 PeriodicUpdate 模型_output模型_update 的块率模型配置为单一任务,在单独的代码并更新输出功能。模型配置参数单输出/更新功能清除。
重置功能 重置:slIdentifier,在哪里slIdentifier的名字是重置函数模型中 模型_reset-function-name

如果模型包括一个重置功能块,重置代码生成。重置条件或状态,从应用程序代码调用该函数。

金宝app仿真软件的功能 金宝app仿真软件功能:slIdentifier,在哪里slIdentifier的名称是什么金宝app仿真软件的功能块模型中 函数名为全球金宝app仿真软件的功能块或模型_函数名对于一个作用域金宝app仿真软件的功能 的输出函数模型,导出的函数金宝app仿真软件的功能块。
终止函数 终止 模型_terminate

代码关闭系统。对于ERT-based模型,可以抑制代这个函数通过清算模型配置参数终止功能要求(默认设置)。

如果你有嵌入式编码软件,便于集成和外部生成的代码和代码的执行标准和指南,您可以配置代码生成器生成函数接口如何从一个模型或子系统。

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

默认情况下,对于顶级模特,代码生成器生成的代码,不是可重复使用或可重入的。入口点函数有一个void-void接口。代码与其他代码直接访问全球驻留在共享内存的数据结构。

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

您配置的入口点函数是否可重用模型配置参数代码接口包装和相关参数。你选择的参数设置,取决于系统配置等因素选择目标文件,编程语言,和参数界面。

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

锐信,ERT-based系统在默认情况下,目标文件,代码生成器产生单实例C入口点函数。生成的代码:

  • 创建一个执行函数没有参数(void-void)。

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

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

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

您可以配置代码生成器生成可重用的入口点函数的C GRT——或者ERT-based系统目标文件。然而,功能接口,默认代码生成器产生变化。假设模型配置参数语言被设置为C代码接口包装被设置为可重用的功能,代码生成器产生这个入口点函数代码为每个系统目标文件的场景。

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

  • 包模型根级的价值观轮廓尺寸块和外港块到实时模型的数据结构。通过结构来执行函数作为一个参数通过引用。

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

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

  • 通过每个模型根级尺寸块的价值和外港块执行函数作为一个单独的参数。

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

如果您正在使用一个ERT-based系统目标文件,想要生成可重用的,多实例C可重入的入口点函数,考虑:

  • 使用动态内存分配初始化模型的数据结构。选择使用动态内存分配模型初始化

  • 包装的价值模型根级轮廓尺寸块结构,包装的根级值外港块到另一个结构中,通过结构来执行函数作为参数通过引用。集通过根级I / O结构参考

  • 包装的价值模型根级轮廓尺寸块和外港块到实时模型数据结构,通过结构来执行函数作为一个参数通过引用。集通过根级I / O模型数据结构的一部分

选择一个方法配置生成的C函数接口

便于集成和外部生成的代码,实现遵守代码标准和指导方针,可以使用映射编辑器的代码或代码映射API来配置代码生成器生成函数接口如何从一个模型或子系统。

对于模型配置一个服务接口,您可以配置:

  • 函数名

  • 函数参数函数的子组件的组件模型和函数表示为仿真软件的功能模块金宝app

  • 记忆的部分

配置 更多的信息
默认命名规则类别的函数(初始化/终止、执行和共享工具)在一个模型 配置默认代码生成功能
名字对个人入口点函数(覆盖默认的命名规则) 为个人C入口点函数配置名称
阶跃函数接口(函数名、返回值和参数C类型限定符,名字,和秩序)为基准利率步骤交互式地入口点函数 为个人一步配置名称和参数的功能
函数接口(函数名、返回值和参数C类型限定符,名字,和秩序)模型函数和函数调用者街区交互金宝app 为仿真软件配置入口点函数接口函数和函数调用者金宝app

您可以使用software-in-the-loop (SIL)测试来验证代码生成定制的入口点函数。通过使用生成的代码创建一个硅块。然后,银块集成到一个模型来验证所生成的代码提供了相同的结果与原始模型或nonvirtual子系统。有关更多信息,请参见选择银或公益诉讼的方法

配置默认代码生成设置一个功能类别

减少的努力准备C代码生成一个模型通过指定的默认配置类别的函数在一个模型。例如,您可以配置规则函数名和位置的函数代码在内存中部分。应用默认配置可以节省时间和减少引入错误代码的风险,特别是对于有大量功能的模型。

代码生成器产生这些类别的模型函数入口点函数:

功能分类 描述
初始化和终止 函数初始化和关闭系统
执行 函数开始执行和重置
共享效用 共享效用函数代码

通过使用配置的默认代码映射功能映射编辑器- C代码API函数或代码映射setFunctionDefault。使用这些接口,您可以关联函数的类别和功能定制模板中定义模型的嵌入式编码字典。

如果您的应用程序需要在内存中配置入口点函数的位置,例如,为特定的硬件优化生成的代码,您可以应用一个默认的内存部分类别的函数模型。在代码映射编辑器中,一个功能类别映射到一个函数定义的定制模板使用一个特定的内存部分。看到的。

如果一个函数定制模板不存在,您可以创建一个使用嵌入式编码字典(见定义服务接口、存储类、内存部分,为软件架构和功能模板)。

例如如何配置默认配置的功能类别,明白了配置默认C代码生成类别的数据元素和功能

为个人C入口点函数配置名称

为您生成的C代码遵守代码标准和指导方针或更容易集成代码与外部代码,您可以配置一个单独的入口点函数的名称。例如,您可以为模型生成的初始化函数名称myInitFunc

如果你的模型符合至少一种标准,考虑单独配置功能的名称:

  • 使用多个函数,有独特的命名要求。

  • 使用一些功能。

  • 有一个默认的配置为一个函数类别,你需要重写配置为一个特定的函数。

为个人一步配置函数名函数通过使用映射编辑器的代码或代码映射setFunction API函数。使用这些接口,您可以将一个函数与函数定义的定制模板模型的嵌入式编码字典和指定一个函数名。

这个例子展示了如何修改的名称初始化函数模型rtwdemo_fcnprotoctrl

  1. 打开和保存的副本模式rtwdemo_fcnprotoctrl在一个可写的位置。

  2. 打开嵌入式编码器应用程序。

  3. C代码选项卡上,选择代码接口>单个元素的代码映射

  4. 在代码映射编辑器中,功能选项卡中,改变函数名用这些方法之一:

    • 函数名函数的列中,输入一个名称。

    • 预览功能列,单击函数原型超链接打开一个配置对话框。在C初始化函数名字段中,输入函数名。点击应用验证的变化C函数原型字段或点击好吧退出对话框和视图的函数名预览功能列代码的映射编辑器。

    对于这个示例,改变的名称初始化函数fcnprotoctrl_init

  5. 保存模型。

  6. 生成的代码。

  7. 验证生成的代码的变化。在代码视图,找到函数名的实例fcnprotoctrl_init。函数名出现在生成的文件rtwdemo_fcnprotoctrl.hrtwdemo_fcnprotoctrl.c

    • rtwdemo_fcnprotoctrl.h:

      外面的空白fcnprotoctrl_init(无效);
    • rtwdemo_fcnprotoctrl.c:

      空白fcnprotoctrl_init (void) {…}

为个人一步配置名称和参数的功能

为您生成的C代码遵守代码标准和指导方针或更容易集成代码与外部代码,您可以配置单个步骤的名称和参数函数为模型生成周期函数。金宝app您可以自定义这些方面的一个阶跃函数:

  • 函数名

  • 参数名称

  • 参数的顺序

  • 返回值和参数数据限定符

  • 缓冲优化的参数

如果你的模型符合至少一种标准,考虑单独配置的名称和参数阶跃函数:

  • 是一个周期,单一任务模型的代码生成器产生一个阶跃函数。

  • 有一个默认的配置执行功能类别,你需要重写配置为一个特定的阶跃函数。

为个人一步配置代码映射函数通过使用API函数的代码映射编辑器或代码映射setFunction。使用这些接口,您可以将一个函数与函数定义的定制模板模型的嵌入式编码字典和完全自定义函数原型。

这个例子展示了如何定制的阶跃函数名和参数率,单一任务模型。

打开配置对话框

1。打开和保存的副本模式rtwdemo_fcnprotoctrl一个可写的位置。

2。打开嵌入式编码器应用程序。

3所示。在C代码选项卡上,选择代码接口>单独的元素映射代码

4所示。在代码映射编辑器中,单击功能选项卡。

5。阶跃函数连续的预览功能列,单击超链接打开配置C阶跃函数原型界面对话框。

在C阶跃函数接口配置对话框C函数原型字段显示预览你做出的变更,函数原型。

模型配置为生成多实例代码,请参阅生成可重入的代码从上模型

自定义函数名

1。在C阶跃函数接口配置对话框中,设置C阶跃函数的名字fcnprotoctrl_run。预览功能更新以反映新的函数名。

2。点击应用,关闭对话框,并保存模型。

3所示。生成代码并验证名称更改。

  • 单击代码选项卡。在代码查看文件列表,选择文件rtwdemo_fcnprotoctrl.h。在搜索场,验证代码元素的列表包括函数名fcnprotoctrl_run。查看声明,选择函数名。

宣言中强调代码:

  • 验证文件的名称更改rtwdemo_fcnprotoctrl.c。查看源代码(定义)搜索字段中,选择fcnprotoctrl_run

更多的例子,请参阅为个人C入口点函数配置名称

自定义函数参数

配置全局数据结构

默认情况下,顶部或引用的模型使用一个void-void阶跃函数来传递数据。这种类型的函数使生成的代码与外部通信代码通过访问全局数据存储为驻留在共享内存的数据结构。

配置一个模型void-void阶跃函数,打开配置C阶跃函数界面对话框和清除为阶跃函数原型配置参数复选框。验证的变化C函数原型预览。

配置参数

率模型一步函数可以使用参数传递数据。您可以自定义这些参数设置:

  • 返回值

  • 类型限定符

  • 的名字

  • 订单

例子

1。打开C阶跃函数接口配置对话框。在代码映射编辑器中,单击功能选项卡。然后,点击预览为阶跃函数的函数。

2。在C阶跃函数接口配置对话框中,选择为阶跃函数原型配置参数

3所示。点击得到默认。对话框将显示字段配置函数返回值和一个表,列出了输入和输出参数使用默认设置。

4所示。定制的阶跃函数的返回值。集C返回参数要么无效或输出参数之一。对于这个示例,选择无效

5。对于每一个参数,指定一个C类型限定符

类型限定符:

  • 价值:价值,例如,参数

  • 常量:价值常量例如,限定符常量参数

  • 指针常量:价值与常量限定符和指针引用的,例如,常量*参数

  • 指针例如:通过指针引用,*参数

  • 常量指针常量:价值与常量限定符,通过指针引用和指针本身,例如,常量*常量参数

模型,包括一个参考模型

  • 参考模型,根输入参数的类型限定符设置为阶跃函数接口汽车。代码生成器使用接口规范通过生成一个类型,丢弃常量限定符从源信号。

  • 参考模型的父类,源信号类型限定符以外的一个值汽车。要覆盖此行为,添加一个常量类型限定符来引用的模型。

对于这个示例,不改变C类型限定符。

6。自定义参数的名称通过编辑值C标识符名称列。

对于这个示例,改变参数通过删除下划线的名称,例如,改变arg_In1 argIn1。

7所示。自定义参数顺序通过拖动表行到新的位置。

对于这个示例,移动着干活到第一个位置。搬出去2的第三的位置。

8。验证,应用您的更改,关闭对话框,保存模型。

9。生成代码并验证的变化代码视图。

  • 验证文件的变化rtwdemo_fcnprotoctrl.h通过检查,搜索领域包括函数fcnprotoctrl_run对于视图函数声明,选择函数名。

  • 验证文件的变化rtwdemo_fcnprotoctrl.c对于视图的定义函数,选择函数名fcnprotoctrl_run

原型不同于预览

在C阶跃函数接口配置对话框中,引用的函数原型预览模型可以显示更少的参数比的函数原型生成的代码。

例如,考虑一个模型mdlref_counter尺寸(arg_input),一个输出港(arg_output)和饱和阻止和限制工作区参数参数名称lower_saturation_limitupper_saturation_limit。C阶跃函数接口配置对话框显示了函数原型预览:

mdlref_counter_custom (arg_input arg_output)

在生成的代码中,原型包括参数的参数:

mdlref_counter_custom (real_T arg_input, real_T arg_output, real_T rtp_lower_saturation_limit, real_T rtp_upper_saturation_limit)

优化缓冲参数

您可以优化I / O所需的缓冲参数阶跃函数的模型。如果你遵守这些要求在配置一个尺寸和外港,代码生成器合并相应的参数和重用相关的缓冲区。

  • 尺寸和外港块必须有相同的属性,包括数据类型、尺寸和采样率。

  • 尺寸和外港块的采样率必须相同的基准利率模型。

  • 有条件地执行子系统不能驱动外港的块。

  • 一个nonvirtual块输出必须驱动外港块。例如,Mux块,合并多个缓冲区,不能驱动输出港。

  • 在C阶跃函数接口配置对话框中,您必须配置相同尺寸和外港C类型限定符,标识符的名字。

这个例子展示了如何合并理由港口In3Out2例如模型rtwdemo_fcnprotoctrl

1。打开配置C阶跃函数接口为模型对话框rtwdemo_fcnprotoctrl

2。打开显示的参数选择为阶跃函数原型配置参数

3所示。对港口In3Out2,设置C类型限定符指针C标识符名称sharedArg

4所示。验证预览显示了合并的理由argIn3argOut2

5。验证,应用您的更改,关闭对话框,保存模型。

6。生成并查看代码。在代码看来,搜索fcnprotoctrl_run功能和检查功能接口。对于这个示例,共享参数出现在阅读代码尺寸块外港和写代码块。

配置C代码生成设置入口点函数编程方式

自动化配置模型函数的C代码生成,使用代码的编程接口映射。例如,当创建自定义块库或部分应用程序的测试环境中,使用编程接口自动化功能配置。

这些函数的典型应用包括:

  • 创建一个函数接口。

  • 修改现有的函数接口。

  • 创建一个函数接口,开始从一个模型默认配置信息。

  • 重置默认ERT函数的模型函数接口配置。

如何配置的一个示例代码生成C入口点函数编程方式设置,明白了配置默认的数据和函数代码生成以编程方式。这个例子展示了如何配置默认设置为功能类别和单独的功能。

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

  1. 为一个模型生成代码后,使用代码视图查看生成的入口点函数,如果适用,变量代表外部输入和输出端口。

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

  3. 添加一个# include声明,包括生成的文件rtwtypes.h。这个文件提供类型定义,#定义语句和枚举。

  4. 初始化有针对性的数据结构和硬件,比如adc和dac。

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

  6. 如果适用,写输入数据生成的变量代表模型尺寸块。

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

  8. 如果适用,读取数据从模型生成的变量代表外港块。

有关更多信息,请参见将应用程序部署到目标硬件

C函数接口自定义的局限性

这些限制适用于自定义生成的C函数接口:

  • 您必须选择模型配置参数单输出/更新功能

  • 支持多重速率的模型,但是你必须为单一任务配金宝app置的模型。

  • 您必须配置港口和外港根级使用默认的存储类。

  • 如果你选择定制函数接口,您必须提供自己的自定义主要程序。你不能配置静态的函数接口rt_main.c,MathWorks®提供了。以外的指定一个函数接口配置默认生成的代码创建了一个不匹配和默认的静态rt_main.c

  • 代码生成器删除根的数据结构模型的港口,除非一个子系统实现的那种一次性的值函数使用一个或多个港口。

  • 代码生成器删除的数据结构模型的根外港除了当你启用MAT-file日志记录或如果样品时间的一个或多个输出港不是基本的基准利率(包括恒定速率)。

  • 如果你复制一个子系统块创建一个块的新模型或模型相同,函数接口信息从原始子系统块不是复制到新的子系统。

  • 如果你有Stateflow®,Stateflow图表,使用一个模型根尺寸值或调用一个子系统,它使用一个模型根尺寸值,生成代码的下列之一:

    • 清除(输入)表初始化执行复选框的Stateflow图表。

    • 使Stateflow那种一次性的功能函数。

    • 插入一个仿真软件金宝app®信号转换块后立即根尺寸。在信号转换块参数对话框中,选择排除这一块从减少块的优化

  • 如果一个模型根尺寸值连接Simscape™转换块,插入一个仿真软件金宝app信号转换块根尺寸和Simscape之间转换。在信号转换块参数对话框中,选择排除这一块从减少块的优化

  • 当构建一个参考模型,配置了一个函数接口,不要使用虚拟巴士作为输入或输出参考模型。使用nonvirtual公交车代替。

  • 如果不是默认的C函数接口,模型配置参数的值被忽略通过根输入固定大小的标量值代码生成。有关更多信息,请参见通过根输入固定大小的标量值代码生成

另请参阅

|

相关的话题