主要内容

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

什么是入口函数?

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

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

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

生成的入口点函数的类型

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

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

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

配分函数 分区:slIdentifier,在那里slIdentifier是一个从模型中的块显式创建的分区,并显示在Simulink®日程编辑器中(例如,P1)金宝app 模型_stepn,在那里n唯一标识为一个模型样本周期生成的函数 对于模型分区,输出和更新代码。型号配置参数单输出/更新功能被选中(默认值)。
分区更新功能 PartitionUpdate:slIdentifier,在那里slIdentifier是一个从模型中的块显式创建的分区,并显示在Simulink®日程编辑器中(例如,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仿真软件的功能 对于导出函数模型,a的导出函数金宝app仿真软件的功能块。
终止函数 终止 模型_terminate

关闭系统的代码。对于基于ert的模型,您可以通过清除模型配置参数来抑制该函数的生成需要终止函数(嵌入式编码)(默认设置)。

如果您有Embedded Coder软件,为了促进外部代码和生成代码的集成,并实现与代码标准和指南的一致性,您可以配置代码生成器如何从模型或子系统生成功能接口。

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

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

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

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

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

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

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

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

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

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

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

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

  • 打包模型根级的值轮廓尺寸块和外港块转换成实时模型数据结构。通过引用将该结构作为参数传递给执行函数。

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

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

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

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

如果您正在使用基于ert的系统目标文件,并希望生成可重用的、可重入的多实例C入口点函数,请考虑:

  • 使用动态内存分配来初始化模型数据结构。选择对模型初始化使用动态内存分配(嵌入式编码)

  • 模型根级的包装值轮廓尺寸块成结构,包装值为根级外港块放入第二个结构,并通过引用将结构作为参数传递给执行函数。集传递根级I/O为(嵌入式编码)结构参考

  • 模型根级的包装值轮廓尺寸块和外港块插入实时模型数据结构,并通过引用将该结构作为参数传递给执行函数。集传递根级I/O为(嵌入式编码)部分模型数据结构

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

  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文件日志记录,或者一个或多个输出端口的采样时间不是基本基准速率(包括恒定速率)。

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

  • 如果你有状态流®,对于使用模型根导入值的状态流图或调用使用模型根导入值的子系统的状态流图,执行以下操作之一来生成代码:

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

    • 使statflow函数成为不可重用的函数。

    • 插入Simulin金宝appk®信号转换在根导入后立即阻塞。在信号转换块参数对话框中,选择从“减少块”优化中排除此块

  • 如果模型根导入值连接到Simscape™转换块,则插入一个Simulink金宝app信号转换块之间的根导入和Simscape转换块。在信号转换块参数对话框中,选择从“减少块”优化中排除此块

  • 在构建配置了功能接口的引用模型时,不要使用虚拟总线作为引用模型的输入或输出。改用非虚拟总线。

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

另请参阅

|

相关的话题