文件

将内置和自定义存储类应用于数据元素

将存储类应用于单个信号,状态和参数数据元素,通过将存储类直接应用于各个数据元素,控制生成代码中的全局变量的声明和定义。嵌入式编码器®和基于ert的系统目标文件,您可以更精确地控制数据在生成的代码中显示的方式。

要实现C代码模式,例如将变量分组为扁平结构并控制声明和定义文件放置,您可以从内置包中使用嵌入式编码器可用的存储类金宝app

有关默认情况下,有关将存储类应用于数据类别的信息,请使用代码映射编辑器,查看配置数据的默认代码生成

内置存储类

有关您可以选择的内置存储类列表,请参阅选择用于控制生成代码中的数据表示的存储类

创建自己的存储类

如果存储类来自金宝app包不满足您的要求,可以定义自己的存储类。有关定义自己的存储类的信息,请参阅创建代码定义以覆盖默认设置

以交互方式应用存储类的技术

直接从内置包应用存储类金宝app以交互方式,使用所述技术将存储类应用于单个信号,状态和参数数据元素

将存储类应用于以外的包金宝app(例如您创建的包):

目标类未出现在信号对象类列表中

当你使用的时候信号对象类如果对话框或属性检查器中的下拉列表,如果您想要的类未出现在列表中:

  1. 从列表中,选择自定义类列表

  2. 在对话框中,下信号类,选中所需类旁边的复选框。例如,要从内置包中使用存储类m,选中旁边的复选框mpt.signal.。点击好的

    如果您创建了自己的包,则只有在当前文件夹中的包文件夹中放置包文件夹或将包文件夹放在Matlab上的包文件夹的父文件夹中时,才会在对话框中显示的类®小路。

  3. 从下拉列表中,选择与所选内容对应的选项。例如,选择mpt.signal.

将存储类从特定包应用于信号,状态或数据存储内存块使用模型数据编辑器

使用模型数据编辑器,要从特定包应用存储类,请使用模型资源管理器从目标包创建信号对象。然后,当您打开模型数据编辑器时,存储类列从目标包中显示存储类。

  1. 在模特资源管理器中模型层次结构窗格,选择基础工作区

  2. 在工具栏中,单击旁边的箭头添加信号按钮。

  3. 在下拉列表中,选择自定义类列表

  4. 在里面自定义类列表对话框,从目标包中选择一个信号类。点击好的

  5. 在“模型资源管理器”工具栏中,单击旁边的箭头添加信号按钮。

  6. 在下拉列表中,选择目标信号类。

    目标信号类的一个对象显示在基础工作区中。(可选)删除此不必要的对象。

  7. 使用模型数据编辑器将存储类从目标包应用于其他数据项。在模型数据编辑器中,在存储类列,下拉列表允许您从目标包中选择存储类。

要了解如何使用模型数据编辑器来配置数据界面,请参阅通过配置Inport和Outport块设计数据接口(金宝appSimulink编码器)。

以编程方式应用存储类的技术

要以编程方式将存储类应用于单个数据项:

  1. 从目标包创建信号或参数数据对象。例如,创建一个金宝appsimulink.signal.对象或A.mypackage.Parameter.目的。

    myparam = 金宝appsimulink.parameter(5.2);

  2. 在嵌套金宝appsimulink.coderinfo.对象,设置storageclass.财产'风俗'。然后,使用customstorageClass.属性指定存储类。

    myparam.coderinfo.storageclass ='风俗';myparam.coderinfo.customstorageclass ='exportTofile';

  3. 如果存储类允许您指定其他设置,例如标题文件(看使用存储类(嵌入式编码器)指定文件名和其他数据属性),在嵌套金宝appsimulink.coderinfo.对象,使用CustomAttributes.属性要指定其他设置的值。

    myparam.coderinfo.customattributes.headerfile =.'myheader.h';

  4. 选择其中一个技术以将存储类应用于模型中的数据项:

    • 将存储类直接应用于信号,状态或数据存储内存块,名称信号或状态。然后,使用您创建的数据对象设置为设置signalObject.信号属性,signalObject.块参数(对于一个外港块),或者solysignalobject.块参数。清除您创建的数据对象。例如,看到以编程方式将存储类直接应用于信号线

    • 要通过保留所创建的数据对象(参数所需)来应用存储类,将数据对象与模型中的数据项相关联。制作这个协会,看在Simulink模型中使用数据对象金宝app(金宝appSimulink)。

以编程方式将存储类直接应用于信号线

此示例显示如何将存储类直接应用于模型中的信号行,而无需外部数据对象。

  1. 打开示例模型RTWDEMO_SECONDorDordersystem.

    RTWDEMO_SECONDorDordersystem.

  2. 为块命名为力的输出创建句柄:f(t)。

    porthandles = get_param('RTWDEMO_SECONDORDERSYSTEM / FORCE:F(T)''porthandles');OutportHandle = porthandles.outport;

  3. 将相应信号的名称设置为强调

    set_param(OutportHandle,'姓名''forightnignal'

  4. 在基础工作空间中,创建信号对象并指定存储类和相关的附加设置,例如标题文件

    tempobj = 金宝appsimulink.signal;tempobj.coderinfo.storageclass ='风俗';tempobj.coderinfo.customstorageclass ='exportTofile';tempobj.coderinfo.customAttributes.HeaderFile =.'myhdrfile.h';

    您可以从数据类包创建对象金宝app,或来自任何其他包,例如您创建的包。

  5. 通过附加临时工作区对象的副本将信号对象嵌入目标信号线中。

    set_param(OutportHandle,'signalObject',tempobj);

  6. 清除基础工作区的对象。该信号现在使用对象的嵌入式副本。

    清除Tempobj.

修改存储类直接应用于信号线

要修改现有的嵌入式信号对象,将对象复制到基础工作区,修改副本,并将副本重新连接到信号或状态。例如,要更改附加到信号的嵌入式信号对象的存储类强调以编程方式将存储类直接应用于信号线

  1. 将现有的嵌入式信号对象复制到基础工作区中。

    tempobj = get_param(OutportHandle,'signalObject');

  2. 修改工作区中对象的属性。

    tempobj.coderinfo.customstorageclass ='ImportFromFile';tempobj.coderinfo.customAttributes.HeaderFile =.'myotherhdrfile.h';

  3. 重新连接信号对象的副本。

    set_param(OutportHandle,'signalObject',tempobj);清除Tempobj.

通过使用通过将参数数据组织成结构塑造存储类

此示例显示了如何使用塑造存储类以将块参数值组织成生成代码中的结构。您将存储类直接应用于模型中的各个数据项。

要在生成的代码中创建参数数据的自定义结构,请考虑在Simulink中创建相应的结构金宝app®。看将数据组织到生成代码中的结构中

  1. 创造ex_struct_param.模型三持续的块和三个外港块。

  2. 在这一点造型选项卡,单击模型数据编辑器

  3. 在“模型数据编辑器”中,选择参数标签。

  4. 在模型中,选择鞋面持续的堵塞。

  5. 在模型数据编辑器中,使用价值列设置常量值P1.

  6. 旁边P1.,单击“操作”按钮并选择创建

  7. 在“创建新数据”对话框中,设置价值金宝appsimulink.parameter(1.0)然后点击创建

    一种金宝appSimulink.Parameter.对象命名P1.出现在基础工作区中。

  8. 在“属性”对话框中P1., 点击好的

  9. 使用模型数据编辑器使用名为的参数对象设置其他常量值P2.(价值2.0) 和P3.(价值3.0)。

  10. 在模型数据编辑器中,设置改变视图下拉列表代码

  11. 点击显示/刷新其他信息按钮。

    数据表现在包含对应于新参数对象的行。

  12. 使用存储类应用存储类的列塑造到所有三个参数对象。

  13. 使用结构名称列将结构名称设置为my_struct.

  14. Ctrl + B.生成代码。

文件ex_struct_param.h.定义结构类型,my_struct_type.

/ *自定义存储类的类型定义:struct * / typedef struct my_struct_tag {real_t p1;real_t p2;real_t p3;} my_struct_type;

文件ex_struct_param.c.定义全局变量my_struct.

/ *自定义存储类定义:struct * / my_struct_type my_struct = {/ * p1 * / 1.0,/ * p2 * / 2.0,/ * p3 * / 3.0};

存储类限制

有关限制的信息,请参阅存储类限制

相关话题