模型接口元素的 C 数据代码接口配置
如果您将 C 代码作为应用程序进行部署,请将模型配置为使用数据代码接口。根据您的模型配置,为应用程序部署生成的代码针对特定调度器(单任务、速率单调或并发)进行优化。
Model Code Interfaces (Embedded Coder)列出了可用于表示与目标环境资源交互的接口的建模元素。要在代码映射编辑器中或通过使用代码映射编程接口 (coder.mapping.api.CodeMapping
) 为代码生成配置建模元素,请将模型接口元素映射到代码定义。
配置数据代码接口时,您可以:
为数据元素类别配置应用于整个模型的默认代码接口设置。例如,输入端口是一个数据元素类别,周期函数是一个函数类别。
配置应用于单个数据元素的代码接口设置。
迁移
当您打开在 R2020b 之前的版本中创建的模型时,Simulink® 会将代码定义(如模型工作区中嵌入的信号和参数对象)迁移到模型代码映射。
对于配置为使用基于 ERT 的系统目标文件进行代码生成的模型,如有必要,在迁移过程中,Simulink 会配置模型使用的 Embedded Coder 字典。保存模型时,代码映射作为模型的一部分保存。
有关详细信息,例如迁移的影响以及迁移前的注意事项,请参阅Migration of Model Data Configurations to Code Mappings。
代码定义
对于数据代码接口配置,代码定义包括存储类。存储类定义代码生成器在为关联的数据生成代码时使用的属性,如形式和位置。
代码生成器为数据元素提供预定义的代码定义。如果您有 Embedded Coder®,您可以使用 Embedded Coder 字典来创建和共享代码定义,例如,用于标准化您从多个模型生成的代码或为不同应用程序运行时环境创建定义。创建自定义定义使您能够实现预定义的定义无法满足的代码生成目标。对于数据元素,您还可以选择使用 Embedded Coder 自定义存储类设计器创建在包中创建的代码定义。
代码定义出现在代码映射编辑器中,可通过使用代码映射编程接口进行访问。
数据接口代码映射选项
通过使用代码映射编辑器或代码映射编程接口,将表示接口的模型元素与代码定义相关联。代码生成器使用映射的代码定义来确定生成的接口代码应该是什么样子,以及应该如何打包代码。
通过为代码生成器指定默认配置,简化代码接口的配置工作。对于数据接口配置,您可以在代码映射编辑器的数据默认值和函数默认值选项卡上指定默认配置,或通过调用 setDataDefault
和 setFunctionDefault
函数来指定。您可以通过将存储类或函数自定义模板设置为默认值来让代码生成器建立默认配置,也可以指定命名的存储类或函数自定义模板。当您指定默认值时,代码生成器将确定数据元素和函数原型在生成的代码中的显示方式。当您指定命名存储类或函数自定义模板时,代码生成器会应用为该代码定义指定的设置。
对于单个模型元素,可以覆盖默认类别代码配置设置。选择与元素类别对应的选项卡,或调用对应的元素类别 set
函数(例如,ElementCategory
setInport
或 setState
)。对于单个元素,有三种配置选项:
让代码生成器处理配置。
对于数据元素,选择或指定自动。对于自动,数据元素要经过代码生成优化,该过程可以从代码中删除该元素或更改该元素的表示形式。如果优化没有消除数据元素,该元素将获得对应数据类别的默认配置。如果没有为类别配置默认值(在数据默认值选项卡上,类别设置为默认),则该元素在生成的代码中显示为标准数据结构体的一个字段。
对于函数,选择或指定默认。
将数据或函数元素映射到代码定义,该代码定义配置为此模型的相关数据或函数元素类别的默认值。指定模型默认:
storage class
或模型默认:function-template
。将数据或函数元素映射到未标注为模型默认值的命名存储类或函数自定义模板。
下图总结了默认设置和单个配置设置与可用选项之间的关系。
数据默认配置
通过为整个模型中的数据元素的类别指定默认配置(例如,输入端口或模型工作区参数),减少为 C 代码生成准备模型的工作量。应用默认配置可以节省时间并降低在代码中引入错误的风险,尤其是对于大型模型和要从中生成多实例代码的模型更是如此。
默认配置应用于整个模型,但不包括引用模型。Simulink 将一组单独的代码映射保存为模型引用层次结构中每个模型的一部分。
如果一个模型包含某给定类别的大量元素(例如,超过 10 个),则更高效的方式是使用默认设置配置类别,然后在特殊情况下覆盖该设置。
默认设置可以帮助您减少手动数据输入。
向模型中添加模块时,新数据元素会继承默认设置。
要一次性更改许多数据元素的代码生成设置,请在一个位置进行更改,即在默认设置中。
为了提高效率,在模型的其他位置进行更改时,请使用命名规则。
您可以使用代码映射编辑器 - C 的数据默认值选项卡或 setDataDefault
函数来配置数据默认值。
模型数据类别
您可以使用代码映射编辑器 - C 的数据默认值选项卡或 setDataDefault
函数来配置数据默认值。在数据默认值选项卡或函数调用中,您可以选择或指定这些数据元素类别。
模型元素类别 | 描述 |
---|---|
输入端口 | 模型的根级输入端口,如 Inport 和 In Bus Element 模块。 |
输出端口 | 模型的根级输出端口,如 Outport 和 Out Bus Element 模块。 |
信号、状态和内部数据 | 模型内部的数据元素,如模块输出信号、离散模块状态、数据存储和过零信号。 |
共享局部数据存储 | 设置了跨模型实例共享模块参数的 Data Store Memory 模块。这些数据存储只在定义它们的模型中可访问。数据存储值在模型的实例之间共享。 |
全局数据存储 | 由基础工作区或数据字典中的信号对象定义的数据存储。一个应用程序中的多个模型可以使用这些数据存储。要在代码映射编辑器中查看和配置这些数据存储,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。 |
模型参数 | 在模型中定义的参数,例如模型工作区中的参数。不包括模型参量。 |
外部参数 | 在基础工作区或数据字典中定义为对象的参数。一个应用程序中的多个模型可以使用这些参数。要在代码映射编辑器中查看和配置这些参数,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。 |
为数据配置默认代码生成设置的注意事项
在为数据元素配置默认代码生成设置之前,请考虑下表中列出的注意事项。
注意事项 | 更多信息 |
---|---|
哪些类别与您的模型相关? | 上表中的数据元素类别 |
该模型是否使用一个类别中的多个数据实例?如果答案是肯定的,则应用默认映射是有好处的。否则,请考虑为每个数据元素单独配置代码生成。 | |
哪个存储类符合您对每个类别的代码生成要求? | Choose Storage Class for Controlling Data Representation in Generated Code |
是否阻止优化从代码中消除特定数据? | 通过优化消除某些类别的数据 |
在配置一个或多个模型元素类别后,设置内存段和共享实用工具标识符格式模型配置参数对模型配置不起作用。在打开代码生成器工具时,Simulink 会将模型配置参数设置迁移到代码映射编辑器。在迁移过程中,Simulink 会配置模型使用的 Embedded Coder 字典,如Migration of Memory Section and Shared Utility Settings from Configuration Parameters to Code Mappings (Embedded Coder)中所述。
通过优化消除某些类别的数据
代码生成优化可以从代码中消除数据,这意味着您的应用程序代码无法与数据交互。有关通过优化消除数据的一般信息,请参阅生成的代码如何存储内部信号、状态和参数数据 (Embedded Coder)。
优化只能消除下列类别的数据:
模型参数
模型参数参量
外部参数
内部数据
在通过优化消除数据后,代码生成器会将代码映射中的默认代码生成设置应用于其余数据。对于参数和信号线,优化可以消除整个类别的数据。如果发生此类消除,则您为该类别指定的默认设置将不应用于数据。
为了防止优化消除单个数据元素,请将存储类显式应用于单个元素。存储类控制生成代码中数据的外观。要强制数据元素使用您指定的默认存储类,请显式应用存储类模型默认值。请参阅Choose Storage Class for Controlling Data Representation in Generated Code。
共享字典数据默认值
如果您将模型链接到 Simulink 数据字典,其中包括为数据类别配置默认代码定义的代码生成器字典,则可以使用代码映射编辑器应用字典默认值。在代码映射编辑器的数据默认值选项卡上,选择一个类别,并将存储类设置为字典默认值。如果有人更改共享代码生成器字典中的默认设置,代码生成器会在为您的模型生成代码时应用更新后的默认设置。请参阅Configure Default Code Mapping in a Shared Dictionary (Embedded Coder)。
单个数据元素的配置
在配置模型范围的默认设置后,您可以覆盖单个数据元素的默认值。单个数据元素配置应用于模型中的一个特定数据元素。在下列情况下可以单独配置数据元素:
模型包括给定类别的一些元素,这些元素具有不同源、命名或位置要求。
您配置了默认设置,并希望覆盖单个元素的默认设置。
对于单个数据元素,最初存储类设置为自动,这意味着代码生成器可能出于优化目的而消除或更改相关代码的表示。如果无法进行优化,代码生成器将应用模型默认配置。
要避免优化并强制代码生成器使用默认配置,请将存储类设置为模型默认值。
要覆盖默认配置,请指定满足该数据元素的代码生成要求的存储类。
配置数据
打开 Simulink Coder™。
为数据元素的类别配置默认映射。选择代码接口 > 默认代码映射。在代码映射编辑器的数据默认值选项卡上,选择一个模型元素类别并设置存储类。在属性检查器中,设置存储类属性以符合模型要求。
决定是否覆盖单个数据元素的默认配置设置。如果您选择不覆盖设置,请转至步骤 8。
确定要单独配置的 MATLAB 变量,并将配置存储在模型文件中。在模型资源管理器中,将变量转换为
Simulink.Parameter
对象。生成的数据对象作为模型参数出现在代码映射编辑器中。标识那些表示在生成代码执行时要监控的算法数据的信号,并单独配置那些信号。对于您标识的每个信号,请执行以下操作之一:
对于特定于某模型(非共享)的信号数据,将信号添加到代码映射编辑器中。
对于共享信号数据,创建和配置
Simulink.Signal
对象。
配置单个数据元素。在代码映射编辑器中,点击一个类别选项卡,选择数据元素,然后设置存储类。在属性检查器中,设置存储类属性值。要更改模型配置参数默认参数行为的设置,请点击指示存储类设置为自动时的行为的链接。在“模型配置参数”对话框中,将参数设置更改为可调或内联。
要查看和配置存储在基础工作区或数据字典中的外部数据对象,请在代码映射编辑器的数据默认值选项卡上,点击类别名称右侧的
Refresh
链接。生成和查看代码。
有关详细信息和示例,请参阅:
另请参阅
代码映射编辑器 - C | coder.mapping.api.CodeMapping
主题
- Configure Root-Level Inport Blocks for C Code Generation
- Configure Root-Level Outport Blocks for C Code Generation
- Configure Signal Data for C Code Generation
- 为 C 代码生成配置参数
- Configure Block States for C Code Generation
- Configure Data Stores for C Code Generation
- Choose Storage Class for Controlling Data Representation in Generated Code