Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

模型接口元素的 C 代码生成配置

代码生成器为您提供工具来控制在生成代码中数据的表示,以及入口函数的表示(如果您有 Embedded Coder®)。例如,您可以针对代码生成配置数据和函数以符合代码标准和规范,将生成的代码与外部代码集成,或满足内存要求。

代码生成器为模型数据元素和函数生成代码:

  • 应用程序代码可以读写的数据,如输入端口、信号、状态和参数。

  • 入口函数,如 model_step,您的应用程序代码调用这些函数来执行模型算法。

您可以使用 Code Mappings 编辑器或代码映射编程接口 (coder.mapping.api.CodeMapping) 为代码生成配置模型数据元素和函数。需要有 Embedded Coder 才可配置函数。对于数据元素,请使用 Code Mappings 编辑器或代码映射 API,而不是创建和配置 Simulink 数据对象;或者将二者相结合。编辑器和 API 使您能够配置:

  • 适用于整个模型中某一类别数据元素的默认代码生成设置

  • 适用于单个数据元素的配置设置

下图显示整个工作流:

Iterative flow diagram that shows steps of configuring default mappings, overriding default mappings for individual model elements, and creating code definitions for model elements.

迁移

当您打开在 R2020b 之前的版本中创建的模型时,Simulink® 会将在模型中指定的代码定义迁移到模型代码映射。

如果需要,在迁移过程中,Simulink 会配置模型使用的 Embedded Coder 字典。保存模型时,代码映射作为模型的一部分保存。

有关详细信息,例如迁移的影响以及迁移前的注意事项,请参阅Migration of Model Data Configurations to Code Mappings

代码定义

代码定义包括存储类。存储类定义代码生成器在为关联的数据生成代码时使用的属性,如形式和位置。

内存段控制数据和函数定义在内存中的位置。在某些情况下,您可以在配置数据元素和函数时选择所需的特定内存段。

代码生成器为数据元素提供预定义的代码定义。如果您有 Embedded Coder,您可以使用 Embedded Coder 字典来创建和共享代码定义,例如,用于标准化您从多个模型生成的代码或为不同应用程序运行时环境创建定义。创建自定义定义使您能够实现预定义的定义无法满足的代码生成目标。对于数据元素,您还可以选择使用 Embedded Coder Custom Storage Class Designer 创建在包中创建的代码定义。

您使用 Embedded Coder 字典创建的代码定义会出现在 Code Mappings 编辑器中,并且可以使用代码映射 API 进行访问。对于使用 Custom Storage Class Designer 创建的一些定义,您可以通过配置 Embedded Coder 字典来引用它们,以使这些定义出现在 Code Mappings 编辑器中。

默认情况下,使用 Embedded Coder 字典为模型创建的代码定义存储在模型文件中。通过将代码定义存储在 Simulink® 数据字典中,可以在模型和工程之间共享代码定义。使用数据字典时,要修改共享定义,只需在一个位置更改定义 - 即在 Embedded Coder 字典中。

有关详细信息,请参阅Define Storage Classes, Memory Sections, and Function Templates for Software Architecture (Embedded Coder)Create Storage Classes by Using the Custom Storage Class Designer (Embedded Coder)

数据默认配置

通过为整个模型中的数据元素的类别指定默认配置(例如,输入端口或模型工作区参数),减少为 C 代码生成准备模型的工作量。应用默认配置可以节省时间并降低在代码中引入错误的风险,尤其是对于大型模型和要从中生成多实例代码的模型更是如此。

默认配置应用于整个模型,但不包括引用模型。Simulink 将一组单独的代码映射保存为模型引用层次结构中每个模型的一部分。

如果一个模型包含某给定类别的大量元素(例如,超过 10 个),则更高效的方式是使用默认设置配置类别,然后在特殊情况下覆盖该设置。

默认设置可以帮助您减少手动数据输入。

  • 向模型中添加模块和信号时,新数据元素会继承默认设置。

  • 要一次性更改许多数据元素的代码生成设置,请在一个位置进行更改,即在默认设置中。

  • 为了提高效率,在模型的其他位置进行更改时,请使用命名规则。

您可以使用 Code Mappings 编辑器Data Defaults 选项卡或 setDataDefault 函数来配置数据默认值。

模型数据类别

您可以使用 Code Mappings 编辑器Data Defaults 选项卡或 setDataDefault 函数来配置数据默认值。在 Data Defaults 选项卡或函数调用中,您可以选择或指定这些数据元素类别。

模型元素类别说明
输入端口模型的根级输入端口,如 InportIn Bus Element 模块。
输出端口模型的根级输出端口,如 OutportOut Bus Element 模块。
信号、状态和内部数据模型内部的数据元素,如模块输出信号、离散模块状态、数据存储和过零信号。
共享局部数据存储设置了 Share across model instances 模块参数的 Data Store Memory 模块。这些数据存储只在定义它们的模型中可访问。数据存储值在模型的实例之间共享。
全局数据存储由基础工作区或数据字典中的信号对象定义的数据存储。一个应用程序中的多个模型可以使用这些数据存储。要在 Code Mappings 编辑器中查看和配置这些数据存储,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。
模型参数在模型中定义的参数,例如模型工作区中的参数。不包括模型实参。
外部参数在基础工作区或数据字典中定义为对象的参数。一个应用程序中的多个模型可以使用这些参数。要在 Code Mappings 编辑器中查看和配置这些参数,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。

为数据配置默认代码生成设置的注意事项

在为数据元素配置默认代码生成设置之前,请考虑下表中列出的注意事项。

注意事项更多信息
哪些类别与您的模型相关?上表中的数据元素类别
该模型是否使用一个类别中的多个数据实例?如果答案是肯定的,则应用默认映射是有好处的。否则,请考虑为每个数据元素单独配置代码生成。
哪个存储类符合您对每个类别的代码生成要求? Choose Storage Class for Controlling Data Representation in Generated Code
是否阻止优化从代码中消除特定数据? 通过优化消除某些类别的数据

在配置一个或多个模型元素类别后,设置内存段和 Shared utilities identifier format 模型配置参数对模型配置不起作用。在打开一个编码器时,Simulink 会将模型配置参数设置迁移到 Code Mappings 编辑器。在迁移过程中,Simulink 会配置模型使用的 Embedded Coder 字典,如Migration of Memory Section and Shared Utility Settings from Configuration Parameters to Code Mappings (Embedded Coder)中所述。

通过优化消除某些类别的数据

代码生成优化可以从代码中消除数据,这意味着您的应用程序代码无法与数据交互。有关通过优化消除数据的一般信息,请参阅生成的代码如何存储内部信号、状态和参数数据 (Embedded Coder)

优化只能消除下列类别的数据:

  • Model parameters

  • Model parameter arguments

  • External parameters

  • Internal data

在通过优化消除数据后,代码生成器会将代码映射中的默认代码生成设置应用于其余数据。对于参数和信号线,优化可以消除整个类别的数据。如果发生此类消除,则您为该类别指定的默认设置将不应用于数据。

为了防止优化消除单个数据元素,请将存储类显式应用于单个元素。存储类控制生成代码中数据的外观。要强制数据元素使用您指定的默认存储类,请显式应用存储类 “Model default”。请参阅Choose Storage Class for Controlling Data Representation in Generated Code

共享字典数据默认值

如果您将模型链接到 Simulink 数据字典,其中包括为数据类别配置默认代码定义的编码器字典,则可以使用 Code Mappings 编辑器应用字典默认值。在 Code Mappings 编辑器的 Data Defaults 选项卡上,选择一个类别,并将存储类设置为 “Dictionary Default”。如果有人更改共享编码器字典中的默认设置,代码生成器会在为您的模型生成代码时应用更新后的默认设置。请参阅Configure Default Code Mapping in a Shared Dictionary (Embedded Coder)

单个数据元素的配置

在配置模型范围的默认设置后,您可以覆盖单个数据元素的默认值。单个数据元素配置应用于模型中的一个特定数据元素。在下列情况下可以单独配置数据元素:

  • 模型包括给定类别的一些元素,这些元素具有不同源、命名或位置要求。

  • 您配置了默认设置,并希望覆盖单个元素的默认设置。

对于单个数据元素,最初存储类设置为 “Auto”,这意味着代码生成器可能出于优化目的而消除或更改相关代码的表示。如果无法进行优化,代码生成器将应用模型默认配置。

  • 要避免优化并强制代码生成器使用默认配置,请将存储类设置为 “Model default”。

  • 要覆盖默认配置,请指定满足该数据元素的代码生成要求的存储类。

如果模型中的一个数据元素未命名(例如,信号没有标签或状态没有名称),则在为 C 代码生成配置该数据元素时,必须为其指定代码标识符。通过为存储类属性 Identifier 指定值来设置代码标识符。

配置数据

  1. 打开 Simulink Coder™

  2. 为数据元素的类别配置默认映射。选择 Code Interface > Default Code Mappings。在 Code Mappings 编辑器的 Data Defaults 选项卡上,选择一个模型元素类别并设置存储类。在属性检查器中,设置存储类属性以符合模型要求。

  3. 决定是否覆盖单个数据元素的默认配置设置。如果您选择不覆盖设置,请转至步骤 8。

  4. 确定要单独配置的 MATLAB 变量,并将配置存储在模型文件中。在模型资源管理器中,将变量转换为 Simulink.Parameter 对象。生成的数据对象作为模型参数出现在 Code Mappings 编辑器中。

  5. 标识那些表示在生成代码执行时要监控的算法数据的信号,并单独配置那些信号。对于您标识的每个信号,请执行以下操作之一:

    • 对于特定于某模型(非共享)的信号数据,将信号添加到 Code Mappings 编辑器中。

    • 对于共享信号数据,创建和配置 Simulink.Signal 对象。

  6. 配置单个数据元素。在 Code Mappings 编辑器中,点击一个类别选项卡,选择数据元素,然后设置存储类。在属性检查器中,设置存储类属性值。要更改模型配置参数 Default parameter behavior 的设置,请点击指示存储类设置为 “Auto” 时的行为的链接。在 Model Configuration Parameters 对话框中,将参数设置更改为 “Tunable” 或 “Inline”。

    有关配置数据元素的特定类型的信息,请参阅:

  7. 要查看和配置存储在基础工作区或数据字典中的外部数据对象,请在 Code Mappings 编辑器的 Data Defaults 选项卡上,点击类别名称右侧的 Refresh 链接。

  8. 生成和查看代码。

有关详细信息和示例,请参阅:

另请参阅

|

相关主题