选项代表变异参数生成的代码
你只能生成代码为活跃的和不活跃的活跃值或值的变异参数在仿真软件金宝app®。你也可以代表变量参数的值作为内联变量或可调变量在生成的代码中。
请注意
相关变量参数启动
激活时间,您可以生成代码通过安装两个活跃的和不活跃的选择金宝app仿真软件编码器™或者嵌入式编码器®。
相关变量参数代码编译
激活时间:
您必须安装金宝app仿真软件编码器来生成代码只活跃的变量参数的值。使用生成代码金宝app仿真软件编码器只有支金宝app持变量参数的值具有相同的维度。
您必须安装嵌入式编码器来生成代码为活跃的和不活跃的变量参数的值。生成代码使用嵌入式编码支持变异参数值有相同和不同的维度。金宝app
变异参数的概述
变异参数可以有多个值。每个值的变异参数变异条件表达式。在仿真中,变异参数的值与评估的条件有关真正的
的活跃值变异参数。与条件评估相关联的值假
参数是不活跃的变体。当您生成代码时,您可以选择只包括活跃值或活跃的和不活跃的值在生成的代码中。你也可以选择代表作为内联或可调变量的值在生成的代码。变异参数的更多信息,请参阅使用变量参数重用块参数不同的值。
在生成的代码中选择值
金宝app仿真软件金宝app仅支持生成代码为活跃的和不活跃的活跃值或值的变量参数。值中包含的代码是基于您所指定的变体激活时间为变量参数。有关更多信息,请参见激活变体在不同阶段的模拟和代码生成工作流。
当你指定不同的激活时间为:
“更新图”
——模金宝app型不分析变量参数的值在信号不兼容属性。它只生成代码的活跃值变异参数。“更新图分析所有的选择”
——仿金宝app真软件分析两个活跃的和不活跃的变量参数的值在信号不兼容属性,但是它只生成代码的活跃值变异参数。代码编译的
——仿金宝app真软件分析两个活跃的和不活跃的变量参数的值在信号不兼容的属性和它还生成代码为活跃的和不活跃的值的变量参数。封闭在C预处理器条件语句的值#如果
和# endif
是有条件地编译时编译生成的代码。“启动”
——金宝app仿真软件分析两个活跃的和不活跃的变量参数的值在信号不兼容的属性和它还生成代码为活跃的和不活跃的值的变量参数。的值是用普通的如果
内部条件model_initialize
函数生成的代码,有条件地评估当您运行构建的可执行代码。
在生成的代码类型的变量
金宝app仿真软件金宝app支持代表变量参数的值作为内联变量或可调变量在生成的代码中。的表示值的代码是基于您所指定的存储类的变量参数。
内联变量:如果你指定一个变种的存储类参数
汽车
,这是一个默认的存储类,激活时间更新图
或更新图分析所有的选择
,那么变量参数是内联的文字数值参数在生成的代码中。如果您指定一个变种的存储类参数汽车
和激活的时间代码编译
,那么变量参数是内联的宏生成的代码。内联变量减少全球内存使用和提高效率的生成的代码。不分配内存的代码代表数字块参数,如获得参数的获得块。相反,内联代码的文字数值参数。可调:如果你指定一个变异参数的存储类以外的任何东西
汽车
变异参数,然后在生成的代码中使用符号名称表示。的内置存储类支持不同活化时间,明白了金宝app存储类激活时间为不同的变体。
存储类激活时间为不同的变体
当你指定一个条件表达式来确定主动选择,每个变量表达式的控制变量都有一个与之关联的存储类。使用存储类控制变异的外观和位置控制变量在生成的代码中。存储类也防止存储的优化,如消除变异控制变量在生成的代码中。有关更多信息,请参见选择存储类数据表示控制生成的代码。
变异条件表达式中使用的变量必须满足这些标准来生成代码金宝app仿真软件编码器或嵌入式编码器。
变异的变异控制变量条件表达式必须有这些存储类。
此表列出了内置的存储类支持使用不同活化时间来生成代码金宝app金宝app仿真软件编码器和嵌入式编码。
内置的存储类 变体激活时间 代码编译
启动
ExportedGlobal x ✓ 模型的默认 x ✓ ImportedExtern, ImportedExternPointer x ✓ 汽车 x x 此表列出了自定义存储类支持不同活化时间使用嵌入式编码器生成代码。金宝app
定制的存储类 变体激活时间 代码编译
启动
GetSet x ✓ 定义、ImportedDefine ✓ x CompilerFlag ✓ x 常量和ConstVolatile。看到的,常量、挥发性和ConstVolatile x x 设置 x ✓ 结构体 x ✓ ExportToFile x ✓ ImportFromFile x ✓ 不稳定。看到的,常量、挥发性和ConstVolatile x ✓
如果激活时间的控制变量被设置为一个变体
启动
,然后指定其存储类的这些不支持:金宝app存储类等
定义
生成的宏代码。存储类等
常量
在代码中生成常数合格变量。
如果参数是一个变体的一部分银行(变异参数
金宝appSimulink.VariantBank
对象)如果激活时间控制变量设置为相应的变体启动
,指定存储类使用规范
财产的金宝appSimulink.VariantVariable
对象不支持。金宝app使用金宝appSimulink.VariantBankCoderInfo
类。如果激活时间的控制变量被设置为一个变体
代码编译
如果有不同的维度的值,那么指定存储类等定义
不支持代码中生成的宏。金宝app
象征性的维度在生成的代码
如果一个变异参数值与多个维度,仿真软件生成符号来表示维度在生成的代码中。金宝app代表维符号使代码之间灵活切换维度值给定的主动选择不重新生成代码每次你改变变异控制变量的值。在符号维度变量参数的更多信息,见编译代码有条件地对所有变量参数的值相同和不同的维度。
在生成的代码组变异参数值
使用嵌入式编码器,可以使用变量参数银行集团变异参数相同的变异条件下结构生成的代码。代码生成器支持变异参数银行只对变体激活金宝app时间设置为参数与变体启动
。
生成的代码包含一个数组参数银行结构类型的变体。代码生成器组所有的变异参数选择值基于变异条件和每组选择的值变成了数组的一个元素。代码使用一个指针变量访问活动设置的值的数组。银行交换使用指针变量参数避免了选择的值复制到主程序内存和提高了效率和生成的代码的可读性。看到金宝appSimulink.VariantBank
。
为变量参数生成C代码
这个例子展示了如何为变量参数生成C代码。
探索模型
考虑到slexVariantParameters
模型。打开模型,使用以下命令。
openExample (金宝app' simulink_variants / CreateASimpleVariantParameterModelExample ');
的获得参数Gain1和Gain2块与它们的值设置为变量参数K1
和K2
,分别。的变量K1
有两个值:3.5
和8.5
。的变量K2
有两个值:4.5
和9.5
。
金宝app模型选择积极的价值观K1
和K2
基于不同控制变量的值V
。如果V = = 1
计算结果为真正的
,然后的价值K1
被设置为3.5
和的值K2
被设置为8.5
。如果V = = 2
计算结果为真正的
,然后的价值K1
被设置为4.5
和的值K2
被设置为9.5
。
在这个示例中,变量设置为激活时间更新图
,并设置为存储类汽车
。当你从这个模型生成代码,代码生成的积极价值K1
和K2
。在生成的代码中,这些值是内联的文字值参数。
生成内联和变异参数可调代码使用嵌入式编码器
从模型生成代码之前,您必须有写权限在当前文件夹。
为代码生成模型通过指定代码生成设置配置参数对话框。选择解算器和代码生成的目标,检查模型配置为执行效率。每一个步骤的更多细节,请参阅使用嵌入式编码器生成代码。
在应用程序模型的画廊将来发布,点击金宝app仿真软件编码器。
在C代码选项卡上,单击构建。
代码生成器创建的文件夹
slexVariantParameters_ert_rtw
在您当前的工作目录和地方源代码文件的文件夹。生成的代码是在两个主要文件:slexVariantParameters.c
和slexParameters.h
。该文件slexVariantParameters.h
包含变量控制变量的值,该文件slexVariantParameters.c
包含变量参数的值。在C代码选项卡上,选择开放的报告。
选择
slexVariantParameters.c
文件从生成的代码报告的窗格。生成的代码是唯一的活跃值K1
和K2
。在生成的代码中,这些值是内联的文字值参数。slexVariantParameters_Y。着干活= 3.5 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = 4.5 * slexVariantParameters_U.In2;
在模型中,改变激活时间
代码编译
和存储类ExportedGlobal
,然后再次生成代码。观察生成的代码的风格的变化。生成的代码只有在所有的活跃的和不活跃的值
K1
和K2
。在生成的代码中,使用符号名称所代表的值。这个表格展示了不同风格的存储类生成的代码
汽车
和ExportedGlobal
不同活化时间。激活时间 存储类 汽车
(默认)ExportedGlobal
更新图
生成的代码只活跃值的变量参数。在生成的代码中,这些值是内联的文字值参数。
考虑这段代码生成的代码。
4.5
和3.5
内联的活跃值变异参数吗Gain1和Gain2。空白slexVariantParameters_step {slexVariantParameters_Y(无效)。着干活= 3.5 * slexVariantParameters_U.In1;slexVariantParameters_Y。Out2 = 4.5 * slexVariantParameters_U.In2;}
生成的代码只变种的活跃值参数。在生成的代码中,使用符号名称所代表的值。
考虑这段代码生成的代码。在这里,
K1
和K2
为活跃值变异参数符号名称吗Gain1和Gain2。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预处理程序条件语句
#如果
和# elif
。rtCP_Gain1_K1
和rtCP_Gain_K2
变异参数的宏吗Gain1和Gain2。#如果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
。在这里,K1
和K2
为变量参数符号名称吗Gain1和Gain2。#如果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.K1
和slexVariantParameters_P.K2
结构成员变量参数吗Gain1和Gain2。静态孔隙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
函数包含一个断言语句检查至少一个变量值是活跃的。在这里,K1
和K2
为变量参数符号名称吗Gain1和Gain2。静态孔隙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 ();}
另请参阅
使用变量参数重用块参数不同的值|选择存储类数据表示控制生成的代码