主要内容

嵌入式编码字典

创建代码定义以控制模型数据和函数的代码生成

描述

嵌入式编码器字典是一个用于创建自定义代码定义的图形界面。通过在模型中应用这些定义,您和您的用户可以生成默认情况下符合特定软件体系结构的代码。例如,您可以创建自己的存储类,您和您的用户可以在默认情况下将其应用于模型数据类别(如根级输入),或应用于单个数据元素(如参数)。

你可以创建以下类型的代码定义:

  • 存储类,控制为模型数据生成的代码。

  • 函数定制模板,它控制模型入口点函数的命名,例如模型_step.模板还将内存部分应用于入口点函数。

  • 内存部分,控制数据和函数在内存中的位置。生成的代码包括自定义修饰,例如您指定其语法的pragmas。

有关创建代码生成定义的一般信息,请参见为软件架构定义存储类、内存段和函数模板

嵌入式编码器®Dictionary为每种类型的代码定义提供了一个选项卡。在每个选项卡中,配置代码定义的属性。使用该表可以配置属性并并排比较定义。若要访问表中未出现的属性,请使用属性检查器。要在配置属性时验证结果,请使用伪代码预览。

您可以使用Code Mappings编辑器将在字典中创建的定义应用到建模元素(请参阅配置数据元素和函数类别的默认C代码生成).要创建可以在代码映射编辑器之外使用的存储类和内存段,请使用自定义存储类设计器(请参阅为外部数据对象创建代码定义).

打开嵌入式编码器字典

  • 控件上的模型窗口中打开嵌入式编码器字典C代码选项卡上,选择代码接口>嵌入式编码字典

    嵌入式编码器字典窗口显示存储在模型文件中的代码生成定义。如果模型链接到数据字典,窗口还会显示存储在该数据字典或(如果适用)引用字典中的定义。的来源列指示每个定义存储的位置。

  • 在Simulink中打开嵌入式编码器字典金宝app®数据字典,在模型资源管理器中模型层次结构窗格:

    1. 在字典节点下,选择嵌入式编码器节点。

      如果没有看到该节点,右键单击字典节点并选择显示空节

    2. 对话框窗格(右侧窗格),单击打开嵌入式编码器字典

例子

创建和验证存储类

在模型中,创建一个存储类,该存储类聚合内部模型数据,包括块状态,进入您可以控制其特征的结构。然后,通过从模型生成代码来验证存储类。

  1. 打开示例模型rtwdemo_roll

    rtwdemo_roll

  2. 如果模型不能在Embedded Coder应用程序中打开,则打开应用程序并单击C代码选项卡。

  3. C代码选项卡上,选择代码接口>嵌入式编码字典.嵌入式编码器字典窗口显示存储在模型文件中的代码生成定义。

  4. 在“嵌入式编码器字典”窗口中,单击添加

  5. 选择出现在列表底部的新存储类,StorageClass1.在属性检查器窗格中,设置此表中列出的属性值。

    财产 价值
    的名字 InternalStruct
    头文件 internalData_ R.h美元
    定义文件 美元internalData_阻容
    存储类型 结构化
    结构特性>类型名称 internalData_T_ M美元
    结构特性>实例名 InternalData_ $ M.

    在进行更改之后,在底部窗格中,验证伪代码预览是否反映了您所期望的内容。

  6. 返回到模型编辑器。要打开代码映射编辑器,请在画布下方双击代码映射。在数据默认值标签,展开信号部分。选择信号、状态和内部数据行和设置存储类InternalStruct

  7. 在“配置参数”对话框中,单击代码生成>代码的位置窗格中,设置文件的包装格式模块化

  8. 生成的代码。

  9. 在Simuli金宝appnk编辑器代码视图中,打开并检查文件internalData_rtwdemo_roll.h.该文件定义了结构类型internalData_T_,其字段表示模型中的块状态。

    /*存储类'InternalStruct', for system '' */ typedef struct {real32_T FixPtUnitDelay1_DSTATE;/* '/FixPt Unit Delay1' */ real32_T Integrator_DSTATE;/* '/Integrator' */ int8_T integrator_preresetstate;/* '/Integrator' */} internalData_T_;

    该文件还声明了一个名为internalData_

    /*存储类'InternalStruct' */ extern internalData_T_ internalData_;

  10. 打开并检查文件internalData_rtwdemo_roll.c.文件分配内存internalData_

    / *存储类'InternalStruct'* / InternalData_t_ InternalData_;

创建功能自定义模板

使用函数模板,您可以指定一个规则来管理生成的入口点函数的名称。这种技术有助于节省具有许多入口点函数的模型的时间和维护工作,例如出口函数模型或多速率、多任务模型。

此示例显示如何创建指定命名规则的函数模板func_ $ n_ $ r$ N每个生成函数的基名和$ R是Simulink模型的名称。金宝app

  1. 打开示例模型rtwdemo_mrmtbb

  2. 更新框图。这个多任务模型有两个执行速率,因此生成的代码包括两个相应的入口点函数。

  3. 在模型中,设置模型配置参数系统目标文件ert.tlc.要使用函数定制模板,必须使用基于ert的系统目标文件。

  4. 在Simuli金宝appnk编辑器中,打开嵌入式编码器应用程序并打开嵌入式编码器字典。

  5. 在嵌入式编码器字典中,在功能定制模板选项卡上,单击添加

  6. 对于新函数模板,设置以下属性:

    • 的名字myfunction

    • 函数名称func_ $ n_ $ r

    在进行更改之后,验证伪代码预览是否反映了您所期望的内容。

  7. 在模型窗口中,打开代码映射编辑器。在功能默认值选项卡,初始化和终止执行行,设置功能定制模板myfunction

  8. 生成的代码。

  9. 在Code视图中,打开并检查该文件rtwdemo_mrmtbb.c.该文件定义了两个执行函数,func_step0_rtwdemo_mrmtbbfunc_step1_rtwdemo_mrmtbb,其名称符合您在函数模板中指定的规则。

有关如何创建内存部分的示例,请参见通过插入Pragmas来控制数据和功能放置

创建用于静态和动态初始化数据的存储类

这个例子展示了如何创建一个存储类,将全局变量定义和声明放置在文件中,这些文件的名称依赖于模型名称。创建存储类的两个副本,这样就可以使用带有参数数据(数据类别)的一个副本模型参数)及其他资料各一份。

通常,生成的代码静态地初始化参数数据,在任何功能之外,并在模型初始化函数中动态地初始化其他数据。使用自定义存储类设计器或嵌入式编码器字典创建存储类时,您将设置数据初始化属性指定初始化机制。

在嵌入式编码器字典中,对于每个存储类,必须选择静态动态初始化。考虑为参数数据创建一个存储类的副本(静态)及其他资料副本一份(动态).

创建存储类
  1. 打开示例模型rtwdemo_roll

  2. 如果C代码选项卡未打开,打开嵌入式编码器应用程序,然后单击C代码选项卡。

  3. 选择代码接口>嵌入式编码字典

  4. 在“嵌入式编码器字典”中,单击添加

  5. 对于新的存储类,设置以下属性:

    • 的名字SigsStates

    • 头文件$ r_my_data.h.

    • 定义文件$ r_my_data.c.

    • 数据初始化动态

    在进行更改之后,验证伪代码预览是否反映了您所期望的内容。

  6. 点击复制.一个新的存储类,SigsStates_copy,出现了。

  7. 对于新的存储类,设置以下属性:

    • 的名字参数

    • 数据初始化静态

    验证伪代码预览是否反映了您的期望。

应用存储类并生成代码
  1. 在模型中,打开Code Mappings编辑器。在模型画布下面,双击代码映射- C

  2. 数据默认值选项卡,参数>模型参数行,在存储类列,选择参数

  3. 信号>信号、状态和内部数据行,集存储类SigsStates

  4. 在模型中配置一些参数数据元素,以便优化不会从生成的代码中删除这些元素。在建模选项卡上,单击设计>模型的工作空间

  5. 在模型资源管理器中,在中间窗格上,选择与变量对应的三行dispGainintGain,rateGain在模型工作区中。

  6. 右键单击其中一行并单击转换为参数对象.模型数据编辑器将工作区变量转换为金宝app仿真软件。参数对象。

  7. 在参数所在行中dispGain,在存储类列,单击配置.的模型窗口突出显示该行dispGain参数。

  8. 对于每个变量,在存储类列,选择默认值:模型参数,这意味着它们获取您指定的默认存储类模型参数

  9. 在“配置参数”对话框中,单击代码生成>代码的位置窗格中,设置文件的包装格式模块化

  10. 生成的代码。

  11. 在Code视图中,打开并检查文件RTWDEMO_ROLL_MY_DATA.C.RTWDEMO_ROLL_MY_DATA.H..这些文件定义并声明与参数对象和一些块状态相对应的全局变量,例如积分商块的BasicRollMode子系统。

    / *存储类'sigsstates'* / real32_t rtfixptunitdelay1_dstate;REAL32_T RTINTEGRATOR_DSTATE;INT8_T RTINTEGRATOR_PREVRESETSTATE;/ *存储类'Params'* / Real32_t Diemgain = 0.75f;Real32_t Intgain = 0.5F;Real32_t Rategain = 2.0f;

请参阅包中的代码生成定义

您可以配置嵌入式编码器字典以引用存储在包中的代码生成定义(请参阅为外部数据对象创建代码定义).然后,这些定义将出现在Code Mappings编辑器中供选择。在这个例子中,您配置了嵌入式编码器字典rtwdemo_roll引用存储在内置示例包中的定义ECoderDemos

  1. 打开嵌入式编码器字典rtwdemo_roll.说明,请参阅创建和验证存储类

  2. 在“嵌入式编码器字典”窗口中,单击管理包

  3. 在“Manage Packages”对话框中,单击刷新.直到更多选项出现在选择包下拉列表。

  4. 选择包ECoderDemos并点击负载

    在嵌入式编码器字典窗口中,在存储类选项卡中定义的存储类ECoderDemos包中。现在,在rtwdemo_roll,您可以在代码映射编辑器中选择这些存储类数据默认值选项卡。

  5. 要卸载软件包,请在“管理软件包”对话框中选择选择包下拉列表并单击卸载

有关如何使用数据字典在模型之间共享代码生成定义的示例,请参见在模型之间共享嵌入式编码器字典定义

有关如何在共享嵌入式编码器字典中配置默认代码映射的示例,请参见在共享字典中配置默认代码映射

相关的例子

参数

这些属性出现在属性检查器窗格中的内容。在表中,一些属性显示为列,以方便批量编辑。

存储类

存储类的名称。该名称在字典中的存储类中必须是唯一的。

有关Simulink提供的内置存储类和示例存储类的列表,请参见金宝app选择存储类以控制生成代码中的数据表示

可用于描述存储类的目的和功能的自定义文本。

此属性是只读的。

存储类定义的位置。

访问与模型关联的数据的规范。直接查阅资料(直接),通过可定制的得到函数(函数),或使用指针(指针).有关更多信息,请参见使用嵌入式编码器字典中的存储类通过函数访问数据

依赖关系

  • 将此属性设置为函数指针

    • DataScope进口

    • 意味着您不能指定多实例属性。

    • 设置PreserveDimensions财产.若要在生成的代码中保留多维数组的维度,请设置DataAccess直接

此外,将此属性设置为函数使这些属性:

  • AccessMode

  • AllowedAccess

  • GetFunctionName

  • SetFunctionName

生成的代码定义数据的规范(出口)或进口(进口)从外部代码的数据定义。像Simulink这样的包中的内置存储类和存储类可以使用其他作用域选项,例如金宝app文件

依赖关系

  • 将此属性设置为进口

    • 禁用定义文件.要在构建过程中包含外部源代码文件,请使用模型配置参数。例如,看到配置数据接口

    • 表示无法设置头文件新罕布什尔州美元,虽然你可以使用$ N令牌。

  • 将此属性设置为出口,则必须使用其中一个令牌$ N$ R价值头文件

声明数据的头文件的名称,指定为名称或命名规则。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ R 根模型名称
$ N 关联数据元素的名称
G美元 存储类名称
你美元 您为模型指定的用户令牌文本,如标识符的格式控制

依赖关系

  • 如果你设置数据范围出口,则必须使用其中一个令牌$ R$ N在这个属性的价值。

  • 如果你设置数据范围进口,则无法将此属性的值设置为新罕布什尔州美元,但你可以使用$ N令牌。

定义数据的源文件的名称,指定为名称或命名规则。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ R 根模型名称
$ N 关联数据元素的名称
G美元 存储类名称
你美元 您为模型指定的用户令牌文本,如标识符的格式控制

依赖关系

环境数据范围进口禁用定义文件.要在构建过程中包含外部源代码文件,请使用模型配置参数。例如,看到配置数据接口

规范存储类通过使用函数访问与模型关联的数据价值指针.有关更多信息,请参见使用嵌入式编码器字典中的存储类通过函数访问数据

依赖关系

此属性仅在设置时启用数据访问函数

存储类的规范允许读写(读/写), 只读 (只读),或只写(只写)存取资料。

依赖关系

此属性仅在设置时启用数据访问函数

的名字得到函数,获取作为名称或命名规则指定的关联数据。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ N 关联数据元素的名称(必需)
$ R 根模型名称
M美元 Mangle文本,确保唯一性
你美元 用户令牌的文本。看到标识符的格式控制

依赖关系

此属性仅在设置时启用数据访问函数

的名字函数,获取作为名称或命名规则指定的修改数据。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ N 关联数据元素的名称(必需)
$ R 根模型名称
M美元 Mangle文本,确保唯一性
你美元 用户令牌的文本。看到标识符的格式控制

依赖关系

此属性仅在设置时启用数据访问函数

属性中指定的存储设置,以便存储类使用其中之一单实例存储您指定的部分或存储设置多实例存储部分。当您将存储类应用到数据项时,Embedded Coder Dictionary根据数据类型和模型引用层次结构中的模型上下文来确定它是单实例存储类还是多实例存储类。

依赖关系

选择此属性允许这些属性单实例存储多实例存储.的属性存储类型类型名称,实例名出现在单实例存储多实例存储部分。

规范将使用存储类的数据聚合到生成的代码中的结构中。每个数据元素都作为结构的一个字段出现在代码中。创建一个结构,使用结构化

依赖关系

将此属性设置为结构化启用类型名称实例名

生成代码中结构类型的名称,作为名称或命名规则指定。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ R 根模型名称
$ N 关联函数的基名,例如一步
G美元 存储类名称
你美元 您为模型指定的用户令牌文本,如标识符的格式控制
M美元 如果需要,请插入名称 - 漫画文本以避免名称碰撞

依赖关系

环境存储类型结构化使这个属性。

生成的代码中的结构变量的名称,指定为名称或命名规则。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ R 根模型名称
$ N 关联函数的基名,例如一步
G美元 存储类名称
你美元 您为模型指定的用户令牌文本,如标识符的格式控制
M美元 如果需要,请插入名称 - 漫画文本以避免名称碰撞

依赖关系

环境存储类型结构化使这个属性。

说明生成的代码初始化数据。

  • 汽车—生成的代码静态初始化参数数据,动态初始化信号和状态数据。

  • 动态-生成的代码初始化数据,作为模型初始化入口点函数的一部分。

  • 静态- 生成的代码初始化与数据定义和分配数据的同一语句中的数据。赋值语句显示在a的顶部.c. cpp源文件,函数之外。

  • 没有任何—生成的代码不初始化数据。

依赖关系

  • 如果您选择常量,则不能将此属性设置为动态

  • 将此属性设置为动态禁用常量

控件上用于分配数据的内存位置,指定为存在于嵌入式编码器字典中的内存段记忆的部分选项卡。有关内存段的信息,请参见通过插入Pragmas来控制数据和功能放置

存储类规范以在生成的代码中保留多维数组的维度。有关更多信息,请参见在生成的代码中保留多维数组的维数

应用常量数据的限定符。

依赖关系

  • 如果选择此属性,则无法进行设置数据初始化动态

  • 环境数据初始化动态禁用此属性。

应用挥发性数据的限定符。

规范,以对数据应用自定义限定符。例如,一些内存体系结构支持限定符金宝app巨大的

不使用此属性应用关键字静态.相反,使用内置存储类FileScope,您不能使用代码映射编辑器应用它。看到选择存储类以控制生成代码中的数据表示

指示是否允许使用带模型参数的存储类的规范。

依赖关系

  • 环境数据初始化静态使这个属性。

  • 环境数据初始化动态禁用此属性。

  • 若要设置此属性的值,请设置数据初始化没有任何

指示是否允许使用带有模型信号的存储类的规范。

依赖关系

  • 环境数据初始化动态使这个属性。

  • 环境数据初始化静态禁用此属性。

  • 若要设置此属性的值,请设置数据初始化没有任何

功能定制模板

模板的名称。该名称在字典中的函数模板中必须是唯一的。Embedded Coder提供了表中列出的内置模板。

模板 描述
ModelFunction 在代码映射编辑器中,用于初始化、执行、终止和重置的入口点函数(请参阅配置函数的默认代码生成
实用功能 在代码映射编辑器中,用于共享实用程序函数(参见配置函数的默认代码生成

可用于描述函数模板的目的和功能的自定义文本。

此属性是只读的。

函数模板定义的位置。

  • 模型名称 - 在Simulink模型中定义。金宝app

  • 字典名称-在Simulink数据字典中定义(参见金宝app什么是数据字典?).

生成代码中函数的名称,作为命名规则指定。命名规则包括文本和标记的组合。该表中列出了有效的令牌。

令牌 描述
$ R 根模型名称
$ N 关联函数的基名,例如一步
你美元 您为模型指定的用户令牌文本,如标识符的格式控制
$ C 对于共享实用程序函数,插入校验和以避免名称冲突
M美元 如果需要,请插入名称 - 漫画文本以避免名称碰撞

内存中的位置分配函数,指定为嵌入式编码器字典中存在的内存部分记忆的部分选项卡。有关内存段的信息,请参见通过插入Pragmas来控制数据和功能放置

记忆的部分

内存段的名称。该名称在字典中的内存段中必须是唯一的。Embedded Coder提供了表中列出的内置内存部分。

记忆部分 描述
MemConst 应用存储类型限定符常量到数据。
MemVolatile 应用存储类型限定符挥发性到数据。
MemConstVolatile 应用存储类型限定符常量挥发性到数据。

可用于描述内存部分的目的和功能的自定义文本。

此属性是只读的。

内存段定义的位置。

代码生成器中包含的代码注释或您指定的其他修饰初级陈述发布声明

在内存部分中的数据或函数的定义和声明之前插入的代码(如pragmas)。

您可以使用令牌$ R表示使用内存部分的模型的名称。

当你设置时陈述周围每个变量,你可以使用令牌$ N表示使用内存段的每个变量或函数的名称。

在内存部分中的数据或函数的定义和声明之后插入的代码,如pragmas。

您可以使用令牌$ R表示使用内存部分的模型的名称。

当你设置时陈述周围每个变量,你可以使用令牌$ N表示使用内存段的每个变量或函数的名称。

指定插入代码语句(初级陈述发布声明):

  • 在使用内存段的每个变量和函数周围。选择每个变量

  • 有一次,在整个记忆区域。生成的代码将变量和函数定义聚集到一个相邻的代码块中,并用语句包围该代码块。选择组变量

限制

  • 在嵌入式编码器字典中创建的存储类或函数自定义模板不能使用从包加载的内存部分(如请参阅包中的代码生成定义).使用在嵌入式编码器字典中定义的内存段。

  • 您在嵌入的编码器字典中创建的存储类函数数据存储的存储类不支持数据访问。金宝app

  • 您无法在a中创建代码生成定义. mdl模型文件。

有关数据字典的嵌入式编码器字典中代码生成定义的其他限制(.sldd.文件),见部署代码生成定义

另请参阅

介绍了R2018a