文档

交叉发布代码集成

如果你有嵌入式编码器®如果源模型是单速率的,并且生成的C代码来自:

  • 使用不可重用函数代码接口的顶级模型或子系统构建过程。

  • 抑制错误状态监视的单个或多个实例模型引用构建流程(SuppressErrorStatus).

如果可以在不修改的情况下重用现有代码,就可以减少重新验证的成本。

工作流

考虑这个控制系统模型。

控制器模型Block引用了一个由三个组件组成的模型:

  • P1是一个模型块,它引用了用以前的版本开发的模型,例如R2015b。生成的带有独立代码接口的模型代码位于文件夹中P1_ert_rtw

  • C1是一个模型块,它引用您在当前版本中正在开发的模型。

  • P2是用以前的版本开发的子系统块,例如R2016a。生成的子系统代码在文件夹中P2_ert_rtw

  • P3是一个模型块,它引用了用以前的版本开发的模型,例如R2016b。生成的模型代码和模型引用代码接口都在文件夹中slprj / ert / P3

要将以前版本的代码与当前版本生成的代码集成,请使用以下工作流:

  1. 注册以前的版本sharedCodeMATLABVersions

  2. 从以前的版本中导出组件

  3. 指定一个现有的共享代码文件夹

  4. 将组件导入到当前版本中

  5. 将组件合并到当前版本模型中

限制

交叉发布代码集成工作流不支持:金宝app

  • 导出功能模型。

  • AUTOSAR代码生成。

  • 金宝app仿真软件的功能而且函数调用者跨越不同版本生成的代码边界的块。

  • 集成R2010a之前版本生成的代码。

  • 将生成的代码从当前版本导入到前一个版本(向前兼容)。

  • 导出的文件位于MATLAB中®以前版本的根文件夹,例如块集库文件。

  • 使用非内联s函数从模型导出和导入生成的代码。

  • c api

在模型构建过程的最后,代码生成报告显示集成模型直接使用的共享文件,例如,控制器.该报告不显示模型组件使用的共享文件,例如,P1而且P2

如果您的模型有:

  • 交叉释放SIL或PIL阻塞,无法运行快速加速器模式模拟。

  • 引用包含交叉释放SIL或PIL块的模型的模型块,不能运行加速模式或快速加速模式模拟。

你可以运行:

  • 包含交叉释放SIL或PIL块的模型的顶层SIL模拟。

  • 包含交叉释放SIL或PIL块的引用模型的模型块SIL模拟。

金宝app仿真软件。公共汽车金宝app

要在交叉发布代码集成中使用总线对象作为数据类型,请使用以下方法之一。

方法 代码出口 代码导入
自动

在上一个版本中,在生成代码之前,设置DataScope的属性金宝app仿真软件。公共汽车对象汽车.不为?分配值HeaderFile财产。

代码生成器创建金宝app仿真软件。公共汽车默认中的数据类型定义头文件,它位于模型的代码生成文件夹中。

在当前版本中,在运行之前crossReleaseImport,设置DataScope的属性金宝app仿真软件。公共汽车对象汽车

在构建集成模型时,构建过程将使用金宝app仿真软件。公共汽车导入代码中头文件的数据类型。

出口汽车

在以前的版本中,在生成代码之前,指定这些属性金宝app仿真软件。公共汽车对象:

  • DataScope—设置为出口

  • HeaderFile—指定文件名,例如:prevRelBusType

代码生成器创建prevRelBusType.h在共享实用程序代码文件夹中。的定义金宝app仿真软件。公共汽车数据类型。使用sharedCodeUpdate添加prevRelBusType.h到共享代码文件夹ExistingSharedCode指定。

对于R2010a和R2010b,DataScope属性不可用。不为?分配值HeaderFile财产。代码生成器创建金宝app仿真软件。公共汽车中的数据类型定义modelName_types.h,它位于模型的代码生成文件夹中。

在当前版本中,在运行之前crossReleaseImport,设置DataScope的属性金宝app仿真软件。公共汽车对象进口

构建集成模型时,集成模型集成了导入的SIL或PIL块,构建过程使用金宝app仿真软件。公共汽车中的数据类型定义prevRelBusType.h

如果导入的代码来自R2010a或R2010b,则指定这些属性金宝app仿真软件。公共汽车对象:

  • DataScope—设置为进口

  • HeaderFile—设置为文件路径modelName_types.h,该文件在导入的代码文件夹中。

在构建集成模型时,构建过程将使用金宝app仿真软件。公共汽车中的数据类型定义modelName_types.h

进口汽车

在以前的版本中,在生成代码之前,指定这些属性金宝app仿真软件。公共汽车对象:

  • DataScope—设置为进口

  • HeaderFile—指定文件的路径金宝app仿真软件。公共汽车数据类型定义,例如,aBusType.h

对于R2010a和R2010b,DataScope属性不可用。为HeaderFile属性时,指定文件的路径金宝app仿真软件。公共汽车数据类型定义,例如,aBusType.h

在当前版本中,导入生成的代码后,您不必更改金宝app仿真软件。公共汽车

构建集成模型时,集成模型集成了导入的SIL或PIL块,构建过程使用金宝app仿真软件。公共汽车的数据类型定义aBusType.h

如果导入的代码来自R2010a或R2010b,则指定这些属性金宝app仿真软件。公共汽车对象:

  • DataScope—设置为进口

  • HeaderFile—设置为aBusType.h

在构建集成模型时,构建过程将使用金宝app仿真软件。公共汽车中的数据类型定义aBusType.h

通过生成代码中的全局变量实现根级I/O

当从以前版本导入的代码通过全局变量实现输入或输出端口时,从集成模型生成的代码依赖于连接到集成模型中端口的信号的属性。

如果集成模型信号没有映射到与导入代码中的信号同名的生成代码变量,则生成的代码:

  • 如果变量在导入的代码中声明但未定义,则定义该变量。

  • 创建附加代码,以在从集成模型生成的变量和导入代码中的变量之间复制数据。

如果集成模型信号映射到与导入代码中的信号同名的变量,则从集成模型生成的代码也将使用导入代码使用的变量。必须为信号使用兼容的存储类。

存储类属性 物业价值支持金宝app
类型 非结构化只有
数据访问

不能连接实现为的端口指针变量导入到通过类实现的同名信号直接集成模型中的存储类

不能连接实现为的端口直接变量导入到作为对象实现的同名信号指针在集成模型中

数据范围

如果导入的代码声明但没有定义该变量(即代码是由使用进口值),则需要以下其中之一:

  • 集成模型使用出口价值。

  • 外部代码定义变量。

如果导入的代码定义了变量(即代码是由使用出口值):

  • 对于集成模型中连接到根级I/O端口的信号:

    • 设置EnableDataOwnership配置参数为

    • 使用具有以下属性的自定义存储类:

      • 类型- - - - - -非结构化

      • 数据访问- - - - - -直接

      • 数据范围- - - - - -出口

      • 老板—非空值,不是集成模型的名称。例如,该值可以是导入组件的名称。

  • 对于集成模型中没有连接到根级I/O端口的信号,使用具有以下属性值的自定义存储类:

    • 数据范围-进口

    • 数据访问-直接

通过全局数据存储在当前版本组件和以前版本组件之间通信

当前和以前的版本组件可以通过关联的全局数据存储进行通信金宝app仿真软件。信号对象在MATLAB基础工作区或Simulink数据字典。金宝app

出口配置

在旧版本中生成代码之前,对于您想要导出的模型组件,配置数据存储内存以使用导入外部代码的存储类。

如果顶级模型或子系统构建过程生成代码,则设置存储类的属性金宝app仿真软件。信号对象指向以下类之一:

  • ImportedExtern

  • ImportedExternPointer

  • ImportFromFile自定义存储类

如果模型引用构建过程生成了代码,你也可以使用这些类:

  • ExportedGlobal

  • ExportToFile自定义存储类

当你奔跑的时候crossReleaseExport的数据存储内存codeInfo.mat将所需的信息归档并放入crossReleaseInfo.m工件。

导入配置

在当前版本中,在运行之前crossReleaseImport,定义金宝app仿真软件。信号对象或Simulink数据字典,用于您想要导入的组件的每个全局数据存储:金宝app

  1. 对象名和数据类型复杂性,对象属性,指定与要导入的组件中相应对象的值相匹配的值。

  2. 存储类属性时,指定一个兼容的值。如果之前的发布值为ImportedExtern,为当前版本指定以下值之一:

    • ImportedExtern

    • ExportedGlobal

    • ImportFromFileExportToFile自定义存储类。

    如果之前的发布值为ImportedExternPointer,然后指定ImportedExternPointer对于当前版本。

  3. 别名属性,只有在为要导入的组件中的对象指定了属性时,才指定匹配的值。

  4. 保存金宝app仿真软件。信号对象。每次模拟或构建导入的SIL或PIL块时都需要这些对象。

有关更多信息,请参见生成代码中的数据存储(金宝app仿真软件编码器)。

参数调优

跨版本集成工作流支持集成模型中的参数调优,该模型包含来自以前版本的可调参数的组金宝app件代码。

在当前版本中,在运行之前crossReleaseImport,对于您想导入的组件的每个可调参数:

  1. 定义一个金宝app仿真软件。参数对象在MATLAB基础工作区或Simulink数据字典。金宝app

  2. 对象名和数据类型复杂性,对象属性,指定与导出对象值匹配的值。如果导入源代码中的变量与对象的名称不相同,则对于别名属性时,指定与变量名匹配的值。

  3. 如果导出的对象使用GetSet自定义存储类,指定:

    金宝app支持GetSet以前版本中的自定义存储类只适用于R2011a和以后的版本。

对于前一个版本中由顶级模型或子系统构建过程生成的代码,适用以下限制:

  • 对象指定的可调参数金宝app仿真软件。参数对象从上一个版本导出,存储类设置为ExportedGlobal的存储类金宝app仿真软件。参数对象在当前版本中的也是ExportedGlobal,在构建集成模型时出现错误。

  • 在Mac操作系统上,如果一个可调参数由金宝app仿真软件。参数对象从以前的版本导出,存储类设置为ExportedGlobal的存储类,则无法构建集成模型金宝app仿真软件。参数对象在当前版本中(具有相同的名称或别名)为ImportedExtern.要解决这个限制,修改默认设置:

    1. 从默认工具链中获取构建工具。

      tc = code .make. getdefaulttoolchain;cComp = tc.getBuildTool(C编译器的);

    2. 提取C编译器标准选项。

      stdMaps = cComp.金宝appSupportedStandard.getLangStandardMaps;optionValues = stdMaps.getCompilerOptions(‘*’);

    3. 删除-fno-common从C和c++编译器的标准选项。

      optionToRemove =“-fno-common”;optionsToKeep = strrep(optionValues, optionToRemove,);c_standard_opts_id =“(C_STANDARD_OPTS)美元”;= get_param(model,“CustomToolchainOptions”);custToolChainOpts {2} =...strrep(custToolChainOpts{2}, c_standard_opts_id, optionsToKeep);set_param(模型,“CustomToolchainOptions”, custToolChainOpts);

比较当前版本中模型组件的仿真行为和以前版本生成的代码

在以前的版本中,假设您开发了一个模型组件,为该组件生成代码,并测试和部署生成的代码。现在,在当前版本中,您希望向模型组件添加特性,并在系统开发和代码生成中使用模型组件。在继续之前,您可以比较模型组件的功能行为和从上一个版本生成的代码。

要测试模型组件和从上一个版本生成的代码之间的数值等价性,请使用金宝app仿真软件测试™.与测试经理(金宝appSimulink Test),您可以执行背靠背测试和输出比较:

  1. 将模型组件作为模型模拟模式块参数设置为正常的

  2. 模型块,创建一个指定测试输入数据的顶级模型。

  3. 将前一个版本中生成的代码作为SIL块导入到当前版本中。

  4. 使用SIL块,创建另一个指定相同测试输入数据的顶级模型。

  5. 在测试管理器中,创建一个运行顶级模型模拟并比较输出的等价测试用例。

  6. 运行测试用例并检查结果。

有关更多信息,请参见中的测试管理器示例金宝appSimulink测试示例(金宝app仿真软件测试)。

请注意

如果您想比较当前版本和以前版本生成的代码的行为,请在步骤1中指定这些模型块参数:

  • 模拟模式Software-in-the-loop(银)Processor-in-the-loop(公益诉讼)

  • 代码接口顶级模特

另请参阅

|||

相关的话题

这个话题有帮助吗?