数据存储在生成的代码
对数据存储
数据存储在模型层次结构中包含的数据访问或以下级别的数据存储定义。数据存储可以允许子系统和引用模型共享数据,而无需使用I / O端口通过数据从级到级。看到数据存储与数据存储内存块(金宝app模型)的信息数据存储模型®。本节提供关于数据存储代码生成的额外信息。
为数据存储内存块生成代码
控制生成的代码数据存储内存块,应用存储类数据存储。你可以将数据存储内存块的信号对象存储在工作区或数据字典,和控制代码生成块通过应用的存储类对象:
在建模选项卡上,单击模型数据编辑器。
在模型数据编辑器中,选择数据存储选项卡。
开始编辑目标的名称数据存储内存通过点击相应的行的名字列。
旁边的名称,单击按钮并选择创建和解决。
在创建新的数据对话框中,设置价值来
金宝appSimulink.Signal
。可选地,使用位置下拉列表选择一个工作空间来存储结果金宝appSimulink.Signal
对象。点击创建。的
金宝appSimulink.Signal
对象,该对象具有相同的名称作为数据存储,出现在目标工作区。金宝app模型选择块的参数数据存储名称必须解决信号模型对象金宝app。对象的属性对话框打开。
使用存储类下拉列表应用目标存储类。
请注意
当一个数据存储内存块与信号相关对象,之间的映射数据存储名称和信号对象名称必须是一对一的。如果两个或两个以上相同的命名实体映射到同一个信号对象,这个名字冲突是标记为一个错误在代码生成时间。看到解决冲突在配置信号对象的代码生成(金宝app模型)的更多信息。
存储类数据存储内存块
你可以控制数据存储内存块在你的模型存储和在生成的代码的代表分配存储类和类型限定符。你这样做几乎完全相同的方式分配存储类和类型限定符块。
数据存储内存块,像块,汽车
存储类在默认情况下,存储在他们的记忆DWork
向量。存储位置的符号名称是基于数据存储名称。
你可以从多个生成代码数据存储内存块数据存储名称相同,受到以下限制:最多一个的名称相同的块存储类以外汽车
。一个错误报告,如果不满足此条件。
为块汽车
存储类,代码生成器产生一个独特的符号名称为每个块以避免名称冲突。为数据存储和存储类以外的内存块汽车
,生成的代码使用数据存储名称作为象征。
在接下来的模型中,数据存储写写入内存块宣布的数据存储内存块myData
:
控制存储申报数据存储内存块,用代码生成>信号对象类和代码生成>存储类下拉列表的数据存储内存块对话框。集信号对象类来金宝appSimulink.Signal
(默认),选择一个存储类的存储类下拉列表。下一个图显示了数据存储内存块对话框前面的模型。
应用存储类数据存储,或者可以使用数据存储(在选项卡中模型数据编辑器建模选项卡上,单击模型数据编辑器)。
数据存储内存块nonvirtual因为代码生成的初始化。c
和. cpp
文件和声明的头文件。下面的表显示了生成的代码数据存储内存块在前面的模型不同为不同存储类。表给出了变量声明和MdlOutputs
生成的代码myData
块。
存储类 |
宣言 |
代码 |
---|---|---|
|
在 typedef struct D_Work_tag {real_T myData;}D_Work; 在 / *块状态(自动存储)* / D_Work模型_DWork; |
模型_DWork。myData= rtb_SineWave; |
|
在 / *出口阻塞状态* / real_T myData; 在 走读生real_T myData; |
myData = rtb_SineWave; |
|
在 走读生real_T myData; |
myData = rtb_SineWave; |
|
在 走读生real_T * myData; |
(* myData) = rtb_SineWave; |
应用存储类的信息,请参阅存储类适用于单个信号、状态和参数数据元素。
数据缓冲存储在生成的代码
一个数据存储读取块是一个nonvirtual块,数据存储的值复制到输出缓冲区时执行。因为价值是缓冲,下游块连接到数据存储的输出阅读使用相同的值,即使更新块数据存储之间的数据存储执行下游的两个街区。
下一个图显示了一个模型,利用块的优先级被修改来实现一个特定的执行顺序:
以下应用执行顺序:
块数据存储读取缓冲区的当前值数据存储
一个
在它的输出。块Abs1使用缓冲输出存储读取的数据。
数据块存储写更新数据存储。
块腹肌使用缓冲输出存储读取的数据。
因为数据存储读取的输出是一个缓冲区,Abs和Abs1都使用相同的值:数据存储的值时,数据存储读取执行。
下一个图显示了一个例子:
在这个例子中,以下适用执行顺序:
块数据存储读取缓冲区的当前值数据存储
一个
在它的输出。原子子系统执行。
块和增加了原子的输出子系统的输出数据存储读取。
金宝app模型假定原子子系统可能更新数据存储,所以仿真软件缓冲区的数据存储。原子子系统执行数据存储读取缓冲区输出后,和缓冲区提供了一种方法和块使用数据存储的值作为数据存储读取时执行。
在某些情况下,代码生成器决定,它可以优化掉的输出缓冲区数据存储读取块,并直接生成的代码指的是数据存储,而不是一个缓冲它的价值。下一个图显示了一个例子:
在生成的代码中,论点的晶圆厂()
函数是数据存储一个
而不是一个缓冲的价值。
数据存储实例共享的可重用模型
您可以使用一个数据存储之间的数据共享一块可重用的实例引用模型(见引用的模型实例之间共享数据(金宝app模型)或一个模型配置生成可重入代码(通过设置配置参数代码接口包装来可重用的功能
)。如果你实现数据存储数据存储内存块并选择分享跨模型实例参数:
默认情况下,数据存储作为一个单独的全局符号出现在生成的代码。
如果你有嵌入式编码器®限制访问等,只有从模型中生成的代码可以使用数据存储,配置数据存储出现
静态
通过应用存储类FileScope
。更多信息FileScope
和其他存储类,明白了选择存储类数据表示控制生成的代码(嵌入式编码)。
使用数据存储结构生成的代码
如果您使用多个数据存储提供全球访问多个信号在生成的代码中,您可以组合成一个单一的信号通过使用一个数据存储结构变量。这种组合的信号数据可以帮助你整合生成的代码与其他现有的代码,需要从一个模型数据结构的格式。
这个例子展示了如何存储几个模型信号的结构生成的代码使用一个数据存储。多个信号存储在一个数据存储,你配置数据存储来接受一个复合信号,如nonvirtual总线信号或数组nonvirtual总线信号。
探索模型示例
打开示例模型ex_bus_struct_in_code。
执行计算的模型包含三个子系统的输入模型的顶层。在每个子系统中,数据存储内存块存储一个中间计算信号。
与模型生成代码。在代码生成报告,查看文件
ex_bus_struct_in_code.c
。代码为每个数据存储定义了一个全局变量。real_T BioBTURate;real_T CoalBTURate;real_T GasBTURate;
假设您想要集成代码生成的模型与其他现有的代码示例。还假设现有代码需要访问数据的三个数据存储在一个结构变量。您可以使用一个数据存储装配目标数据结构中生成的代码。
配置数据存储
配置数据存储通过创建一个包含多个信号总线类型作为数据存储的数据类型。定义总线类型使用相同的元素的层次结构,你想要出现在生成的代码中。
打开汽车编辑器工具。
buseditor
定义一个新的总线类型
Raw_BTU_Rate
一个元素的三个目标信号。名称的元素BioBTU
,GasBTU
,CoalBTU
。在顶层模型的例子,添加一个数据存储内存块。
在建模选项卡上,单击模型数据编辑器。
在模型数据编辑器,检查数据存储选项卡。
为新数据存储内存块,用的名字列设置数据存储名称
Raw_BTU_Data
。使用数据类型列的数据类型的数据存储
总线:Raw_BTU_Rate
。设置改变观点下拉列表,
代码
。使用存储类列应用存储类
ExportedGlobal
。
写入数据存储元素
写信给一个特定的元素的一个数据存储,使用数据存储写块。在元素赋值对话框中的选项卡,您可以指定写入单个元素,元素的集合,或数据存储的全部内容。
打开生物质Calc子系统。
删除数据存储内存块
BioBTURate
。在块对话框数据存储写块,设置数据存储名称来
Raw_BTU_Data
。在元素赋值选项卡,在在公共汽车上的信号的内容,扩大数据存储
Raw_BTU_Data
。点击元素BioBTU
,然后单击选择。点击好吧。修改气体Calc和煤炭Calc类似的子系统。
删除数据存储内存块在每个子系统。
在每一个数据存储写块对话框中,设置数据存储名称来
Raw_BTU_Data
。在气体Calc子系统,使用数据存储写块写入数据存储元素
GasBTU
。在煤炭Calc子系统,写的元素CoalBTU
。
生成代码与数据存储结构
生成的代码示例模型。
在代码生成报告,查看文件
ex_bus_struct_in_code_types.h
。代码定义一个结构,对应于总线类型Raw_BTU_Rate
。typedef struct {real_T BioBTU;real_T GasBTU;real_T CoalBTU;}Raw_BTU_Rate;
查看文件
ex_bus_struct_in_code.c
。代码代表了数据存储在一个全局变量Raw_BTU_Data
的结构类型Raw_BTU_Rate
。在模型中阶跃函数,代码分配计算的数据信号领域的全局变量Raw_BTU_Data
。
相关的话题
- 存储类适用于单个信号、状态和参数数据元素
- 使用数据存储结构生成的代码
- 当使用一个数据存储(金宝app模型)
- 生成代码,取消引用数据从内存地址(嵌入式编码)