Main Content

Simulink.importExternalCTypes

生成由 C 或 C++ 代码定义的自定义数据类型的 Simulink 表示

说明

示例

importInfo = Simulink.importExternalCTypes(headerFiles) 解析由 typedefstructenum 类型定义的 headerFiles 标识的 C 或 C++ 头文件(.h.hpp),并生成类型的 Simulink® 表示。输出 importInfo 标识已成功和未成功导入的类型。

您可以使用 Simulink 表示实现以下目的:

默认情况下,该函数:

  • 通过生成从 Simulink.IntEnumType 派生枚举类的脚本文件来导入枚举类型,如定义 Simulink 枚举中所述。然后,如有必要,可以编辑类定义进行自定义(例如,通过实现 addClassNameToEnumNames 方法)。

  • 通过在基础工作区中生成 Simulink.Bus 对象来导入结构体类型。

  • 通过在基础工作区中生成 Simulink.AliasType 对象来导入原始 typedef 语句。

  • 根据主机的字长解释泛型 C 数据类型,如 intshort。例如,对于大多数现代计算机,int 具有 32 位字长,因此函数将 int 结构体字段表示为使用 Simulink 数据类型 int32 的总线元素。

    要覆盖此默认行为,请使用 HardwareImplementation 对组参量标识目标硬件板。

有关默认行为的详细信息,请参阅提示

示例

importInfo = Simulink.importExternalCTypes(modelName) 通过分析您用 modelName 标识的模型,生成自定义 C 数据类型的 Simulink 表示。当您在模型中使用仿真目标配置参数来标识要包含在仿真中的头文件时,请使用此语法导入类型,以便在主机上对模型进行仿真。函数根据主机的字长解释泛型 C 数据类型。

使用此语法时,请勿使用可能与目标模型的配置参数冲突的对组参量,如 HardwareImplementation。当您将此类对组参量与此语法结合使用时,函数会生成警告。

示例

importInfo = Simulink.importExternalCTypes(___,Name,Value) 使用一个或多个名称-值对组参量指定其他选项。您可以使用此语法实现以下目的:

  • 使用 Names 对组参量指定要导入的类型的名称。

  • 控制 Simulink 存储导入的类型的方式,例如,通过在 Simulink 数据字典中生成类型。使用 MATFileDataDictionary 对组参量。

  • 控制函数解释泛型 C 数据类型的方式。使用 HardwareImplementation 对组参量。

  • 通过尝试再次导入更新后的 C 代码定义,保持 C 代码定义与 Simulink 表示之间的同步。您可以选择是否覆盖现有 Simulink 表示。使用 OverwriteVerbose 对组参量。

示例

全部折叠

此示例说明如何从头文件生成 C 结构体类型 (struct) 和枚举 (enum) 数据类型的 Simulink 表示。

在当前文件夹中,创建文件 ex_cc_simpleTypes.h

typedef enum {
  PWR_LOSS = 0,                 /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    double coeff;
    double init;
} params_T;

通过调用 Simulink.importExternalCTypes 生成类型的 Simulink 表示。

Simulink.importExternalCTypes('ex_cc_simpleTypes.h');

函数在基础工作区中创建 Simulink.Bus 对象 params_T

要检查该对象的属性,请打开类型编辑器。

typeeditor

每个总线元素使用与 ex_cc_simpleTypes.h 中的对应结构体字段匹配的名称和数据类型 (double)。

在当前文件夹中,检查生成的文件 fault_T.m,它将枚举类型 fault_T 定义为枚举类。

您可以使用总线对象和枚举类在 Simulink 模型中设置信号和参数数据类型。

此示例说明如何生成对字段使用自定义数据类型 (typedef) 的结构体类型的 Simulink 表示。

在当前文件夹中创建文件 ex_integer_aliases.h

typedef int sint_32;

typedef unsigned short uint_16;

在当前文件夹中创建文件 ex_cc_struct_alias.h

#include "ex_integer_aliases.h"

typedef struct {
    sint_32 accum;
    uint_16 index;
} my_ints_T;

将结构体类型作为基础工作区中的 Simulink.Bus 对象导入 Simulink 中。将 typedef 语句作为 Simulink.AliasType 对象导入。

Simulink.importExternalCTypes('ex_cc_struct_alias.h');

检查总线对象中总线元素的数据类型。例如,检查第一个总线元素的 DataType 属性,该属性对应于结构体字段 accum

my_ints_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'accum'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'sint_32'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
        SampleTime: -1
              Unit: ''
       Description: ''

Simulink.importExternalCTypes 函数使用生成的 Simulink.AliasType 对象来设置总线元素的数据类型。

检查基础工作区中的 Simulink.AliasType 对象。例如,名为 sint_32 的对象对应于 ex_integer_aliases.h 中的 typedef 语句之一。

sint_32
sint_32 = 

  AliasType with properties:

    Description: ''
      DataScope: 'Imported'
     HeaderFile: 'ex_integer_aliases.h'
       BaseType: 'int32'

对于大多数主机(默认为函数的目标),int 的字长为 32 位,unsigned short 的字长为 16 位。函数将 intunsigned short 映射到 Simulink 类型 int32uint16

如果您有 Embedded Coder,则您从模型生成的代码可以使用 sint_32uint_16,而不是标准数据类型名称 int32_Tuint16_T

此示例说明如何将导入的数据类型存储在 Simulink 数据字典中。数据字典存储一个或多个 Simulink 模型的数据设定(例如用于信号和模块参数值)、数据类型和其他设计数据。

在当前文件夹中,创建文件 ex_cc_simpleTypes.h

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    double coeff;
    double init;
} params_T;

创建子文件夹 myDictionaries

mkdir('myDictionaries')

通过调用 Simulink.importExternalCTypes 来生成类型的 Simulink 表示。通过在新的子文件夹中创建新数据字典 ex_cc_myTypes.sldd 来永久存储类型定义。

Simulink.importExternalCTypes('ex_cc_simpleTypes.h',...
    'DataDictionary','ex_cc_myTypes.sldd',...
    'OutputDir','myDictionaries');

要检查字典的内容,请将当前文件夹设置为 myDictionaries,然后双击字典文件。

要在字典中使用 Simulink 表示,您必须将一个或多个模型链接到该字典。请参阅迁移模型以使用 Simulink 数据字典

此示例说明如何仅为您按名称标识的枚举和结构体数据类型生成 Simulink 表示。

在当前文件夹中,创建文件 ex_cc_manySimpleTypes.h。该文件定义三种结构体类型:params_Tsignals_Tstates_T

typedef struct {
    double coeff;
    double init;
} params_T;

typedef struct {
    double flow_rate;
    double steam_press;
} signals_T;

typedef struct {
    double accum;
    double error;
} states_T;

仅为 params_Tsignals_T 生成 Simulink 表示。

Simulink.importExternalCTypes('ex_cc_manySimpleTypes.h',...
    'Names',{'params_T','signals_T'});

Simulink.Bus 对象 params_Tsignals_T 出现在基础工作区中。

默认情况下,Simulink.importExternalCTypes 通过创建派生自内置类 Simulink.IntEnumType 的枚举类来表示枚举数据类型。当您从使用生成的类的模型进行仿真或生成代码时,您为模型选择的配置参数(例如,在硬件实现窗格上)将确定 Simulink.IntEnumType 和枚举类使用的具体整数长度。

默认情况下,函数根据主机的字长解释泛型原始 C 数据类型,如 shortint。例如,要表示 int 结构体字段,函数通常将 32 位数据类型 int32 应用于对应的总线元素。如果要针对主机之外的其他硬件进行仿真和生成代码,请使用 HardwareImplementation 对组参量来标识目标硬件并通过扩展名标识硬件的字长。

此示例说明如何从您打算用于 16 位硬件的代码导入数据类型。对于该硬件板,int 具有 16 位长度,并且枚举数据 (enum) 的每个项占用 16 位。

在当前文件夹中,创建文件 ex_cc_intTypes.h

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    int coeff;
    int init;
} params_T;

该代码定义了枚举数据类型和结构体类型,其字段使用泛型 C 数据类型 int

要生成结构体类型的精确 Simulink 表示,请首先打开一个现有模型或新建一个模型。对于此示例,创建名为 ex_hdwImpl_16bit 的新模型。

在新模型中,将配置参数 > 硬件实现 > 设备供应商设置为 Atmel。将设备类型设置为 AVR

或者,在命令提示符下,使用以下命令创建和配置模型:

new_system('ex_hdwImpl_16bit','Model');
set_param('ex_hdwImpl_16bit','ProdHWDeviceType','Atmel->AVR')

生成类型的 Simulink 表示。要指定 16 位目标硬件的字长,请将模型配置参数(包括硬件实现设置)提取为 Simulink.ConfigSet 对象。

configSet = getActiveConfigSet('ex_hdwImpl_16bit');
Simulink.importExternalCTypes('ex_cc_intTypes.h','HardwareImplementation',configSet);

Simulink.Bus 对象 params_T 出现在基础工作区中。总线元素(如 coeff)使用 Simulink 数据类型 int16

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
              Unit: ''
       Description: ''

在当前文件夹中,文件 fault_T.m 定义枚举类 fault_T。该类派生自 Simulink.IntEnumType,因此您必须使用模型配置参数来标识目标硬件,并使用扩展名来标识正确的本机整数长度。

在当前文件夹中创建文件 ex_cc_fixpt_struct.h

typedef struct {
    
    int coeff;   /* Word length 16, 
       binary fraction length 7 */
    
    int init;   /* Word length 16, 
       binary fraction length 3 */
    
} params_T;

该文件定义了一个对字段使用定点数据类型的结构体类型。例如,结构体将字段 coeff 存储为有符号 16 位整数数据类型。二进制小数长度 7 将存储的整数值与真实世界值相关联。

假设以下代码在 16 位硬件上运行(这样,泛型 C 数据类型 int 的字长为 16 位)。要生成类型的 Simulink 表示,请首先创建用于标识硬件的 coder.HardwareImplementation 对象。

hdw = coder.HardwareImplementation;
hdw.ProdHWDeviceType = 'Atmel->AVR';

生成结构体类型的 Simulink 表示。

Simulink.importExternalCTypes('ex_cc_fixpt_struct.h',...
    'HardwareImplementation',hdw);

Simulink.Bus 对象 params_T 出现在基础工作区中。每个总线元素(如 coeff)使用数据类型 int16

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
              Unit: ''
       Description: ''

Simulink.importExternalCTypes 不能从 C 代码推断定点定标(二进制小数长度)。您必须手动指定总线元素的数据类型。要在命令提示符下指定数据类型,请使用 fixdt 函数。

params_T.Elements(1).DataType = 'fixdt(1,16,7)';
params_T.Elements(2).DataType = 'fixdt(1,16,3)';

要以交互方式指定数据类型(通过使用数据类型助手),请使用类型编辑器。

typeeditor

此示例说明对于您在建模工程的生命周期中修改其定义的 C 数据类型,如何维护其 Simulink 表示。

导入自定义 C 类型

在当前文件夹中创建文件 ex_cc_myTypes_rec.h。该文件定义了一个自定义结构体类型。

typedef struct {
    double flow;
    double pres;
    double tqe;
} sigStructType;

生成表示该类型的 Simulink.Bus 对象。

Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

修改 C 代码中的类型定义

ex_cc_myTypes_rec.h 中,将名为 spd 的字段添加到 sigStructType

在同一个文件中,创建新结构体类型 stateStructType

typedef struct {
    double flow;
    double pres;
    double tqe;
    double spd;
} sigStructType;

typedef struct {
    double err;
    double read;
    double write;
} stateStructType;

再次尝试导入类型

尝试生成表示类型的总线对象。

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

函数在命令提示符下生成警告。您可以通过检查输出 importInfo(而不是依赖警告)来确定函数是否未导入任何类型。

importInfo.failedToImport.Bus
ans =

  1×1 cell array

    {'sigStructType'}

该函数未导入 sigStructType。基础工作区中对应的总线对象仍然只有三个总线元素。要确定函数未导入 sigStructType 的原因,请检查 importInforeport 字段。

再次导入 sigStructType。这次会覆盖现有总线对象。

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h',...
    'Names',importInfo.failedToImport.Bus,'Overwrite','on');

当您覆盖现有 Simulink 表示时,您对 Simulink 表示所做的任何自定义(例如将定点数据类型应用于总线元素)都将被覆盖。

输入参数

全部折叠

要解析的头文件的名称和路径,指定为字符向量、字符向量元胞数组、字符串或字符串数组。包括 .h.hpp 文件扩展名。

如果使用包含的 (#include) 头文件的层次结构来定义类型,则当指定 HeaderFiles 时,只需标识入口函数文件。函数会解析包含的文件以及标识的入口函数文件。如果包含的文件与对应的入口函数文件不在同一文件夹中,请使用 IncludeDirs 对组参量标识其他文件夹。

示例: 'myHeader.h'

示例: {'thisHeader.hpp','thatHeader.hpp'}

数据类型: char | cell | string

要为其导入类型的已加载 Simulink 模型的名称,指定为字符向量或字符串标量。在您打开模型或使用 load_system 函数时,即会加载模型。当您使用此参量时,函数将:

  • 在模型配置参数中搜索自定义头文件并为要导入的数据类型解析这些头文件。只有仿真目标窗格上的配置参数会影响此搜索。

    例如,如果在模型中将配置参数 > 仿真目标 > 包含头文件设置为 #include "myTypes.h",则函数为要导入的类型解析 myTypes.h

  • 根据主机的字长解释泛型 C 数据类型,例如 intshort。请勿使用 HardwareImplementation 对组参量覆盖此解释。

示例: 'myModel'

数据类型: char | string

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: Simulink.importExternalCTypes('myHdr.h','DataDictionary','myDictionary.sldd')

为存储生成的 Simulink.BusSimulink.AliasType 对象而创建的 MAT 文件的名称和路径(其中路径为可选),指定为字符向量或字符串。如果您不使用 MATFile,则默认情况下,函数在基础工作区中生成对象。

函数不会在 MAT 文件中生成枚举定义。

如果使用 MATFile 导入某些 struct 类型和原始 typedef 语句,并稍后再次使用 MATFile 导入某些相同的类型,则函数会用新的 MAT 文件彻底替换旧文件。函数会放弃对旧 MAT 文件内容所做的任何更改。

您不能同时使用 MATFileDataDictionary 对组参量。

示例: 'myMat.mat'

示例: 'myMat'

示例: fullfile('subfolder','myMat')

数据类型: char | string

为存储生成的枚举和对象而创建的 Simulink 数据字典的名称和路径(其中路径为可选),指定为字符向量或字符串。当使用此对组参量时,函数将枚举类型作为 Simulink.data.dictionary.EnumTypeDefinition 对象导入,并将这些对象(以及 Simulink.Bus 对象和 Simulink.AliasType 对象)存储在目标字典中。

有关数据字典的信息,请参阅什么是数据字典?

您可以指定 .sldd 扩展名,也可以不指定。

您不能同时使用 DataDictionaryMATFile 对组参量。

示例: 'myDict.sldd'

示例: 'myDict'

示例: fullfile('subfolder','myDict.sldd')

数据类型: char | string

要导入的类型的名称,指定为字符向量、字符向量元胞数组、字符串或字符串数组。默认情况下,如果您不使用 Names,函数会尝试导入标识的头文件定义的所有自定义类型。

要将多个类型名称与单个字符向量匹配,请使用星号 (*)。

示例: 'myEnumType'

示例: {'myEnumType','myStructType'}

示例: 'my*Type'

数据类型: char | cell | string

用于定义影响 C 类型定义的宏的编译器选项,指定为字符向量或字符串标量。例如,如果将定义包含在用于检查宏是否已定义的 #ifdef 模块中,宏会影响类型定义。

使用 Defines 来指定宏定义,您也可通过编译器选项(例如 -D)进行定义。

示例: 'SIGSTRUCT=1'

示例: 'SIGSTRUCT=1 ENUM=1'

数据类型: char | string

用于删除影响 C 类型定义的宏的编译器选项,指定为字符向量或字符串标量。例如,如果将定义包含在用于检查宏是否已定义的 #ifdef 模块中,宏会影响类型定义。

使用 UnDefines 来指定宏删除,您也可通过编译器选项(例如 -U)进行定义。

示例: 'SIGSTRUCT'

示例: 'SIGSTRUCT ENUM'

数据类型: char | string

包含子文件夹以及包含的 (#include) 头文件的文件夹,指定为字符向量、字符向量元胞数组、字符串或字符串数组。使用此对组参量,可使函数能够定位和解析主头文件所依赖的其他头文件(使用 headerFiles 参量指定)。

如果使用 modelName 语法而不是 headerFiles 语法,则在目标模型中可以使用仿真目标配置参数来指定包含路径。在这种情况下,您不需要使用 IncludeDirs 对组参量。

示例: 'myHeaders'

示例: fullfile('myProject','myHeaders')

示例: {fullfile('myProject','myHeaders'),fullfile('myProject','myOtherHeaders')}

数据类型: char | cell | string

用于存储生成的文件的文件夹,指定为字符向量或字符串。函数将生成的文件(如 classdef 脚本文件和数据字典文件)置于此文件夹中。

在使用该函数之前,您指定的文件夹必须存在。

示例: 'myDictionaries'

示例: fullfile('myProject','myDictionaries')

数据类型: char | string

从 C 和 C++ 头文件中解析并导入兼容的数据类型。如果指定包含 C++ 功能的头文件,请将 Language 指定为 'C++' 来导入兼容的 C 数据类型。

当从具有 hpp 扩展名的头文件导入数据类型时,如果未指定 Language 设置或将其设置为 'Auto',则会选择 'C++' 来解析头文件。C++ 类和 C++ 结构体类型会被忽略。不导入空结构体。

如果从加载的模型导入头文件,并且未指定 Language 或将其设置为 'Auto',则 Language 设置将从模型的自定义设置中继承。如果导入的模型在配置参数 > 仿真目标中已有 Language 设置,则此设置会被所导入模型的设置覆盖。

用于解释泛型原始 C 数据类型的字长,指定为 Simulink.ConfigSetcoder.HardwareImplementation (MATLAB Coder) 对象。

  • 要使用 Simulink.ConfigSet 对象,您可以使用 getConfigSetgetActiveConfigSet 等函数从模型中提取配置集。此方法使您能够使用“配置参数”对话框来标识您的目标硬件(通过硬件实现配置参数)。

  • 要使用 coder.HardwareImplementation 对象(以编程方式创建和配置),需要指定对象的属性(如 ProdHWDeviceType)以标识目标硬件。然后,该对象会设置反映硬件的本机整数大小的其他属性,例如 ProdBitPerInt

函数检查该对象以确定在解释泛型 C 数据类型(如 int)时要使用哪个 Simulink 整数数据类型。例如,如果您创建了一个用来标识 16 位硬件 coder.HardwareImplementation 对象,然后使用该函数导入其字段使用 C 数据类型 int 的结构体类型,则函数会生成一个总线对象,其总线元素使用 Simulink 数据类型 int16。函数使用生产硬件设置,而不是测试硬件设置。

有关 Simulink 模型的硬件实现设置的详细信息,请参阅配置运行时环境选项 (Simulink Coder)

指定是否覆盖现有 Simulink 表示,指定为 'on''off'。如果导入的类型已有 Simulink 表示:

  • 如果指定 'off' 或者未指定 Overwrite,则函数不会导入该类型。在输出参量 importInfo 中,failedToImport 字段会标识该类型。

  • 如果指定 'on',则函数将覆盖现有 Simulink 表示。

如果使用该函数将某些类型导入基础工作区或数据字典中,并稍后自定义生成的 Simulink 表示,则当您再次使用该函数并将 Overwrite 设置为 'on' 时,该函数不会保留您的自定义设置。这些自定义可以包括:

  • 在枚举类定义中,实现额外的方法或修改生成的方法,如 getDataScope(请参阅自定义 Simulink 枚举)。

  • 修改生成的 Simulink.BusSimulink.AliasType 对象的属性(例如,手动将总线元素的数据类型设置为定点数据类型)。

指定是否为成功导入操作生成消息,指定为 'on''off'

  • 如果指定 'off' 或者未指定 Verbose,则该函数将以静默方式导入类型。除非函数不能导入类型,否则不会在命令行窗口中显示消息。

  • 如果指定 'on',则该函数将在导入过程中为每个操作在命令行窗口中生成一条消息。

输出参量

全部折叠

有关导入的和未导入的类型的信息,以具有下列字段的结构体形式返回。

导入的和未导入的类型的描述,以字符向量形式返回。检查此字段的值以确定函数不能导入类型的原因。

未导入的类型,以具有下列字段的结构体形式返回。

字段名称字段值用途
Bus字符向量元胞数组未导入的结构体 (struct) 类型的名称。
Enum字符向量元胞数组未导入的枚举类型 (enum) 的名称。
AliasType字符向量元胞数组未导入的原始 typedef 语句的名称。

成功导入的类型,以具有下列字段的结构体形式返回。

字段名称字段值用途
Bus字符向量元胞数组导入的结构体 (struct) 类型的名称。生成的 Simulink.Bus 对象使用这些名称。
Enum字符向量元胞数组导入的枚举类型 (enum) 的名称。生成的枚举类或 Simulink.data.dictionary.EnumTypeDefinition 对象使用这些名称。
AliasType字符向量元胞数组导入的原始 typedef 语句的名称。生成的 Simulink.AliasType 对象使用这些名称。

限制

  • 该函数不支持:

    • 在 Simulink 支持的类型中没有对应类型的 C 数据类型。例如,Simulink 不能识别 long double 的等效类型。有关 Simulink 支持的数据类型的信息,请参阅 Simulink 支持的数据类型

    • 指针类型,例如字段值为指针的结构体,或基类型为指针类型的 typedef 语句。

    • 并集。

  • 如果某结构体字段表示定点数据,或者某 typedef 语句映射到一个定点基类型,则函数会将对应总线元素或 Simulink.AliasType 对象的数据类型设置为相关 Simulink 整数类型(例如 int16)。导入程序不能通过解析 C 代码来确定定点定标。使用该函数后,必须使用 fixdt 函数手动指定总线元素的数据类型或 Simulink.AliasType 对象的基类型。

提示

  • 在以下情况下,您必须为您的模型配置仿真目标配置参数,以包含 (#include) 定义导入的枚举或结构体类型的头文件:

    注意

    要导入未在 typedef 语句中命名的类型,请确保仿真目标配置参数导入自定义代码处于选中状态。默认情况下,此参数处于选中状态。

  • 默认情况下:

    • 对于导入的枚举,由于 Simulink 枚举类派生自 Simulink.IntEnumType,因此当您从模型中进行仿真或生成代码时,枚举将使用目标硬件的本机整数大小。您可以使用模型配置参数(如生产设备供应商和类型生产硬件中的原生字长)指定目标硬件的特性。

    • 对于导入的结构体类型:

      • 仅当某结构体字段使用一个对应的 Simulink Coder 结构体类型作为数据类型时,函数才会将该字段作为复数导入。例如,如果外部代码中的某结构体字段使用数据类型 cint8_T,则函数将该字段导入为总线元素(Simulink.BusElement 对象),该总线元素的数据类型为 int8 且其 Complexity 属性设置为 'complex'

      • 对于嵌套的结构体,该函数为每个唯一结构体类型生成一个总线对象。

    • 对于导入的结构体或枚举类型,如果外部代码使用 typedef 语句来命名该类型,则生成的总线对象或 Simulink 枚举类的名称与 typedef 名称匹配。如果您的代码不使用 typedef 语句来命名该类型,则对象或类的名称就是该类型的标记名称,除非该名称与头文件中其他位置的 typedef 语句中定义的类型名称冲突,在这种情况下,该类型不会导入 Simulink 中。如果您未指定标记名称或应用了 typedef 的名称,则 Simulink 会为该对象或类生成任意名称。

    • 函数会对生成的 Simulink 表示进行配置,指明它们是从外部导入的,以进行仿真和代码生成。例如,对于总线对象,该函数会将 DataScope 属性设置为 'Imported',将 HeaderFile 属性设置为外部头文件的名称。要从使用这些 Simulink 表示之一的模型进行仿真或生成代码,必须使头文件对该模型可用。

  • 当您为 Simulink.importExternalCTypes 指定要使用或生成的文件(例如,通过使用 DataDictionary 对组参量)时:

    • 如果要使用的现有文件位于当前文件夹或 MATLAB 路径中,则不需要指定文件路径。您可以自行指定文件名。

    • 要控制生成的文件的文件夹位置,您可以指定路径以及文件名。您也可以使用 OutputDir 对组参量。

版本历史记录

在 R2017a 中推出