主要内容

选项代表变异参数生成的代码

你只能生成代码为活跃的和不活跃的活跃值或值的变异参数在仿真软件金宝app®。你也可以代表变量参数的值作为内联变量或可调变量在生成的代码中。

请注意

相关变量参数启动激活时间,您可以生成代码通过安装两个活跃的和不活跃的选择金宝app仿真软件编码器™或者嵌入式编码器®

相关变量参数代码编译激活时间:

  • 您必须安装金宝app仿真软件编码器来生成代码只活跃的变量参数的值。使用生成代码金宝app仿真软件编码器只有支金宝app持变量参数的值具有相同的维度。

  • 您必须安装嵌入式编码器来生成代码为活跃的和不活跃的变量参数的值。生成代码使用嵌入式编码支持变异参数值有相同和不同的维度。金宝app

变异参数的概述

变异参数可以有多个值。每个值的变异参数变异条件表达式。在仿真中,变异参数的值与评估的条件有关真正的的活跃值变异参数。与条件评估相关联的值参数是不活跃的变体。当您生成代码时,您可以选择只包括活跃值或活跃的和不活跃的值在生成的代码中。你也可以选择代表作为内联或可调变量的值在生成的代码。变异参数的更多信息,请参阅使用变量参数重用块参数不同的值

在生成的代码中选择值

金宝app仿真软件金宝app仅支持生成代码为活跃的和不活跃的活跃值或值的变量参数。值中包含的代码是基于您所指定的变体激活时间为变量参数。有关更多信息,请参见激活变体在不同阶段的模拟和代码生成工作流

当你指定不同的激活时间为:

  • “更新图”——模金宝app型不分析变量参数的值在信号不兼容属性。它只生成代码的活跃值变异参数。

  • “更新图分析所有的选择”——仿金宝app真软件分析两个活跃的和不活跃的变量参数的值在信号不兼容属性,但是它只生成代码的活跃值变异参数。

  • 代码编译的——仿金宝app真软件分析两个活跃的和不活跃的变量参数的值在信号不兼容的属性和它还生成代码为活跃的和不活跃的值的变量参数。封闭在C预处理器条件语句的值#如果# endif是有条件地编译时编译生成的代码。

  • “启动”——金宝app仿真软件分析两个活跃的和不活跃的变量参数的值在信号不兼容的属性和它还生成代码为活跃的和不活跃的值的变量参数。的值是用普通的如果内部条件model_initialize函数生成的代码,有条件地评估当您运行构建的可执行代码。

在生成的代码类型的变量

金宝app仿真软件金宝app支持代表变量参数的值作为内联变量或可调变量在生成的代码中。的表示值的代码是基于您所指定的存储类的变量参数。

  • 内联变量:如果你指定一个变种的存储类参数汽车,这是一个默认的存储类,激活时间更新图更新图分析所有的选择,那么变量参数是内联的文字数值参数在生成的代码中。如果您指定一个变种的存储类参数汽车和激活的时间代码编译,那么变量参数是内联的宏生成的代码。内联变量减少全球内存使用和提高效率的生成的代码。不分配内存的代码代表数字块参数,如获得参数的获得块。相反,内联代码的文字数值参数。

  • 可调:如果你指定一个变异参数的存储类以外的任何东西汽车变异参数,然后在生成的代码中使用符号名称表示。的内置存储类支持不同活化时间,明白了金宝app存储类激活时间为不同的变体

存储类激活时间为不同的变体

当你指定一个条件表达式来确定主动选择,每个变量表达式的控制变量都有一个与之关联的存储类。使用存储类控制变异的外观和位置控制变量在生成的代码中。存储类也防止存储的优化,如消除变异控制变量在生成的代码中。有关更多信息,请参见选择存储类数据表示控制生成的代码

变异条件表达式中使用的变量必须满足这些标准来生成代码金宝app仿真软件编码器或嵌入式编码器。

  • 变异的变异控制变量条件表达式必须有这些存储类。

  • 如果激活时间的控制变量被设置为一个变体启动,然后指定其存储类的这些不支持:金宝app

    • 存储类等定义生成的宏代码。

    • 存储类等常量在代码中生成常数合格变量。

  • 如果参数是一个变体的一部分银行(变异参数金宝appSimulink.VariantBank对象)如果激活时间控制变量设置为相应的变体启动,指定存储类使用规范财产的金宝appSimulink.VariantVariable对象不支持。金宝app使用金宝appSimulink.VariantBankCoderInfo类。

  • 如果激活时间的控制变量被设置为一个变体代码编译如果有不同的维度的值,那么指定存储类等定义不支持代码中生成的宏。金宝app

象征性的维度在生成的代码

如果一个变异参数值与多个维度,仿真软件生成符号来表示维度在生成的代码中。金宝app代表维符号使代码之间灵活切换维度值给定的主动选择不重新生成代码每次你改变变异控制变量的值。在符号维度变量参数的更多信息,见编译代码有条件地对所有变量参数的值相同和不同的维度

在生成的代码组变异参数值

使用嵌入式编码器,可以使用变量参数银行集团变异参数相同的变异条件下结构生成的代码。代码生成器支持变异参数银行只对变体激活金宝app时间设置为参数与变体启动

生成的代码包含一个数组参数银行结构类型的变体。代码生成器组所有的变异参数选择值基于变异条件和每组选择的值变成了数组的一个元素。代码使用一个指针变量访问活动设置的值的数组。银行交换使用指针变量参数避免了选择的值复制到主程序内存和提高了效率和生成的代码的可读性。看到金宝appSimulink.VariantBank

为变量参数生成C代码

这个例子展示了如何为变量参数生成C代码。

探索模型

考虑到slexVariantParameters模型。打开模型,使用以下命令。

openExample (金宝app' simulink_variants / CreateASimpleVariantParameterModelExample ');

变异参数获得块中

获得参数Gain1Gain2块与它们的值设置为变量参数K1K2,分别。的变量K1有两个值:3.58.5。的变量K2有两个值:4.59.5

金宝app模型选择积极的价值观K1K2基于不同控制变量的值V。如果V = = 1计算结果为真正的,然后的价值K1被设置为3.5和的值K2被设置为8.5。如果V = = 2计算结果为真正的,然后的价值K1被设置为4.5和的值K2被设置为9.5

在这个示例中,变量设置为激活时间更新图,并设置为存储类汽车。当你从这个模型生成代码,代码生成的积极价值K1K2。在生成的代码中,这些值是内联的文字值参数。

生成内联和变异参数可调代码使用嵌入式编码器

从模型生成代码之前,您必须有写权限在当前文件夹。

  1. 为代码生成模型通过指定代码生成设置配置参数对话框。选择解算器和代码生成的目标,检查模型配置为执行效率。每一个步骤的更多细节,请参阅使用嵌入式编码器生成代码

  2. 应用程序模型的画廊将来发布,点击金宝app仿真软件编码器

  3. C代码选项卡上,单击构建

    代码生成器创建的文件夹slexVariantParameters_ert_rtw在您当前的工作目录和地方源代码文件的文件夹。生成的代码是在两个主要文件:slexVariantParameters.cslexParameters.h。该文件slexVariantParameters.h包含变量控制变量的值,该文件slexVariantParameters.c包含变量参数的值。

  4. C代码选项卡上,选择开放的报告

  5. 选择slexVariantParameters.c文件从生成的代码报告的窗格。生成的代码是唯一的活跃值K1K2。在生成的代码中,这些值是内联的文字值参数。

    slexVariantParameters_Y。着干活= 3.5 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = 4.5 * slexVariantParameters_U.In2;
  6. 在模型中,改变激活时间代码编译和存储类ExportedGlobal,然后再次生成代码。观察生成的代码的风格的变化。

    生成的代码只有在所有的活跃的和不活跃的值K1K2。在生成的代码中,使用符号名称所代表的值。

    这个表格展示了不同风格的存储类生成的代码汽车ExportedGlobal不同活化时间。

    激活时间 存储类
    汽车(默认) ExportedGlobal
    更新图

    生成的代码只活跃值的变量参数。在生成的代码中,这些值是内联的文字值参数。

    考虑这段代码生成的代码。4.53.5内联的活跃值变异参数吗Gain1Gain2

    空白slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= 3.5 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = 4.5 * slexVariantParameters_U.In2;}

    生成的代码只变种的活跃值参数。在生成的代码中,使用符号名称所代表的值。

    考虑这段代码生成的代码。在这里,K1K2为活跃值变异参数符号名称吗Gain1Gain2

    real_T K1 = 3.5;real_T K2 = 4.5;……空白slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= K1 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = K2 * slexVariantParameters_U.In2;}

    更新图分析所有的选择

    生成的代码是一样的更新图。唯一不同的是,活跃的和不活跃的值变异参数分析等信号的一致性属性维度模型和数据类型。

    生成的代码是一样的更新图。唯一不同的是,活跃的和不活跃的值变异参数分析等信号的一致性属性维度模型和数据类型。

    代码编译

    为所有生成的代码是活跃的和不活跃的变量参数的值。所有的值都是分析信号属性,如尺寸的一致性和数据类型模型。在生成的代码中,这些值是内联宏和封闭在预处理条件#如果# elif

    考虑这段代码生成的代码。活跃的和不活跃的值包含在C预处理程序条件语句#如果# elifrtCP_Gain1_K1rtCP_Gain_K2变异参数的宏吗Gain1Gain2

    #如果V = = 1 #定义rtCP_Gain1_K1 (3.5) # elif V = = 2 #定义rtCP_Gain1_K1 (8.5) # endif #如果V = = 1 # define rtCP_Gain_K2 (4.5) # elif V = = 2 #定义rtCP_Gain_K2 (9.5) # endif空白slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= rtCP_Gain_K1 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = rtCP_Gain1_K2 * slexVariantParameters_U.In2;}

    为所有生成的代码是活跃的和不活跃的变量参数的值。所有的值都是分析信号属性,如尺寸的一致性和数据类型模型。在生成的代码中,使用符号名称和所代表的值是被包围在预处理条件#如果# elif

    考虑这段代码生成的代码。活跃的和不活跃的值包含在C预处理程序条件语句#如果# elif。在这里,K1K2为变量参数符号名称吗Gain1Gain2

    #如果V = = 1 real_T K1 = 3.5;real_T K2 = 4.5;# elif V = = 2 real_T K1 = 8.5;real_T K2 = 9.5;# endif空白slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= K1 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = K2 * slexVariantParameters_U.In2;)

    启动

    为所有生成的代码是活跃的和不活跃的变量参数的值。所有的值都是分析信号属性,如尺寸的一致性和数据类型模型。在生成的代码中,这些值是内联宏和封闭在常规如果条件。

    考虑这段代码生成的代码。活跃的和不活跃的值包含在常规如果内部条件语句model_initialize函数。的model_initialize函数还包含一个断言语句检查至少一个变量值是活跃在运行可执行文件。slexVariantParameters_P.K1slexVariantParameters_P.K2结构成员变量参数吗Gain1Gain2

    静态孔隙slexVaria_startupVariantChecker(空白){/ *启动条件变体检查* / utAssert ((V = = 1) + (V = = 2) = = 1);}无效slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= slexVariantParameters_P。K1 *……slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = slexVariantParameters_P。K2 *……slexVariantParameters_U.In2;}无效slexVariantParameters_initialize(空白){如果(V = = 1) {slexVariantParameters_P。K1 = 3.5;slexVariantParameters_P.K2= 4.5; } else if (V == 2) { slexVariantParameters_P.K1 = 8.5; slexVariantParameters_P.K2 = 9.5; } slexVaria_startupVariantChecker(); }

    为所有生成的代码是活跃的和不活跃的变量参数的值。所有的值都是分析信号属性,如尺寸的一致性和数据类型模型。在生成的代码中,使用符号名称和所代表的值是用普通的如果条件。

    考虑这段代码生成的代码。活跃的和不活跃的值包含在常规如果内部条件语句model_initialize函数。的model_initialize函数包含一个断言语句检查至少一个变量值是活跃的。在这里,K1K2为变量参数符号名称吗Gain1Gain2

    静态孔隙slexVaria_startupVariantChecker(空白){/ *启动条件变体检查* / utAssert ((V = = 1) + (V = = 2) = = 1);}无效slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= K1 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = K2 * slexVariantParameters_U.In2;}无效slexVariantParameters_initialize (void){如果(V = = 1) {K1 = 3.5;K2 = 4.5;}else if (V = = 2) {K1 = 8.5;K2 = 9.5;}slexVaria_startupVariantChecker ();}

另请参阅

|

相关的话题