主要内容

生成组件的源代码导出到外部代码库

如果你有嵌入式编码器®从建模软件,您可以生成函数源代码组件中使用一个外部代码库。生成的代码不包括支持调度代码(例如,一个阶跃函数)。金宝app控制逻辑之外的仿真软件金宝app®环境调用生成的函数代码。

建模选项

您可以为这些建模生成函数代码出口组件:

  • 导出功能模型(模型包含的功能模块,由专门的函数调用子系统,函数调用模型块,或其他导出功能模型中描述导出功能模型概述)

  • 导出功能子系统(虚拟子系统包含函数调用子系统)

出口这些建模组件的代码生成器生成的代码,必须满足特定的建模组件需求

模型设计的更早的版本中,代码生成器可以导出功能从触发子系统。导出功能子系统的要求也适用于出口从触发子系统功能,以下异常:

  • 您打算出口函数封装触发子系统在顶级虚拟子系统。

  • 触发子系统没有满足需求和限制确定虚拟子系统包含函数调用子系统。

  • 导出函数,使用绝对或运行时间不适用于导出功能从触发子系统。

需求

  • 模型解算器必须是固定步离散解算器。

  • 您必须配置每个根级尺寸块,触发函数调用子系统输出函数调用触发。这些尺寸块不能连接到一个异步任务规范。

  • 模型或子系统,在根级别必须只包含以下模块:

    • 函数调用块(S-Functions,如函数调用子系统、模型函数和函数调用模型块在根级别如果解决模型配置参数金宝app任务和样品时间选项>定期取样时间约束被设置为确保样品时间独立)

    • 尺寸和外港块(港口)

    • 固定块(包括块决心常数,如添加)

    • 正的块样品时间

    • 合并和数据存储内存块

    • 虚拟连接块(如,函数调用分裂,Mux,多路分配器,总线的创造者,总线选择器,信号规范,和虚拟子系统包含这些块)

    • Signal-viewer块,如范围块(仅导出功能子系统)

  • 当一个常数块出现在模型的顶层或子系统,必须设置模型配置参数优化>默认参数的行为的模型或模型内联

  • 块内部模型或子系统必须支持代码生成。金宝app

  • 块使用绝对或运行时间必须在一个周期函数调用子系统与离散样本时间上指定相应的函数调用根级尺寸块。看到导出函数,使用绝对或运行时间

  • 数据导出系统的跨边界的信号不能被一个虚拟总线和不能被实现为一个Goto-From连接。数据信号穿过出口边界必须标量,mux或nonvirtual总线。

此外,对于导出功能模型,不能生成代码率模型,包括模型导出功能的多个实例。例如,您不能生成代码测试工具为调度可重用模型,使用导出功能模型在模拟。

导出功能子系统,以下额外的需求申请:

  • 一个触发信号,跨越边界的导出功能子系统必须标量。不作为的输入和输出数据信号触发不必标量。

  • 当一个常数信号驱动器的输出端口导出功能子系统、信号必须指定一个存储类。

导出函数,使用绝对或运行时间

如果你想导出功能建模组件代码块使用绝对或运行时间,那些块必须在函数调用子系统:

  • 您配置定期执行

  • 您配置root尺寸块离散采样时间

配置一个周期执行的函数调用子系统:

  1. 在函数调用子系统,右键单击触发块,选择块的参数从上下文菜单中。

  2. 设置参数样品时间类型周期

  3. 样品时间相同的粒度(直接或通过继承)指定的函数调用启动程序。

  4. 点击好吧应用

有关更多信息,请参见绝对和运行时间计算

限制导出功能子系统

  • 子系统块参数不控制包含生成的代码文件的名称。文件名开头的名字出口子系统。

  • 子系统块参数不控制顶层函数生成的代码的名字。每个函数的名字反映了信号,触发函数的名称或(一位不愿透露姓名的信号)反映了信号产生的块。

  • 您可以导出c++类代码的函数调用系统接口包装将只有当它的功能规范默认的步骤方法。看到交互式配置c++接口。导出的函数是兼容单线程执行。为了避免潜在的数据竞争条件共享信号,调用类的所有成员相同的执行线程。

  • 代码生成器支持银或公益诉讼在加速器模式金宝app只有在函数调用引发剂在加速器noninlined模式。noninlined启动器的例子包括Stateflow®图表。

  • 2级功能启动程序块,如Stateflow图表或内置的函数调用生成器,必须推动硅块。

  • 您可以导出一个异步函数调用系统(采样时间),但是该软件不支持异步系统的硅或公益诉讼的块。金宝app

  • 薄层色谱的使用功能LibIsFirstInit已经删除了导出功能子系统。

工作流

为一个导出函数生成代码,遍历表中列出的任务。

任务 行动 更多的信息
1 回顾你的评估外部代码特点和集成需求。

选择一个外部代码集成工作流

2 确认你导出的模型或子系统,满足出口需求函数。

需求

3 地址数据接口需求通过修改模型或子系统。

外部C / c++代码之间交换数据和仿真软件模型生成的代码金宝app

4 如果有必要,配置函数原型。

为仿真软件配置入口点函数接口函数和函数调用者金宝app固定步率模型,配置生成的C函数入口点函数接口模型交互式配置c++接口

5 如果有必要,更新模型将外部生成特定于应用程序的代码在系统功能。

把外部C / c++代码生成的代码

6 验证功能的行为和执行如预期在模拟创建和使用一个测试模型。日程安排的测试模型在仿真执行的函数。

配置模型,生成代码,模拟如果你有金宝app仿真软件测试™软件,测试编写(金宝app仿真软件测试)

7 为代码生成配置模型或子系统。

模型配置设置自定义

8 生成代码和代码生成报告。

代码生成

9 检查生成的代码接口和静态代码度量。

分析生成的数据代码接口静态代码度量

10 构建一个可执行程序,包括导出的函数代码。

构建集成的代码在仿真软件环境金宝app

11 确认可执行程序的行为,按预期执行。

验证、测试和认证

选择一个集成方法

多种方法可用于生成函数导出到一个外部代码开发环境。下表比较的方法。选择对齐的方法最好的集成需求。如何创建导出功能模型的更多信息,参见导出功能模型概述。更多信息在生成代码的函数调用子系统,明白了生成组件的源代码导出到外部代码库

条件或要求 使用 更多的信息
  • 建模元素和生成的代码之间的可跟踪性

  • 本地输入(尺寸块)和输出(外港块)

函数调用子系统
  • 控制生成的函数原型

  • 正式的输入参数(参数尺寸块)和输出参数(参数外港块)

  • 本地输入(尺寸块)和输出(外港块)

金宝app仿真软件功能块
代码响应一个初始化事件 初始化功能块
响应一个重置事件代码 重置功能块
代码包括入口点函数超出代码生成器生成默认情况下(模型_initialize,模型_step,模型_terminate) 功能 S-Functions和代码生成
单模执行框架作为测试工具和出口部分的模型生成的代码 导出功能子系统

生成导出功能的C函数代码模型

这个例子展示了如何生成单独的函数调用的函数代码子系统模型中没有生成调度代码。

为导出生成函数代码:

  1. 创建一个模型,其中包含导出的功能。

  2. 配置接口的代码。

  3. 创建一个测试工具在仿真模型,计划的执行功能。

  4. 模拟模型,该模型包含了函数通过使用测试工具模型。

  5. 生成的代码模型包含的功能。

创建模型,其中包含函数用于出口

出口模型函数必须满足建筑模型根级别的约束。在根水平,有效块:

  • 轮廓尺寸

  • 外港

  • 函数调用子系统

  • 金宝app仿真软件的功能

  • 转到

  • 合并

对于这个示例,代码生成器生成函数代码初始化函数,终止函数,函数调用子系统模块。一个初始化函数块上执行模型初始化事件和终止功能块执行终止事件。函数调用子系统块,块的输入端口连接到根尺寸块断言函数调用信号。子系统是基于所接收到的信号函数调用执行。

出口函数模型ComponentDeploymentFcn包含两个函数调用子系统(积分器蓄电池)。函数调用子系统积分器表示一个非周期函数积分器。函数应用积分法和增益值状态变量的值为1.25x每次执行的函数。函数调用子系统蓄电池表示一个周期函数增量状态变量的值x1,适用于可调增益值k。这个函数执行每一秒。

open_system (“ComponentDeploymentFcn”)

配置模型代码接口

模型ComponentDeploymentFcn配置为使用服务接口,代码中定义的ComponentDeploymentCoderDictionary.sldd。代码生成器使用关联字典建立默认映射,您可以查看和更改的代码使用映射编辑器的代码或代码编程接口映射。

对于元素默认接口符合要求,不需要做出改变。对于这个示例,代码接口需求,这些调整都是:

  • 功能选项卡中,默认为非周期函数定制模板积分器和周期性蓄电池功能产生函数名CD_AperiodicCD_Periodic。为这些函数结合目标平台的需求,代码覆盖默认的映射函数名称,通过指定函数的名字CD_integratorCD_accumulator

  • 另一个定时器服务接口与集成功能。编码器字典定义了两个定时器服务接口:默认界面和另一个接口get_CD_tick与目标平台的定时器服务需求函数名。定时器服务设置,在功能选项卡上,选择行导出功能:非周期并点击铅笔图标。在出现的对话框中,看到定时器服务属性设置为get_CD_tick。此外,您可以设置的属性在属性检查器。

  • 参数选项卡中,指定的代码标识符是增益块增益参数k。标识符设置,模型参数,选择参数的行并单击铅笔图标。在出现的对话框中,为指定的值标识符财产,k。标识符告诉代码生成器如何表示变量在生成的代码中。此外,您可以设置的属性在属性检查器。

  • 信号/州选项卡中,代码标识符指定了相关的状态离散时间积分器和单元延迟块。看到标识符设置(贸易工业部延迟),选择感兴趣的状态行,点击铅笔图标。在出现的对话框中,为指定的值标识符财产。标识符告诉代码生成器代表相应的变量如何在生成的代码。此外,您可以设置的属性在属性检查器。

审查代码的映射,打开嵌入编码器的应用程序,然后选择代码接口>组件接口。映射编辑器的代码出现在应用程序显示的底部。

在代码映射编辑器中,您可以更改接口发送方,接收器,数据传输和定时器服务。改变发送器、接收器和数据传输服务,单击相应的选项卡,选择另一种服务,在服务专栏。改变定时器服务,单击功能选项卡上,选择积分器的行功能,点击铅笔图标,在出现的对话框中,选择另一个接口。默认的接口使用outside-execution数据通信方法。另一种使用在执行期间和直接访问数据通信接口。考虑改变接口视图生成的代码的差异。如果你选择改变接口,为每个服务称为数据通路的一个信号,设置接口,这样他们应用相同的数据通信方法。

关于为服务接口模型代码映射的更多信息,见C服务接口映射编辑器- C代码

创建测试利用模型模拟

当您导出功能,生成的代码不包括调度器。创建一个测试工具处理期间调度仿真模型。不使用测试工具模型生成代码部署。

模型ComponentDeploymentFcnHarness是一个测试工具。模型提供了函数调用信号到其他模型在这个例子中调度模型的内容,包括模型的初始化和终止事件。

open_system (“ComponentDeploymentFcnHarness”)

对于这个模型,在嵌入式编码应用,输出被设置为只模拟。此设置允许您测试模型和模型之间的切换焦点,你打算不开一个单独的模型生成代码编辑器窗口。金宝app

模拟测试模型

验证该模型包含的功能你想出口执行您期望通过模拟测试模型。例如,模拟ComponentDeploymentFcnHarness

sim卡(“ComponentDeploymentFcnHarness”)

生成函数代码

嵌入式编码器应用,重点转向通过双击组件模型ComponentDeploymentFcn。然后,生成代码的功能你想出口。

slbuild (“ComponentDeploymentFcn”)
# # #开始构建过程:ComponentDeploymentFcn # # #成功完成代码生成:ComponentDeploymentFcn模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ComponentDeploymentFcn代码生成。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米20.539秒

检查生成的代码

检查生成的代码。代码生成器创建的文件夹ComponentDeploymentFcn_ert_rtw在当前工作目录和地方源代码文件的文件夹。生成的代码是在两个主要文件:头文件ComponentDeploymentFcn.h和源代码文件ComponentDeploymentFcn.cComponentDeploymentFcn.c调用初始化函数,导出功能积分器蓄电池,并终止功能。模型数据和入口点函数的调用者可包括头文件。

代码生成器也生产rtwtypes.h和服务头文件,默认情况下,编码器services.h发生器的名字。头文件rtwtypes.h定义数据类型、结构和宏生成的代码需要。头文件services.h是一个接口头文件驻留在子文件夹吗服务

检查生成的代码,使用生成的代码接口报告,或者在嵌入式编码应用,使用代码视图。报告有助于验证接口代码生成与目标平台需求的一致性。有关更多信息,请参见报告分析代码生成的服务接口

编写接口代码

打开和检查接口的代码报告。编写接口代码执行框架,使用报告中的信息。

  1. 通过添加指令包括生成的头文件# include ComponentDeploymentFcn.h,# include rtwtypes.h,# include services.h

  2. 写输入数据生成的代码模型尺寸块。

  3. 调用生成的入口点函数。

  4. 读取数据模型生成代码的输出港。

入口点函数:

  • 初始化入口点函数,空白CD_initialize(空白)。在启动时,调用这个函数一次。函数使用一个目标环境接收服务从非易失存储器读取数据通过调用接口函数get_CD_initialize_InBus_NVM

  • 终止入口点函数,空白CD_terminate(空白)。在关闭,调用这个函数。函数使用一个目标环境发送者服务数据写入非易失性内存通过调用接口函数getref_CD_terminate_OutBus_NVM

  • 出口周期函数,空白CD_accumulator(空白)。在需要的时候调用这个函数。函数使用一个目标环境发送者服务编写函数的输出通过调用接口函数getref_CD_accumulator_OutBus_y

  • 出口非周期函数,空白CD_integrator(空白)。在需要的时候调用这个函数。函数使用一个目标环境接收服务读取输入函数通过调用接口函数get_CD_integrator_inBus_u。CD_integrator函数也使用目标环境定时器服务来得到目标环境时钟周期函数通过调用接口函数get_tick_outside_CD_integrator

更多关于

生成c++函数和类代码导出功能模型

这个例子展示了如何为一个导出功能模型,生成函数代码包含一个函数调用子系统。代码生成器生成函数和类的代码不包括调度代码。

为导出生成函数代码:

  1. 创建一个模型,其中包含导出的功能。

  2. 创建一个测试工具在仿真模型,计划的执行功能。

  3. 模拟模型,该模型包含了函数通过使用测试工具模型。

  4. 生成的代码模型包含的功能。

创建模型,其中包含函数和c++类接口用于出口

模型与一个c++函数导出模型类接口必须满足建筑模型根级别的约束。c++类生成,街区,是有效的在根级别:

  • 轮廓尺寸

  • 外港

  • 函数调用子系统

  • 转到

  • 合并

注意:导出函数调用子系统与c++类接口不支持仿真软件的功能模块。金宝app金宝app

代码生成器生成函数调用子系统功能代码块。函数调用子系统块,块的输入端口连接到根尺寸块断言函数调用信号。子系统是基于所接收到的信号函数调用执行。

模型rtwdemo_cppclass_functions包含函数调用子系统f1,f2,f3导出功能。

open_system (“rtwdemo_cppclass_functions”)

创建测试利用模型模拟

当您导出功能,生成的代码不包括调度器。创建一个测试工具处理期间调度仿真模型。不使用测试工具模型生成代码部署。

模型rtwdemo_cppclass_export_functions是一个测试工具。模型提供了函数调用信号到其他模型在这个例子中调度模型的内容。

open_system (“rtwdemo_cppclass_export_functions”)

模拟测试模型

验证该模型包含的功能你想出口执行您期望通过模拟测试模型。例如,模拟rtwdemo_cppclass_export_functions

sim卡(“rtwdemo_cppclass_export_functions”)

和报告生成功能代码

生成的代码和代码生成报告的功能你想出口。例如,生成的代码rtwdemo_cppclass_functions

slbuild (“rtwdemo_cppclass_functions”)
# # #开始构建过程:rtwdemo_cppclass_functions # # #成功完成构建过程:rtwdemo_cppclass_functions模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_cppclass_functions代码生成和编译。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米31.408秒

检查生成的代码

从代码生成报告,检查生成的代码。

  • ert_main.cpp是一个主程序(执行框架)模型。这个代码显示了如何调用导出的函数。还展示了如何初始化的代码和执行生成的代码。

  • rtwdemo_cppclass_functions.cpp调用初始化函数,包括初始化函数和导出函数模型子系统组件f1,f2,f3

  • rtwdemo_cppclass_functions.h声明模型数据结构和一个公共接口导出的入口点函数和数据结构。

  • rtwtypes.h定义数据类型、结构和宏生成的代码需要。

编写接口代码

打开和检查接口的代码报告。编写接口代码执行框架,使用报告中的信息。

  1. 通过添加指令包括生成的头文件# include rtwdemo_cppclass_functions.h# include rtwtypes.h

  2. 写输入数据生成的代码模型尺寸块。

  3. 调用生成的入口点函数。

  4. 读取数据模型生成代码的输出港。

输入端口:

  • rtU.U1类型的real_T维1

  • rtU.U2类型的real_T维1

  • rtU.U3类型的real_T维1

入口点函数:

  • 初始化入口点函数,无效的初始化(空白)。在启动时,调用这个函数一次。

  • 导出的函数,空白t_1tic_A(空白)。在需要的时候调用这个函数。

  • 导出的函数,空白t_1tic_B(空白)。在需要的时候调用这个函数。

  • 导出的函数,空白t_1tic_C(空白)。在需要的时候调用这个函数。

输出端口:

  • rtY.TicToc1类型的int8_T与维度[2]

  • rtY.TicToc2类型的int8_T与维度[2]

  • rtY.TicToc10类型的int8_T维1

更多关于

接近示例模型

bdclose (“rtwdemo_cppclass_export_functions”)bdclose (“rtwdemo_cppclass_functions”)

为导出功能子系统生成的代码

为一个导出功能子系统生成代码:

  1. 确认你的子系统生成代码满足出口需求

  2. 在配置参数对话框中:

    1. 设置参数系统目标文件ERT-based系统目标文件,如ert.tlc

    2. 如果你想要一个硅块生成的代码,用于验证目的,集模型配置参数创建块

    3. 点击好吧应用

  3. 右键单击并选择子系统的块C / c++代码>导出功能从上下文菜单中。

    操作创建和构建一个新的模型,子系统.slx包含的内容,并创建一个原始子系统ScratchModel包含一个块模型。这段引用新创建的子系统.slx模型。

    代码生成器生成的代码和在工作目录的地方。

    如果你设置创建块在步骤2 b,仿真软件打金宝app开一个新窗口,其中包含一个功能块生成的代码。这个街区有相同的大小,形状,和连接器与原始子系统。

现在代码生成和可选块创建完成。您可以测试并使用生成的代码和可选块为你ERT代码和功能块。可选的工作流任务,看到指定一个自定义的初始化函数名指定一个自定义的描述

指定一个自定义的初始化函数名

您可以指定一个自定义的名称初始化函数的导出函数作为参数slbuild命令。命令以以下形式:

blockHandle= slbuild ('子系统”、“模式”、“ExportFunctionCalls”, . .“ExportFunctionInitializeFunctionName”、“fcnname”)

fcnname指定了函数名。例如,如果您指定的名字“myinitfcn”,构建过程发出代码类似:

/ *模型初始化函数* /空白myinitfcn (void) {…}

指定一个自定义的描述

您可以输入自定义描述一个导出函数通过使用块尺寸块的属性对话框。

  1. 右键单击尺寸块驱动子系统的控制端口的出口代码。

  2. 选择属性

  3. 一般选项卡,描述字段中,输入您的描述性文本。

在函数导出,您输入的文本是排放到生成的代码的头尺寸块。例如,如果您打开示例程序rtwdemo_exporting_functions并输入一个描述块属性对话框的端口t_1tic_A,代码生成器生成的代码类似:

/ * *输出和更新功能:导出t_1tic_A * *我的自定义导出函数的描述* /空白t_1tic_A (void) {…}

优化代码生成的导出功能子系统

优化代码生成一个导出功能子系统,指定一个单独的存储类为每个输入信号和输出信号,跨越边界的子系统。

你出口的每个函数调用子系统:

  1. 右键单击该子系统。

  2. 从上下文菜单中,选择块参数(子系统)

  3. 选择代码生成选项卡。

  4. 函数包装汽车

  5. 点击好吧应用

相关的话题