主要内容

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

什么是入口点函数?

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

当为模型生成代码时,代码生成器定义了一组入口点函数,您可以调用它们来执行生成的代码。您可以从外部代码中调用生成的函数,或者从您修改的生成的主函数的一个版本中调用生成的函数。

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

生成的入口点函数的类型

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

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

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

配分函数 分区:slIdentifier,在那里slIdentifier是模型中的块显式创建的分区,并显示在Simulink®调度编辑器中(例如,P1),还是并发执行对话框中的任务名称 模型_stepn,在那里n唯一标识为一个模型样本周期生成的函数 对于模型分区,输出并更新代码。模型配置参数单输出/更新功能被选中(默认值)。
分区更新功能 PartitionUpdate:slIdentifier,在那里slIdentifier是模型中的块显式创建的分区,并显示在Simulink®调度编辑器中(例如,P1),还是并发执行对话框中的任务名称 模型_outputn而且模型_updaten,在那里n唯一标识为一个模型样本周期生成的函数 对于模型分区,在单独的函数中输出和更新代码。模型配置参数单输出/更新功能清除。
周期性的多任务功能 周期:slIdentifier在哪里slIdentifier是一个注释,对应于多任务模型的周期或连续速率的采样时间段(例如D1) 模型_stepn,在那里n唯一标识为一个模型样本周期生成的函数 用于配置为多任务处理、输出和更新代码的基于速率的模型中的块。代码生成器为每个样本周期生成一个函数。模型配置参数单输出/更新功能被选中(默认值)。
定时多任务更新功能 PeriodicUpdate:slIdentifier在哪里slIdentifier是一个注释,对应于多任务模型的周期或连续速率的采样时间段(例如D1) 模型_outputn而且模型_updaten,在那里n唯一标识为一个模型样本周期生成的函数 对于配置为多任务处理的基于速率的模型中的块,在单独的函数中输出和更新代码。代码生成器为每个示例周期生成输出和更新函数。模型配置参数单输出/更新功能清除。
定期做单一的功能 周期 模型_step 基于速率模型的块配置为单任务,输出和更新代码。模型配置参数单输出/更新功能被选中(默认值)。
定期单任务更新功能 PeriodicUpdate 模型_output而且模型_update 对于基于速率的模块,配置为单任务,输出和更新代码在单独的功能。模型配置参数单输出/更新功能清除。
重置功能 重置:slIdentifier在哪里slIdentifier重置函数的名称是否在模型中 模型_reset-function-name

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 将每个模型根级导入块和输出块的值作为单独的参数传递给执行函数。

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

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

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

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

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

如何与生成的入口点函数交互

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

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

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

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

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

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

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

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

有关更多信息,请参见将应用程序部署到目标硬件(嵌入式编码)

C函数接口定制限制

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

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

  • 支持多速率模型,但必须为单个任务配置模型。

  • 的根级导入和输出端口必须配置默认的存储类。

  • 如果选择自定义函数接口,则必须提供自己的自定义主要程序。功能接口不能配置静态接口rt_main.c, MathWorks®提供了。指定非默认的函数接口配置会导致生成的代码与默认静态之间的不匹配rt_main.c

  • 代码生成器删除模型根导入的数据结构,除非由不可重用函数实现的子系统使用一个或多个导入的值。

  • 除非启用mat文件日志记录,或者一个或多个输出端口的采样时间不是基本基本速率(包括恒定速率),否则代码生成器会删除模型根输出端口的数据结构。

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

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

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

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

    • 插入一个仿真软件®信号转换在根导入之后立即阻塞。在信号转换块参数对话框,选择从“减少块”优化中排除此块

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

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

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

另请参阅

|

相关的话题

Baidu
map