文件

金宝appsimulink.importexternalctypes.

产生金宝app由C或C ++代码定义的自定义数据类型的表示

描述

例子

importInfo= 金宝appsimulink.importexternalctypes(headerFiles解析C或c++头文件(。H或者.HPP.确认的)headerFiles为了类型定义塑造, 和枚举类型定义,并生成Simulink金宝app®类型的表示。输出,importInfo,标识成功导入和未导入的类型。

您可以使用Simulink表示来金宝app:

默认情况下,函数:

  • 通过生成从中源自枚举类的脚本文件来导入枚举类型金宝app仿真软件。在tEnumType,如定义Simul金宝appink枚举.如果需要,您可以编辑类定义以自定义它(例如,通过实现addclassnametoenumnames.方法)。

  • 类型导入结构类型金宝appsimulink.bus.基础工作区中的对象。

  • 进口原语类型定义通过生成一个声明金宝appsimulink.aliaStype.基础工作区中的对象。

  • 解释泛型C数据类型,例如int或者,根据主计算机的单词长度。例如,对于大多数现代机器,int具有32位字长度,所以该函数表示一个int结构字段作为使用Simulink数据类型的总线元素金宝appint32

    要覆盖此默认行为,请使用该默认行为识别目标硬件板硬件可执行对论证。

有关默认行为的其他信息,请参阅提示

例子

importInfo= 金宝appsimulink.importexternalctypes(型号名称通过分析您识别的模型金宝app来生成自定义C数据类型的Simulink表示型号名称.当你使用模拟目标配置模型中的参数,以识别模拟过程中要包含的头文件,使用此语法导入类型,以便在主机上模拟模型。该函数根据主机的字长解释一般的C数据类型。

当您使用此语法时,请勿使用对参数,例如硬件可执行,这可能与目标模型的配置参数冲突。当您使用这种语法的pair参数时,函数会生成一个警告。

例子

importInfo= 金宝appsimulink.importexternalctypes(___、名称、值)使用一个或多个名称值对参数指定其他选项。您可以使用此语法:

  • 使用使用指定要导入的类型名称的名字对论证。

  • 控制Simulink存储导入类型的方式,例金宝app如,通过在Simulink数据字典中生成类型。使用Matfile.DataDictionary对参数。

  • 控制功能解释通用C数据类型的方式。使用硬件可执行对论证。

  • 通过尝试再次导入更新的C-Code定义,维护C代码定义和Simulink表示之间的同步。金宝app您可以选择是否覆盖现有的Simulink表示。金宝app使用覆盖verb对参数。

例子

全部收缩

此示例显示如何生成C结构类型的Simulink表示(金宝app塑造)及经点算的枚举)的数据类型。

  1. 在当前文件夹中,创建该文件ex_cc_simpletypes.h.

    typedef enum {PWR_LOSS = 0, /*默认值*/ OVERSPD, PRESS_LOW,} fault_T;typedef struct {double coeff;双核;params_t;

  2. 通过调用生成类型的金宝appSimulink表示金宝appsimulink.importexternalctypes.

    金宝appsimulink.importexternalctypes('ex_cc_simpletypes.h');

    该功能创建了一个金宝appsimulink.bus.目的,params_t.,在基础工作区中。

  3. 要检查对象的属性,请打开总线编辑器。

    buseditor

    每个总线元素使用一个名称和一个数据类型(中的对应结构字段ex_cc_simpletypes.h.

  4. 在当前文件夹中,检查生成的文件,故障_.M.,它定义枚举类型fault_T作为枚举类。

    可以使用总线对象和计算类在Simulink模型中设置信号和参数数据类型。金宝app

此示例显示了如何生成结构类型的Simulink表示,其字段使用自定义数据类金宝app型(类型定义)。

创建文件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累积;UINT_16索引;my_ints_t;

将结构类型导入Simulink作为金宝app金宝appsimulink.bus.基础工作区中的对象。进口类型定义陈述金宝appsimulink.aliaStype.对象。

金宝appsimulink.importexternalctypes('ex_cc_struct_alias.h');

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

my_ints_t.Elements(1)
ANS =具有属性的BusElement:名称:'Accum'复杂性:'Real'尺寸:1数据类型:'Sint_32'Min:[] Max:[]尺寸示波:'固定'Sampletime:-1单位:''''''''''

金宝appsimulink.importexternalctypes.函数使用生成的金宝appsimulink.aliaStype.对象设置总线元素的数据类型。

检查金宝appsimulink.aliaStype.基础工作区中的对象。例如,命名的对象sint_32对应于其中一个类型定义陈述ex_integer_aliases.h.

sint_32
DataScope: 'Imported' HeaderFile: 'ex_integer_alias .h' BaseType: 'int32'

对于大多数主机(默认情况下的函数目标),单词长度int是32位和单词长度毫无符号短是16位。功能映射int毫无符号短到Simuli金宝appnk类型int32uint16

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

此示例显示如何将导入的数据类型存储在Simulink数据字典中。金宝app数据字典存储用于一个或多个Simulink模型的数据规范(例如用于信号和块参数值),数据类型和其他设计数据。金宝app

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

typedef enum {PWR_LOSS = 0, /*默认值*/ OVERSPD, PRESS_LOW,} fault_T;typedef struct {double coeff;双核;params_t;

创建一个名为myDictionaries

mkdir (“myDictionaries”

通过调用生成类型的金宝appSimulink表示金宝appsimulink.importexternalctypes..通过创建新的数据字典永久存储类型定义,ex_cc_mytypes.sldd.,在新子文件夹中。

金宝appsimulink.importexternalctypes('ex_cc_simpletypes.h'......“DataDictionary”'ex_cc_mytypes.sldd'......'outputdir'“myDictionaries”);

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

要使用字典中的Simu金宝applink表示,必须将模型或模型链接到字典。看迁移模型以使用Simulink数据字典金宝app

这个示例展示了如何仅为通过名称标识的枚举数据类型和结构数据类型生成Si金宝appmulink表示。

在当前文件夹中,创建该文件ex_cc_manySimpleTypes.h.该文件定义了三种结构类型:params_t.信号_T., 和states_T

typedef struct {double coeff;双核;params_t;typedef struct {double flow_rate;双蒸汽_press;}信号_t;typedef struct {双累积;双重错误;} solation_t;

仅生成Simuli金宝appnk表示params_t.信号_T.

金宝appsimulink.importexternalctypes(“ex_cc_manySimpleTypes.h”......'名字',{'params_t''信号_t'});

金宝appsimulink.bus.对象,params_t.信号_T.,出现在基础工作区中。

默认情况下,金宝appsimulink.importexternalctypes.通过创建从内置类源的枚举类表示枚举数据类型金宝app仿真软件。在tEnumType.当您从使用生成的类的模型模拟或生成代码时,为模型选择的配置参数(例如,在硬件实现窗格)确定特定的整数长度金宝app仿真软件。在tEnumType和枚举类所使用的。

默认情况下,函数解释通用,原始C数据类型,例如int,根据主计算机的单词长度。例如,表示一个int结构字段,该函数通常应用32位数据类型int32到相应的总线元素。当您想模拟和生成用于主计算机以外的硬件的代码时,请使用硬件可执行参数Pair用于标识目标硬件,并可扩展为硬件的字长度。

此示例显示如何从您打算在16位硬件上使用的代码导入数据类型。对于这个板,int具有16位长度,枚举数据的每个项(枚举)消耗16位。

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

typedef enum {PWR_LOSS = 0, /*默认值*/ OVERSPD, PRESS_LOW,} fault_T;Typedef struct {int coeff;int初始化;params_t;

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

要生成结构类型的准确Simulink表示,首先打金宝app开一个现有模型或创建一个新模型。对于本例,创建一个名为ex_hdwImpl_16bit

在新的模型中,设置>硬件实现>设备厂商爱特梅尔公司.集设备类型AVR的

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

new_system('ex_hdwimpl_16bit''模型');set_param ('ex_hdwimpl_16bit'“ProdHWDeviceType”'Atmel-> AVR'

生成类型的Simu金宝applink表示。要指定目标16位硬件的字长,请提取模型配置参数(包括硬件实现设置)作为一个金宝app仿真软件。ConfigSet目的。

configSet = getActiveConfigSet ('ex_hdwimpl_16bit');金宝appsimulink.importexternalctypes(“ex_cc_intTypes.h”“HardwareImplementation”,配置);

金宝appsimulink.bus.目的params_t.出现在基础工作区中。总线元素,如COEFF.,使用Simulin金宝appk数据类型int16

params_t.Elements(1)
ANS =具有属性的BusElement:名称:'Coeff'复杂性:'实际'尺寸:1个数据类型:'int16'min:[] max:[]尺寸尺寸:'固定'sampletime:-1单位:''''''''''

在当前文件夹中,该文件故障_.M.定义枚举类fault_T.这个课程源于金宝app仿真软件。在tEnumType,因此您必须使用模型配置参数来识别目标硬件,并按扩展将正确的本机整数长度识别。

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

Typedef struct {int coeff;/ *字长16,二进制分数长7 * / int init;/ *字长16,二进制分数长3 * /} params_t;

该文件定义了一个结构类型,其字段使用固定点数据类型。例如,结构存储该字段COEFF.在签名的16位整数数据类型中。二元分数长度7.将存储的整数值与实际值关联。

假设此代码在16位硬件上运行(例如通用C数据类型int有一个16位字长)。要生成类型的Simulink金宝app表示,首先创建一个编码器。硬件可执行对象,该对象标识硬件。

hdw =编码器.Hardwareimplementation;hdw.prodhwdeviceType ='Atmel-> AVR'

生成结构类型的Simu金宝applink表示。

金宝appsimulink.importexternalctypes('ex_cc_fixpt_struct.h'......“HardwareImplementation”,hdw);

金宝appsimulink.bus.目的,params_t.,出现在基础工作区中。每个总线元素,如COEFF.,使用数据类型int16

params_t.Elements(1)
ANS =具有属性的BusElement:名称:'Coeff'复杂性:'实际'尺寸:1个数据类型:'int16'min:[] max:[]尺寸尺寸:'固定'sampletime:-1单位:''''''''''

金宝appsimulink.importexternalctypes.无法从C代码推断出固定点缩放(二进制分数长度)。您必须手动指定总线元素的数据类型。要在命令提示符下指定数据类型,请使用fixdt功能。

params_t.Elements(1).datatype ='fixdt(1,16,7)';params_T.Elements(2)。数据类型=“fixdt(3) 1, 16日”

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

buseditor

此示例显示如何维护C数据类型的Simulink表示,其定义您在建模项目的寿命期金宝app间修改。

导入自定义C类型

创建文件ex_cc_mytypes_rec.h.在您当前的文件夹中。该文件定义了自定义结构类型。

Typedef struct{双流;双总统;双tqe;sigtracttype;

生成A.金宝appsimulink.bus.代表类型的对象。

金宝appsimulink.importexternalctypes(“ex_cc_myTypes_rec.h”);

修改C代码中的类型定义

ex_cc_mytypes_rec.h.,添加名为的字段SPD.sigStructType

在同一文件中,创建一个新的结构类型,stenestructype.

Typedef struct{双流;双总统;双tqe;双社民党;} sigStructType;Typedef struct {double err;双读;双写;} stateStructType;

尝试再次导入类型

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

importInfo = 金宝appSimulink.importExternalCTypes (“ex_cc_myTypes_rec.h”);

该函数在命令提示符处生成警告。您可以检查输出,而不是依赖警告,而不是依赖警告,而不是依赖警告,importInfo,确定功能是否无法导入任何类型。

importinfo.failedtoimport.bus.
ans = 1×1 cell array {'sigStructType'}

该功能没有导入sigStructType.基础工作区中的相应总线对象仍然只有三个总线元素。确定功能没有导入的原因sigStructType,检查报告现场importInfo

进口sigStructType再次。这次,覆盖现有的总线对象。

importInfo = 金宝appSimulink.importExternalCTypes (“ex_cc_myTypes_rec.h”......'名字',importinfo.failedtoimport.bus,'覆盖''在');

覆盖了现有的Simulink表示,覆盖了所覆盖到Simu金宝applink表示的任何自定义(例如将固定点数据类型应用于总线元素)。

输入参数

全部收缩

标题文件的名称和路径解析为字符向量,字符向量,字符号或字符串数​​组的单元格数组。包括。H或者.HPP.文件扩展名。

如果使用包含的层次结构(#包括)标题文件以定义类型,当您指定时HeaderFiles,您只需要识别入口点文件。该函数解析包含的文件以及识别的入口点文件。如果所包含的文件与相应的入口点文件不在同一个文件夹中,则使用包括在内对参数识别其他文件夹。

例子:'myheader.h'

例子:{'thisheder.hpp','abhipler.hpp'}

数据类型:字符|细胞|字符串

为其导入类型的加载Simulink金宝app模型的名称,指定为字符向量或字符串标量。例如,如果您打开模型或使用该模型,则加载模型load_system.功能。当您使用此参数时,该函数:

  • 搜索自定义头文件的模型配置参数,并解析这些头文件以获取要导入的数据类型。只有配置参数模拟目标窗格影响此搜索。

    例如,如果在您设置的模型中配置参数>模拟目标>在生成的代码中插入定制的C代码>标题文件#include“mytypes.h”,函数解析mytypes.h.用于导入类型。

  • 解释泛型C数据类型,例如int或者根据主计算机的单词长度。不要使用硬件可执行对论证覆盖此解释。

例子:“myModel”

数据类型:字符|字符串

名称值对参数

指定可选的逗号分离对名称,价值参数。的名字是参数名称和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:金宝appSimulink.importExternalCTypes(“myHdr.h”、“DataDictionary”、“myDictionary.sldd”)

名称和,可选地,Mat文件的路径要为存储生成的存储金宝appsimulink.bus.金宝appsimulink.aliaStype.对象,指定为字符向量或字符串。如果你不使用Matfile.,默认情况下,该函数在基本工作区中生成对象。

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

如果你进口一些塑造类型和原始类型定义使用陈述Matfile.后来使用的再次导入一些相同的类型Matfile.,该函数将用一个新文件完全替换旧的MAT-file。该函数将丢弃您对旧mat文件内容所做的任何更改。

你不能使用Matfile.DataDictionary同时对参数。

例子:“myMat.mat”

例子:“myMat”

例子:fullfile(“文件夹”、“myMat”)

数据类型:字符|字符串

要使用或创建的Simulink数据字典的名称和(可选)路径,以存储生金宝app成的枚举和对象,指定为字符向量或字符串。当使用pair参数时,函数将枚举类型导入为金宝appsimulink.data.dictionary.enumtypefinition.对象,并存储这些对象(以及金宝appsimulink.bus.对象和金宝appsimulink.aliaStype.目标字典中的对象。

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

您可以选择指定.sldd扩展。

你不能使用DataDictionaryMatfile.同时对参数。

例子:“myDict.sldd”

例子:'mydict'

例子:fullfile(“文件夹”、“myDict.sldd”)

数据类型:字符|字符串

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

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

例子:'myenumtype'

例子:{'myenumtype','mystructtype'}

例子:'我的风格'

数据类型:字符|细胞|字符串

编译器选项以定义影响C类型定义的宏,指定为字符向量或字符串标量。例如,如果您括在其中的定义附上定义,则影响类型定义#ifdef.检查是否定义了宏的块。

定义了指定通过编译器选项(例如)定义的宏定义-D.

例子:“SIGSTRUCT = 1”

例子:'sigstruct = 1 Enum = 1'

数据类型:字符|字符串

编译器选项删除影响C类型定义的宏,指定为字符向量或字符串标量。例如,如果您括在其中的定义附上定义,则影响类型定义#ifdef.检查是否定义了宏的块。

尚未确定指定通过编译器选项(例如)定义的宏删除-U

例子:'sigstruct'

例子:'sigstruct enum'

数据类型:字符|字符串

包含下级的文件夹,包括(#包括)头文件,指定为字符向量、字符向量的单元格数组、字符串或字符串数组。使用pair参数使函数能够定位和解析主头文件(用headerFiles参数)。

如果你使用型号名称语法而不是headerFiles语法,在目标模型中,您可以使用模拟目标指定包含路径的配置参数。在这种情况下,不需要使用包括在内对论证。

例子:'Myheaders'

例子:fullfile('myproject','myheaders')

例子:{fullfile('myproject','myheaders'),fullfile('myproject','myotherheaders')}

数据类型:字符|细胞|字符串

存储生成的文件的文件夹,指定为字符向量或字符串。该函数将生成的文件(例如)生成classdef脚本文件和数据字典文件,在这个文件夹中。

在使用功能之前,必须存在的文件夹。

例子:“myDictionaries”

例子:fullfile('myproject','mydictionaries')

数据类型:字符|字符串

用于解释泛型、原语C数据类型的字长,指定为金宝app仿真软件。ConfigSet或者编码器。硬件可执行目的。

  • 用A.金宝app仿真软件。ConfigSet对象,您可以通过使用诸如的函数从模型中提取配置集getconfiget.getActiveConfiget..此技术使您可以使用“配置参数”对话框来识别目标硬件(通过硬件实现配置参数)。

  • 用A.编码器。硬件可执行对象(以编程方式创建和配置),指定对象的属性,例如ProdHWDeviceType,识别您的目标硬件。然后对象设置其他属性,例如ProdBitPerInt,反映硬件的本机整数大小。

该函数检查对象,以确定在解释诸如的通用C数据类型时采用哪种模拟整数数据类型金宝appint.例如,如果您创建一个编码器。硬件可执行对象识别16位硬件,然后使用该函数导入其字段使用C数据类型的结构类型int,该函数生成总线对象,其总线元素使用Simulink数据类型金宝appint16.该功能使用生产硬件设置,而不是测试硬件设置。

有关Simulink模型的硬件实现设置的详细信息,请参阅金宝app配置运行时环境选项(金宝appSimulink编码器)。

重写现有Simulink表示的规范,指定为金宝app'在'或者“关闭”.如果导入的类型在Simulink中已经有表示:金宝app

  • 如果您指定“关闭”或者如果您未指定覆盖,该函数不会导入类型。在输出参数中,importInfo, 这failedToImport字段标识类型。

  • 如果您指定'在',函数将覆盖现有的Simulink表示。金宝app

如果您使用该函数将某些类型导入到基本工作空间或数据字典中,并在稍后定制生成的Simulink表示,当您再次使用该函数并设置时金宝app覆盖'在',该函数不保留您的自定义。这些自定义可以包括:

  • 在枚举类定义中,实现额外的方法或修改生成的方法,例如getDataScope(见自定义Simulin金宝appk枚举)。

  • 修改生成的属性金宝appsimulink.bus.或者金宝appsimulink.aliaStype.对象(例如,手动将总线元素的数据类型设置为定点数据类型)。

为成功导入操作生成消息的规范,指定为'在'或者“关闭”

  • 如果您指定“关闭”或者如果您未指定verb,函数将静默地导入类型。消息不会出现在命令窗口中,除非函数不能导入类型。

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

输出参数

全部收缩

有关导入且未导入的类型的信息,作为具有这些字段的结构返回。

已导入和未导入类型的描述,作为字符向量返回。检查该字段的值,以确定函数无法导入类型的原因。

未导入的类型,作为具有这些字段的结构返回。

字段名 字段值 目的
公共汽车 字符向量的单元格阵列 结构的名称(塑造)未导入的类型。
枚举 字符向量的单元格阵列 枚举类型的名称(枚举)没有进口。
AliasType 字符向量的单元格阵列 原始的名称类型定义未导入的语句。

已成功导入的类型,作为具有这些字段的结构返回。

字段名 字段值 目的
公共汽车 字符向量的单元格阵列 结构的名称(塑造)导入的类型。生成金宝appsimulink.bus.对象使用这些名称。
枚举 字符向量的单元格阵列 枚举类型的名称(枚举)。生成的枚举类或金宝appsimulink.data.dictionary.enumtypefinition.对象使用这些名称。
AliasType 字符向量的单元格阵列 原始的名称类型定义已导入的语句。生成金宝appsimulink.aliaStype.对象使用这些名称。

限制

  • 该函数不支持:金宝app

    • C不对应于Simulink支持的类型的数据类型。金宝app金宝app例如,Simulink无法金宝app识别等效物长两倍.有关Simulink支持的数据类型的信息,请参阅金宝app金宝appSimulink支持的金宝app数据类型金宝app

    • 指针类型,例如定义该字段的结构,其值是指针或一个字段类型定义声明,其基本类型是指针类型。

    • 定义其值具有多个维度的字段的结构。

      如果字段值是1-D阵列,则该函数创建表示向量的总线元素,而不是矩阵。

    • 工会。

  • 如果结构字段代表固定点数据,或者如果是类型定义语句映射到固定点基本类型,该函数设置相应总线元素的数据类型或金宝appsimulink.aliaStype.对象到相关的Simulink整数类型(例如金宝appint16)。导入器无法通过解析C代码来确定定点缩放。使用该函数后,必须手动指定总线元素的数据类型或基本类型金宝appsimulink.aliaStype.对象的fixdt功能。

提示

  • 如果一个Matlab功能块或州流®模型中的图表使用导入的枚举或结构类型,配置模型配置参数以包含(#包括)来自外部头文件中的类型定义。看控制导入总线和枚举类型定义(为一个Matlab功能块)和访问状态流图中的自定义代码变量和函数(Stateflow)和将自定义结构集成在状态溢图中(stateflow)(图表)。

  • 默认情况下:

    • 对于导入的枚举,因为Simulink枚举类来自金宝app金宝app仿真软件。在tEnumType,当您从模型中模拟或生成代码时,枚举使用本机的整数大小为目标硬件。您使用模型配置参数指定目标硬件的特性,例如生产设备供应商和类型生产硬件中的原始字大小

    • 对于导入的结构类型:

      • 只有当该字段使用相应的字段之一时,该函数才将结构字段作为数字复杂的金宝app仿真软件编码器结构类型作为数据类型。例如,如果外部代码中的结构字段使用数据类型cint8_T,该函数将该字段导入为总线元素(金宝appsimulink.bus.Element对象)其数据类型是INT8.复杂属性设置为'复杂的'

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

    • 对于导入的结构类型或枚举,如果外部代码使用类型定义语句要命名类型,生成的总线对象或Simulink枚举类的名称匹配金宝app类型定义姓名。如果您的代码不使用a类型定义语句,对象或类的名称是塑造_类型或者enum_类型在哪里类型是类型的标签名称。如果您未指定标记名称或应用a类型定义名称,Sim金宝appulink为对象或类生成任意名称。

    • 该函数将生成的SIMULINK表示作为仿真和代码生成的目的配置为导入。金宝app例如,对于总线对象,该函数设置datascope.财产“进口”标题文件属性到外部标题文件的名称。要从使用这些Simulink表示之一的模型模拟或生成代码,您必须使您的头文件可用于模型。金宝app

  • 当您指定文件时金宝appsimulink.importexternalctypes.例如,使用或生成通过使用DataDictionary对论证:

    • 如果要使用的现有文件在您当前的文件夹中或在MATLAB路径上,则无需指定文件路径。您可以自己指定文件名。

    • 要控制生成文件的文件夹位置,可以指定路径以及文件名。你也可以使用OutputDir对论证。

在R2017A介绍