主要内容

之间交换数据和外部C / c++代码金宝app模型或生成的代码

你是否外部代码导入仿真软件金宝app®模型(例如,通过使用遗留代码的工具)或导出生成的代码到外部环境中,模型或生成的代码通常交换数据(信号、状态和参数)与代码。

在C或c++代码功能,包括您的外部功能,可以与调用者或交换数据调用函数:

  • 函数参数(正式的参数)。当一个函数通过交换数据参数,应用程序可以多次调用该函数。调用函数的每个实例可以操纵自己的独立集数据的实例不相互干扰。

  • 直接访问全局变量。全局变量可以:

    • 使不同的算法(功能)和相同的算法的实例共享数据,如校准参数和错误状态。

    • 使不同的利率(函数)的多任务系统交换数据。

    • 使不同的算法异步交换数据。

在仿真金宝app软件中,可以组织和配置数据,以便使用这些交换机制来提供模型,提取、共享数据和代码。

在你尝试匹配数据接口,选择一个整体集成方法,明白了选择一个外部代码集成工作流

外部代码导入模型

之间交换数据模型和外部函数,选择一个交流机制根据您选择的技术整合功能。

  • 通过您的外部函数的参数来交换数据,构建和配置您的模型创建和包的数据根据数据类型参数。然后,您连接和配置块调用或代表你接受函数,产生,或参考的数据模型。

    例如,如果您使用遗留代码工具生成一个功能块调用你的函数,的港口和参数块对应函数的参数。你连接上游块的输出信号的输入端口和设置参数值块面具。然后,您可以创建信号线路输出端口的块和将这些信号连接到下游的块。

  • 交换数据通过全局变量,外部代码已经定义了一个最佳实践是使用Stateflow®表调用你的函数和变量的访问。你写算法图表中的C代码,这样在模拟或生成的代码的执行,该模型变量的读和写。

    等一个全局变量使用一个项目的参数数据(而不是信号或状态数据)在一个模型,您可以创建一个数字MATLAB®变量或金宝appSimulink.Parameter对象代表了变量。如果你改变c代码变量的值在模拟运行时,您必须手动同步模型变量或对象的价值。金宝app如果你的算法代码(函数)在模拟c代码变量的值变化,相应的模型变量或对象不改变。金宝app

    如果您选择创建一个c代码的模型表示变量,您可以配置模金宝app型表示,这样生成的代码读取和写入变量但不复制变量定义。应用仿真软件的存储类表示。金宝app

技术集成外部函数 机制与模型交换数据 例子和更多的信息
功能

函数参数

通过一个函数调用你的函数创建使用遗留代码的工具,明白了C函数集成到仿真软件模型与遗留代码的工具金宝app

Stateflow图表

函数参数和直接访问全局变量

调用你的函数和访问全局变量Stateflow图表,看看访问Stateflow图表中的自定义代码变量和函数(Stateflow)。信息在表中创建数据项(可以作为参数传递给函数),看到的添加Stateflow数据(Stateflow)

coder.cevalMATLAB函数

函数参数

在一个调用你的函数MATLAB函数块用coder.ceval,请参阅通过使用MATLAB功能块集成C代码。创建数据项的信息MATLAB函数块(你可以通过函数作为参数),看到的创建和定义MATLAB函数块变量

生成的代码导出到外部环境

导出生成的代码到你的外部代码,看看外部调用代码和生成的代码之间交换数据

金宝app表示C数据类型和结构

模型和重用您的自定义C等数据结构、枚举类型定义别名,使用这些表中的信息。

在外部C代码建模模式匹配的数据

C数据类型或结构 示例C代码 金宝app等效模型 更多的信息

原始类型别名(类型定义)

typedef mySinglePrec_T浮动;

创建一个金宝appSimulink.AliasType对象。使用对象:

  • 设置信号和块的数据类型参数模型。

  • 为代码生成配置数据类型替换。

生成代码,使用别名数据类型需要嵌入式编码器®

为模型定义自定义数据类型的信息,明白了金宝appSimulink.AliasType在生成的代码控制数据类型名称(嵌入式编码)

为例,展示了如何导出生成的代码到你的外部代码,看看取代和重命名数据类型符合编码标准(嵌入式编码)

数组

int myArray [6];

指定信号和参数维度中描述确定信号的维度

生成的代码定义和访问多维数据,包括矩阵列为主的序列化的向量。如果你的外部代码使用不同的格式,可以考虑使用替代技术生成的代码集成。看到代码生成的矩阵和数组

信息是如何生成的代码存储nonscalar数据(包括限制),看到的代码生成的矩阵和数组

为例,展示了如何导出生成的代码到你的外部代码,看看重用参数数据从外部代码生成的代码(嵌入式编码)

模型查找表,请参阅金宝appSimulink.LookupTable

枚举

typedef enum myColorsType{红= 0,黄、蓝}myColorsType;

定义一个模型枚举,金宝app对应于您的枚举定义。使用仿真软件枚举金宝app来设置数据类型在一个模型。

使用枚举数据在仿真软件模型中,看到的金宝app使用枚举数据在仿真软件模型金宝app

为例,展示了如何生成枚举参数数据,看看枚举(嵌入式编码)

为例,展示了如何导出生成的代码到你的外部代码通过交换枚举数据,看看之间交换结构化和枚举数据生成和外部代码(嵌入式编码)

结构

typedef struct myStructType {int数;双多项式系数;}myStructType;

创建一个金宝appSimulink.Bus对象对应于你的结构类型。

创建结构化的信号或状态数据、包中的多个信号线路模型到一个nonvirtual总线信号。

创建结构化参数数据,创建一个参数对象(如金宝appSimulink.Parameter)存储一个MATLAB的结构。使用总线对象作为参数的数据类型对象。

查找表的数据打包成一个结构,使用金宝appSimulink.LookupTable可选地,金宝appSimulink.Breakpoint对象。

总线信号的信息,请参阅组信号线路到虚拟的公共汽车。信息结构的参数,请参阅组织相关块参数定义的结构

为例,展示了如何将外部代码导入到一个模型通过使用遗留代码的工具,明白了集成C函数的参数是指向结构的指针

的例子展示了如何导出生成的代码到你的外部代码,看看之间交换结构化和枚举数据生成和外部代码(嵌入式编码)通过外部代码定义一个指针访问结构化数据(嵌入式编码)

包查找表数据结构,金宝appSimulink.LookupTable

有关创建结构的一般信息在生成的代码中,看到的组织数据结构生成的代码

额外的建模模式代码生成(嵌入式编码器)

C数据类型或结构 示例C代码 金宝app等效模型 更多的信息

#定义myParam 9.8

应用存储类定义ImportedDefine参数。使用宏,您可以重用算法参数值在多个位置,改变参数值之间的代码编译没有消耗内存来存储值。通常,宏代表工程常数,您不希望改变在代码执行。

这种技术需要嵌入式编码器。

宏定义(#定义)(嵌入式编码)

存储类型限定符等常量挥发性
const myParam = 9.8;

应用存储类常量,挥发性,ConstVolatile数据项。

保护全球数据使用const关键字和不稳定

位域

typedef struct myBitField{无符号短整型模式:1;无符号短整型失败:1;无符号短整型好:1;}myBitField

  • 应用存储类设置信号、状态和参数的数据类型布尔

  • 使用一个模型配置参数聚合布尔数据字段。

这些技术要求嵌入的编码器。

(嵌入式编码)

优化生成的代码通过包装布尔数据为本(嵌入式编码)

调用自定义外部函数,读取或写入数据

外部代码:

/ *调用这个函数获得的值的信号。* /双get_inSig (void){返回myBigGlobalStruct.inSig;}

生成的算法代码:

algorithmInput = get_inSig ();

应用存储类GetSet信号、状态和参数。每个数据项出现在生成的代码调用您的自定义函数,读取和写入到目标数据。

这种技术需要嵌入式编码器。

通过与存储类GetSet函数访问数据(嵌入式编码)

考虑其他建模的目标

目标 注意事项和更多的信息
使用仿真金宝app软件运行生成的代码并与之交互

您可以使用硅,公益诉讼,和外部模式模拟连接您的模型为仿真生成相应的应用程序。当你从外部导入参数数据代码:

  • 在你开始一个外部模式模拟,外部可执行代码使用的价值使用初始化参数数据。然而,当你改变相应的值在仿真软件模拟(例如通过修改金宝app价值相应的参数对象的属性),仿真软件下载可执行文件的新值。金宝app

  • 银和公益诉讼模拟代码不导入参数值。相反,模拟使用仿真软件的参数值。金宝app如果你包括你的外部代码金宝app仿真软件编码器™构建过程,重复的数据定义可以防止生成的代码编译。

关于硅和公益诉讼的信息,请参阅选择银或公益诉讼的方法(嵌入式编码)。外部模式模拟的信息,请参阅外部模式模拟参数调优和信号监测

导出的数据的生成代码注释描述属性包括物理单位,现实世界的初始值和数据类型

生成这些评论可以帮你匹配数据接口而笔迹集成代码。看到在生成的代码中添加自定义注释变量(嵌入式编码)

相关的话题