如果你有嵌入式编码器®许可证,您可以集成从以前的版本(R2010a和更高版本)生成的C代码与当前版本生成的代码,当源代码模型是单一的,生成的C代码来自:
使用不可重用功能代码接口的顶层模型或子系统构建过程。
抑制错误状态监视的单个或多个实例模型引用构建流程(SuppressErrorStatus
是在
).
如果可以不经过修改就重用现有代码,就可以减少重新验证的成本。
考虑该控制系统模型。
这控制器
模型块引用一个由三个组件组成的模型:
P1
是一个模型block,其中引用了以前版本开发的模型,例如R2015b。生成的模型代码和独立的代码接口在文件夹中P1_ert_rtw
.
C1.
是一个模型块,它引用当前版本中正在开发的模型。
P2
是与先前版本开发的子系统块,例如R2016A。生成的子系统代码位于文件夹中P2_ert_rtw
.
P3
是一个模型块,引用与先前释放开发的模型,例如R2016B。生成的模型代码,使用模型参考代码界面处于文件夹中slprj / ert / P3
.
要将代码从当前版本与生成的代码集成,请使用此工作流程:
交叉发布代码集成工作流不支持:金宝app
ERT代码的导出功能模型。
金宝appSimulink功能和函数调用者跨越不同版本生成的ERT代码的边界块。
从R2010a之前的版本中生成的代码的集成。
将生成的代码从当前版本导入到以前的版本(向前兼容)。
导出位于Matlab中的文件®上一版本的根文件夹,例如blockset库文件。
来自具有非inlined S函数的模型的生成代码的导出和导入。
c api(嵌入式编码).
在模型构建过程的末尾,代码生成报告显示集成模型直接使用的共享文件,例如,控制器
.该报告不显示模型组件使用的共享文件,例如,P1
和P2
.
如果您的模型有:
一个交叉释放SIL或PIL块,你不能运行快速加速模式模拟。
一种模型块引用包含跨释放SIL或Pill块的模型,无法运行加速器模式或快速加速器模式模拟。
您可以运行:
包含交叉释放SIL或PIL块的模型的顶级SIL模拟。模型不能包含交叉发布的AUTOSAR模型块。
模型阻止包含交叉释放SIL或Pillocks的引用模型的SIL模拟。引用的模型不得包含跨发布的AutoAR模型块。
有关其他交叉发布AUTOSAR代码集成限制的信息,请参见从上一个版本导入AutoSar代码.
金宝app仿真软件。公共汽车
金宝app要使用总线对象作为数据类型的交叉释放ERT代码集成,请使用其中一种方法。
方法 | 代码出口 | 代码导入 |
---|---|---|
自动 | 在上一个版本中,在生成代码之前,设置 代码生成器创建 |
在运行之前在当前版本中 构建集成模型时,构建过程使用 |
出口巴士 | 在上一个版本中,在生成代码之前,指定
代码生成器创建 对于R2010A和R2010B, |
在运行之前在当前版本中 当您构建包含导入的SIL或Pill块的集成模型时,构建过程使用 如果导入的代码来自R2010a或R2010b,则指定
构建集成模型时,构建过程使用 |
进口汽车 | 在上一个版本中,在生成代码之前,指定
对于R2010A和R2010B, |
在当前版本中,导入生成的代码后,不必更改 当您构建包含导入的SIL或Pill块的集成模型时,构建过程使用 如果导入的代码来自R2010a或R2010b,则指定
构建集成模型时,构建过程使用 |
当从以前的版本导入ERT代码时,通过全局变量实现输入或输出端口,从集成模型生成的代码依赖于连接到集成模型中端口的信号的属性。
如果集成模型信号没有映射到与导入代码中的信号同名的生成代码变量,则生成的代码:
如果变量在导入的代码中声明但未定义,则定义该变量。
创建附加代码以复制从集成模型生成的变量和导入代码中的变量之间的数据。
如果集成模型信号映射到与导入代码中的信号同名的变量,则导入代码使用的变量也会被集成模型生成的代码使用。必须为信号使用兼容的存储类。
存储类属性 | 属性值支持金宝app |
---|---|
类型 | 非结构化 只有 |
数据访问 | 无法将实现为a的端口连接 无法将实现为a的端口连接 |
数据范围 | 如果导入的代码声明但没有定义变量(即代码是由使用
如果导入的代码定义了变量(即代码是由使用
|
当前和以前的版本组件可以通过关联的全局数据存储进行通信金宝app仿真软件。信号
对象或Simulink数据字典。金宝app这里描述的工作流适用于交叉发布ERT代码集成。
在旧版本中生成模型组件代码之前,配置数据存储内存以使用导入外部代码的存储类。
如果顶层模型或子系统构建过程生成代码,则设置存储类财产的金宝app仿真软件。信号
对象到其中一个类:
ImportedExtern
ImportedExternPointer
ImportFromFile
定制的存储类
如果模型引用构建过程生成了代码,你也可以使用这些类:
ExportedGlobal
ExportToFile
定制的存储类
在当前版本中,在运行之前crossReleaseImport
,定义A.金宝app仿真软件。信号
对象,或要导入组件的每个全局数据存储的Simulink数据字典:金宝app
对象名和数据类型那复杂,方面对象属性,指定与要导入的组件中对应对象的值相匹配的值。
为存储类属性时,指定一个兼容的值。如果之前的发布值为ImportedExtern
,为当前版本指定其中一个值:
ImportedExtern
ExportedGlobal
ImportFromFile
或ExportToFile
自定义存储类。
如果之前的发布值为ImportedExternPointer
,然后指定ImportedExternPointer
当前版本。
为标识符属性,只有在为要导入的组件中的对象指定了属性时,才指定匹配的值。
保存金宝app仿真软件。信号
对象。每次模拟或构建导入的SIL或PIL块时都需要这些对象。
有关更多信息,请参见生成代码中的数据存储.
交叉发布的ERT代码集成工作流支持集成模型中的参数调优,该模型包含包含来自以前版本的可调参数的组金宝app件代码。
在当前版本中,在运行之前crossReleaseImport
,用于要导入的组件的每个可调参数:
定义一个金宝app仿真软件。参数
对象或Simulink数据字典。金宝app
对象名和数据类型那复杂,方面对象属性,指定与先前发布对象值匹配的值。如果导入的源代码中的变量没有与对象相同的名称,则为标识符属性时,指定与变量名匹配的值。
如果上一个版本对象使用GetSet
自定义存储类,指定:
的匹配值存储类对象属性。
定义的头文件得到
和放
访问功能。有关详细信息,请参阅通过配置存储类属性控制数据表示(嵌入式编码)和通过使用存储类GetSet的函数访问数据(嵌入式编码).
金宝app的支持GetSet
以前版本的自定义存储类只适用于R2011a和以后的版本。
对于前一个版本中由顶级模型或子系统构建过程生成的代码,有以下限制:
参数指定的可调参数金宝app仿真软件。参数
对象将存储类设置为ExportedGlobal
的存储类金宝app仿真软件。参数
对象也是ExportedGlobal
,则在构建集成模型时发生错误。
在Mac操作系统上,如果一个可调参数由金宝app仿真软件。参数
对象将存储类设置为ExportedGlobal
的存储类,则无法构建集成模型金宝app仿真软件。参数
对象(具有相同名称或别名)中的ImportedExtern
.要解决这个限制,请修改默认设置:
从默认工具链获取构建工具。
tc = coder.make.getDefaultToolchain;cComp = tc.getBuildTool (C编译器的);
提取C编译器的标准选项。
stdmaps = ccomp.金宝appsupportedstandard.getlangStandardMaps;optionValues = stdmaps.getCompilerOptions(‘*’);
删除-fno-common.
C和c++编译器的标准选项。
optiontoremove ='-fno-common';optionsToKeep = strrep(optionValues, optionToRemove,'');c_standard_opts_id =“(C_STANDARD_OPTS)美元”;custToolChainOpts = get_param(模型,“CustomToolchainOptions”);custToolChainOpts {2} =...strrep (custToolChainOpts {2}, c_standard_opts_id optionsToKeep);set_param(模型,“CustomToolchainOptions”, custToolChainOpts);
使用可重用的引用模型,您可以指定唯一的模型参数值父模型中被引用模型的每个实例。将先前为可重用引用模型生成的代码作为参数化的交叉版本SIL或PIL块导入当前版本,然后将块的多个实例插入集成模型。对于每个块实例,您可以指定唯一的模型参数值。
更新现有的共享代码文件夹。
sharedCodeUpdate (sourcefolder.那destinationFolder的)
将可重用引用模型生成的代码作为参数化的跨版本块导入当前版本,例如,SIL块。
handleSILBlock= crossReleaseImport (reusableReferencedModelcodeLocation, ...configSetIntegrationModel、“SimulationMode”、“银”);
例如,在集成模型中,将引用模型的两个实例替换为跨版本SIL块的实例。
open_system (integrationModel);blockInstanceName1= 'RefmodelinstanceName1.'blockinstanceName2= 'RefmodelinstanceName2.'SILBlockFullName= getfullname (handleSILBlock);replace_block (integrationModel“名称”,blockInstanceName1, ...SILBlockFullName、“noprompt”);replace_block (integrationModel“名称”,blockInstanceName2, ...SILBlockFullName、“noprompt”);
假设可重用的引用模型有模型参数
和paramA
,以及引用的模型实例的值,paramB
和RefmodelinstanceName1.
,是工作空间变量。在这种情况下,您可以为作为工作区变量的跨发布块实例指定参数值。RefmodelinstanceName2.
pathtoblockinstanceName1.= (integrationModel' / ',blockInstanceName1];pathtoblockinstanceName2.= (integrationModel' / ',blockInstanceName2];set_param(pathtoblockinstanceName1., 'paramA”、“paramA_instName1');set_param(pathtoblockinstanceName1., 'paramB”、“paramb_instname1.');set_param(pathtoblockinstanceName2., 'paramA”、“paramA_instName2');set_param(pathtoblockinstanceName2., 'paramB”、“paramb_instname2.');
要为集成模型中的块实例指定唯一的模型参数值,请将值赋给工作区变量,
那paramA_instName1
那paramb_instname1.
,paramA_instName2
.paramb_instname2.
在前一个版本中,假设您开发了一个模型组件,为组件生成的代码,并测试和部署生成的代码。现在,在当前版本中,您希望将功能添加到模型组件,并在系统开发和代码生成中使用模型组件。在继续之前,您可以将模型组件的功能行为和生成的代码从上一个版本进行比较。
要测试模型组件和先前版本生成的代码之间的数值等价性,请使用金宝app仿真软件测试™.与之测试经理(金宝appSimulink测试),您可以执行背靠背的测试和输出比较:
将模型组件作为一个模型块与模拟模式块参数设置为正常的
.
与之模型块,创建指定测试输入数据的顶级模型。
将前一个版本中生成的代码作为SIL块导入当前版本中。
使用SIL块,创建另一个顶部模型,指定相同的测试输入数据。
在测试管理器中,创建运行顶部模型的模拟的等效测试用例并进行比较输出。
运行测试案例并查看结果。
有关更多信息,请参见测试两个等效模拟(金宝appSimulink测试).
笔记
如果您想比较当前版本和以前版本生成的代码的行为,请在步骤1中指定这些代码模型块参数:
放模拟模式来Software-in-the-loop(银)
或Processor-in-the-loop(公益诉讼)
.
放代码界面来顶级模特
.
如果您安装了AUTOSAR标准的嵌入式编码器支持包,您可以导入到当前金宝app版本的AUTOSAR组件代码,您生成的上一个版本。
当您运行crossReleaseImport
(嵌入式编码),该函数导入AUTOSAR代码作为一个交叉发布的模型块,而不是SIL或PIL块。这模拟模式参数的模型块被设置为Software-in-the-loop(银)
或Processor-in-the-loop(公益诉讼)
.合并模型阻塞到当前的发布模型中。
这些限制适用:
跨版本工作流不支持访问NVRAM的每个实例内存。金宝app
可调参数必须映射到AUTOSAR校准参数或AUTOSAR内部校准参数。
如果原始模型使用变体或符号维(维度变体),则导入的模型只能使用与在前一个版本中生成代码时使用的相同的变体和符号维配置。
sharedcodematlabversions.
(嵌入式编码)|sharedCodeUpdate
(嵌入式编码)|crossReleaseImport
(嵌入式编码)