嵌入式编码器词典
创建代码定义,用于控制模型数据和函数的代码生成
打开嵌入式编码器字典
要打开嵌入式编码器字典,请使用以下技术之一:
在代码映射编辑器中(参见代码映射编辑器),单击“嵌入式编码器字典”图标
.
在模型窗口中,对C代码选项卡上,选择设置>嵌入式编码器词典.
嵌入式编码器字典窗口显示存储在模型文件中的代码生成定义。如果模型链接到数据字典,该窗口还会显示存储在该数据字典或(如果适用的话)存储在引用字典中的定义。的源列指示每个定义存储的位置。
在Simulink中打开嵌入式编码器字典金宝app®数据字典,在模型资源管理器中模型层次结构面板:
在字典节点下,选择嵌入式编码器节点。
如果没有看到节点,右键单击字典节点并选择显示空区域.
在对话框窗格(右窗格)中,单击打开嵌入式编码器字典.
例子
创建并验证存储类
在模型中,创建一个存储类,它将内部模型数据(包括块状态)聚合到一个您可以控制其特征的结构中。然后,通过从模型生成代码来验证存储类。
打开示例模型
rtwdemo_roll
.rtwdemo_roll
如果模型没有在Code透视图中打开,则打开Embedded Coder应用程序并单击C代码选项卡。
模型图下面,在代码映射编辑器中,选择数据默认值选项卡。
单击嵌入式编码器字典图标
.嵌入式编码器字典窗口显示存储在模型文件中的代码生成定义。
在“嵌入式编码器字典”窗口中,单击添加.
选择出现在列表底部的新存储类,
StorageClass1
.在右侧的“属性检查器”窗格中,设置该表中列出的属性值。财产 价值 的名字 InternalStruct
头文件 internalData_ R.h美元
定义文件 美元internalData_阻容
存储类型 结构化
结构特性>类型名称 internalData_T_ M美元
结构特性>实例名 internalData_ M美元
在做出更改之后,在底部窗格中,验证伪代码预览是否反映了您所期望的结果。
返回到代码映射编辑器。选择内部数据行和集存储类来
InternalStruct
.在“配置参数”对话框中,单击代码生成>代码的位置窗格中,设置文件打包格式来
模块化
.生成的代码。
在Simuli金宝appnk Editor Code视图中,打开并检查该文件
internalData_rtwdemo_roll.h
.该文件定义了结构类型internalData_T_
,其字段表示模型中的块状态。/*存储类'InternalStruct',用于系统'<根>' */类型定义结构{real32_T FixPtUnitDelay1_DSTATE;/* '
/FixPt Unit Delay1' */ real32_T Integrator_DSTATE;/* ' /Integrator' */ int8_T Integrator_PrevResetState;/* ' /Integrator' */} internalData_T_; 该文件还声明了一个名为
internalData_
./*存储类'InternalStruct' */ extern internalData_T_ internalData_;
打开并检查该文件
internalData_rtwdemo_roll.c
.该文件为。分配内存internalData_
./*存储类'InternalStruct' */ internalData_T_
创建功能定制模板
使用函数模板,您可以指定一个规则来管理生成的入口点函数的名称。这种技术有助于在具有许多入口点函数的模型中节省时间和维护工作,例如出口函数模型或多速率多任务模型。
这个例子展示了如何创建指定命名规则的函数模板func_ N_ R美元
.$ N
每个生成的函数的基名和$ R
为Simulink模型的名称。金宝app
打开示例模型
rtwdemo_mrmtbb
.更新框图。这个多任务模型有两个执行速率,因此生成的代码包含两个相应的入口点函数。
在模型中,设置模型配置参数系统目标文件来
ert.tlc
.要使用函数定制模板,必须使用基于ert的系统目标文件。在Simuli金宝appnk编辑器中,启用代码透视图模式并打开嵌入式编码器字典。
在嵌入式编码器字典中,在功能定制模板选项卡上,单击添加.
对于新函数模板,设置以下属性:
的名字来
myfunction
.函数名来
func_ N_ R美元
.
在进行更改之后,验证伪代码预览是否反映了您所期望的结果。
在功能默认值选项卡,用于初始化和终止而且执行行,设置功能定制模板来
myfunction
.生成的代码。
在Code透视图右侧的Code视图窗格中,打开并检查该文件
rtwdemo_mrmtbb.c
.该文件定义了两个执行函数,func_step0_rtwdemo_mrmtbb
而且func_step1_rtwdemo_mrmtbb
,其名称符合您在函数模板中指定的规则。
创建内存区
有关显示如何创建内存部分的示例,请参见通过插入语法在内存中放置控制数据和函数.
创建用于静态和动态初始化数据的存储类
这个例子展示了如何创建一个存储类,将全局变量定义和声明放在文件名依赖于模型名称的文件中。您可以创建存储类的两个副本,以便使用一个副本作为参数数据(数据类别)模型参数)及一份载有其他资料的副本。
通常,生成的代码在任何函数之外静态初始化参数数据,并在模型初始化函数中动态初始化其他数据。在使用自定义存储类设计器或嵌入式编码器字典创建存储类时,可以设置数据初始化属性来指定初始化机制。
在嵌入式编码器字典中,必须对每个存储类进行选择静态
或动态
.考虑为参数数据创建存储类的一个副本(静态
)及其他资料副本一份(动态
).
创建存储类
开放示例模型
rtwdemo_roll
.如果C代码选项卡不可见,打开嵌入式编码器应用程序并单击C代码选项卡。
在模型图下面的代码映射编辑器中,单击嵌入式编码器字典图标。
在“嵌入式编码器字典”中,单击添加.
对于新的存储类,设置以下属性:
的名字来
SigsStates
头文件来
R_my_data.h美元
定义文件来
R_my_data.c美元
默认情况下,数据初始化属性设置为
动态
,这意味着存储类适合与信号、状态和数据存储一起使用。在进行更改之后,验证伪代码预览是否反映了您所期望的结果。
点击重复的.一个新的存储类,
SigsStates_copy
,出现了。对于新的存储类,设置以下属性:
的名字来
参数个数
数据初始化来
静态
在进行更改之后,验证伪代码预览是否反映了您所期望的结果。
应用存储类并生成代码
返回到代码映射编辑器。
在数据默认值选项卡,用于模型参数行,在存储类列,选择
参数个数
.为内部数据行,设置存储类来
SigsStates
.在模型中配置一些参数数据元素,以便优化不会从生成的代码中消除它们。打开模型数据编辑器。
选择参数选项卡。
在模型中,导航到
BasicRollMode
子系统。更新框图。现在,数据表包含与模型使用的工作空间变量对应的行。
旁边是内容过滤框,激活使用选择过滤器按钮。
在模型中,选择这三个获得块。
更新图表。
在模型数据编辑器中,在数据表中,选择与变量对应的三行
dispGain
,intGain
,rateGain
在模型工作区中。对于每个变量,在存储类列,选择
转换为参数对象
.模型数据编辑器将工作区变量转换为
金宝app仿真软件。参数
对象。新对象使用存储类模型的默认
,这意味着它们获得您指定的默认存储类模型参数在代码映射编辑器中。在“配置参数”对话框中,单击代码生成>代码的位置窗格中,设置文件打包格式来
模块化
.生成的代码。
在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 disgain = 0.75F;real32_T intGain = 0.5F;real32_T rateGain = 2.0F;
请参阅包中的代码生成定义
您可以配置嵌入式编码器字典以引用存储在包中的代码生成定义(参见创建代码定义以覆盖默认设置).然后,在代码映射编辑器中可以选择这些定义。在本例中,配置嵌入式编码器字典rtwdemo_roll
以引用存储在内置示例包中的定义ECoderDemos
.
打开嵌入式编码器字典
rtwdemo_roll
.有关说明,请参见创建并验证存储类.在“嵌入式编码器字典”窗口中,单击管理包.
在“管理包”对话框中,单击刷新.中出现更多选项时再进行等待选择包下拉列表。
集选择包来
ECoderDemos
并点击负载.在“嵌入式编码器字典”窗口中,在存储类选项卡中定义的存储类
ECoderDemos
包中。现在,在rtwdemo_roll
的代码映射编辑器中选择这些存储类数据默认值选项卡。卸载包时,在“管理包”对话框中选择选择包下拉列表,单击卸载.
通过使用在模型之间共享代码生成定义金宝app数据字典
有关展示如何通过使用数据字典在模型之间共享代码生成定义的示例,请参见在模型之间共享嵌入式编码器字典定义.
在共享编码器字典中配置默认代码映射
有关演示如何在共享嵌入式编码器字典中配置默认代码映射的示例,请参见在共享字典中配置默认代码映射.
相关的例子
参数
这些属性出现在“嵌入式编码器字典”窗口的“属性检查器”窗格中。在表中,一些属性显示为列,以方便进行批处理编辑。
存储类
的名字
—存储类名称
StorageClass1
(默认)|文本
存储类的名称。该名称在字典中的存储类中必须是唯一的。
有关Simulink提供的内置和示例存储类的列表,请参见金宝app为控制生成代码中的数据表示选择存储类.
描述
-存储类的用途和功能
文本
可用于描述存储类的用途和功能的自定义文本。
源
-存储类定义的位置
文本
此属性是只读的。
存储类定义的位置。
内置的
-由Simulink提供。金宝app模型名称——在Simulink模型中定义。金宝app
字典名称——在Simulink数据字典中定义金宝app什么是数据字典?(金宝app模型))。
包名——在simulink包或自定义包中定义(参见金宝app使用自定义存储类设计器创建存储类).
数据访问
-访问数据的规范
直接
(默认)|函数
规范来访问与模型关联的数据。直接查阅资料(直接
)或通过定制得到
而且集
函数(函数
).有关更多信息,请参见使用嵌入式编码器字典中的存储类通过函数访问数据.
依赖关系
将此属性设置为
函数
:集数据范围来
进口
.表示不能指定多实例属性。
启用这些属性:
访问模式
允许访问
Getter的名称
Setter名称
禁用保留数组尺寸财产。若要在生成的代码中保留多维数组的维度,请设置数据访问来
直接
.
数据范围
-生成数据定义的规范
出口
(默认)|进口
生成的代码定义数据的规范(出口
)或输入(进口
)来自外部代码的数据定义。内置存储类和包中的存储类(如Simulink)可以使用其他作用域选项,例如金宝app文件
.
依赖关系
将此属性设置为
进口
:禁用定义文件.要在构建过程中包含您的外部源代码文件,请使用模型配置参数。示例请参见配置数据接口.
表示您不能设置头文件来
新罕布什尔州美元
,不过你可以用$ N
令牌。
将此属性设置为
出口
,您必须使用其中一个代币$ N
或$ R
的价值头文件.
头文件
—声明数据的头文件名称
新罕布什尔州美元
(默认)|文本
声明数据的头文件的名称,指定为名称或命名规则。命名规则包括文本和令牌的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型名称 |
$ N |
关联数据元素的名称 |
G美元 |
存储类名称 |
你美元 |
中所述的为模型指定的用户令牌文本标识符格式控制 |
依赖关系
如果你设置数据范围来
出口
,您必须使用其中一个代币$ R
或$ N
在这个属性的值中。如果你设置数据范围来
进口
时,不能将此属性的值设置为新罕布什尔州美元
,但您可以使用$ N
令牌。
访问模式
-通过函数访问数据的规范
价值
(默认)|指针
允许访问
-允许通过函数访问数据的规范
读/写
(默认)|只读
|只写
允许读写的存储类的规范(读/写
),只读(只读
),或只写(只写
)查阅资料。
依赖关系
此属性仅在设置时启用数据访问来函数
.
Getter的名称
-公司名称得到
获取相关数据的函数
get_ N M美元
(默认)|文本
机构名称得到
获取关联数据的函数,指定为名称或命名规则。命名规则包括文本和令牌的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ N |
相关数据元素的名称(必选) |
$ R |
根模型名称 |
M美元 |
损坏确保惟一性的文本 |
你美元 |
用户令牌文本。看到标识符格式控制. |
依赖关系
此属性仅在设置时启用数据访问来函数
.
Setter名称
-公司名称集
修改关联数据的函数
set_ N M美元
(默认)|文本
机构名称集
函数获取作为名称或命名规则指定的修改数据。命名规则包括文本和令牌的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ N |
相关数据元素的名称(必选) |
$ R |
根模型名称 |
M美元 |
损坏确保惟一性的文本 |
你美元 |
用户令牌文本。看到标识符格式控制. |
依赖关系
此属性仅在设置时启用数据访问来函数
.
对单实例和多实例数据使用不同的属性设置
-指定单独存储设置的规范
从
(默认)|在
类中指定的存储设置的存储类规范单实例存储类中指定的存储设置多实例存储部分。当您将存储类应用于数据项时,Embedded Coder Dictionary将根据数据的类型和模型引用层次结构中的模型的上下文来确定它是单实例存储类还是多实例存储类。
依赖关系
选择此属性启用这些节单实例存储而且多实例存储.的属性存储类型,类型名称,实例名出现在单实例存储而且多实例存储部分。
存储类型
-将数据聚合为结构的规范
非结构化
(默认)|结构化
规范将使用存储类的数据聚合到生成代码中的结构中。每个数据元素都作为结构的一个字段出现在代码中。要创建一个结构,使用结构化
.
依赖关系
将此属性设置为结构化
使类型名称而且实例名.
类型名称
—结构类型名称
R N G M美元美元
(默认)|文本
生成代码中结构类型的名称,作为名称或命名规则指定。命名规则包括文本和令牌的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型名称 |
$ N |
关联函数的基名称,例如一步 |
G美元 |
存储类名称 |
你美元 |
中所述的为模型指定的用户令牌文本标识符格式控制 |
M美元 |
如有必要,插入名称篡改文本以避免名称冲突 |
依赖关系
设置存储类型来结构化
启用此属性。
实例名
-结构变量名称
N G美元美元
(默认)|文本
生成代码中的结构变量的名称,作为名称或命名规则指定。命名规则包括文本和令牌的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型名称 |
$ N |
关联函数的基名称,例如一步 |
G美元 |
存储类名称 |
你美元 |
中所述的为模型指定的用户令牌文本标识符格式控制 |
M美元 |
如有必要,插入名称篡改文本以避免名称冲突 |
依赖关系
设置存储类型来结构化
启用此属性。
数据初始化
—如何初始化数据
动态
(默认)|静态
|没有一个
指定生成的代码初始化数据。
动态
-生成的代码初始化数据作为模型初始化入口点函数的一部分。静态
生成的代码在为数据定义和分配内存的同一语句中初始化数据。赋值语句出现在.c
或. cpp
源文件,在函数外部。没有一个
—生成的代码不初始化数据。
依赖关系
如果您选择常量,您不能将此属性设置为
动态
.将此属性设置为
动态
禁用常量.
记忆的部分
-在内存中分配数据的位置
没有一个
(默认)|现有内存段
内存中分配数据的位置,指定为存在于嵌入式编码器字典中的内存节记忆的部分选项卡。有关内存部分的信息,请参见通过插入语法在内存中放置控制数据和函数.
保留数组尺寸
-保留多维数组尺寸的规范
从
(默认)|在
存储类的规范,以在生成的代码中保存多维数组的维度。有关更多信息,请参见在生成的代码中保留多维数组的维度.
常量
-适用的规格常量
限定符
从
(默认)|在
应用常量
数据的限定符。
依赖关系
如果选择此属性,则无法进行设置数据初始化来
动态
.设置数据初始化来
动态
禁用此属性。
挥发性
-适用的规格挥发性
限定符
从
(默认)|在
应用挥发性
数据的限定符。
其他限定符
-应用自定义限定符的规范
文本
规范向数据应用自定义限定符。例如,一些内存架构支持限定符金宝app远
而且巨大的
.
不使用此属性来应用关键字静态
.相反,使用内置存储类FileScope
,您不能用代码映射编辑器应用它。看到为控制生成代码中的数据表示选择存储类.
参数
—是否允许使用模型参数
从
(默认)|在
指示是否允许使用带有模型参数的存储类的规范。
依赖关系
设置数据初始化来
静态
启用此属性。设置数据初始化来
动态
禁用此属性。若要设置此属性的值,请设置数据初始化来
没有一个
.
信号
-是否允许使用模型信号
在
(默认)|从
指示是否允许使用带有模型信号的存储类的规范。
依赖关系
设置数据初始化来
动态
启用此属性。设置数据初始化来
静态
禁用此属性。若要设置此属性的值,请设置数据初始化来
没有一个
.
功能定制模板
的名字
—函数模板名称
FunctionTemplate1
(默认)|文本
模板名称。该名称在字典中的函数模板中必须是唯一的。Embedded Coder提供了该表中列出的内置模板。
模板 | 描述 |
---|---|
ModelFunction |
在代码映射编辑器中,用于初始化、执行、终止和重置的入口点函数(参见配置函数的默认代码生成) |
UtilityFunction |
在代码映射编辑器中,用于共享实用程序函数(参见配置函数的默认代码生成) |
描述
-函数模板的目的和功能
文本
可用于描述函数模板的目的和功能的自定义文本。
源
-函数模板定义位置
文本
函数名
—生成的函数名称
R N美元
(默认)|文本
生成代码中的函数名称,作为命名规则指定。命名规则包括文本和令牌的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型名称 |
$ N |
关联函数的基名称,例如一步 |
你美元 |
中所述的为模型指定的用户令牌文本标识符格式控制 |
$ C |
对于共享实用程序函数,插入校验和以避免名称冲突 |
M美元 |
如有必要,插入名称篡改文本以避免名称冲突 |
记忆的部分
-在内存中分配功能的位置
没有一个
(默认)|现有内存段
位置来分配函数,指定为存在于嵌入式编码器字典中的内存节记忆的部分选项卡。有关内存部分的信息,请参见通过插入语法在内存中放置控制数据和函数.
记忆的部分
的名字
—内存段名称
文本
内存段的名称。该名称在字典中的内存部分中必须是唯一的。Embedded Coder提供了表中列出的内置内存部分。
记忆的部分 | 描述 |
---|---|
MemConst |
应用存储类型限定符常量 数据。 |
MemVolatile |
应用存储类型限定符挥发性 数据。 |
MemConstVolatile |
应用存储类型限定符常量 而且挥发性 数据。 |
描述
-记忆部分的用途和功能
文本
可用于描述内存部分的用途和功能的自定义文本。
源
-内存段定义的位置
文本
此属性是只读的。
内存段定义的位置。
模型名称——在Simulink模型中定义。金宝app
字典名称——在Simulink数据字典中定义金宝app什么是数据字典?(金宝app模型))。
包名——在simulink包或自定义包中定义(参见金宝app创建代码定义以覆盖默认设置).
评论
-注释插入到生成的代码中
文本
代码生成器与指定的语法或其他修饰一起包含的代码注释之前的声明而且发布声明.
之前的声明
-在数据或功能代码之前插入的代码
文本
要插入到内存部分中数据或函数的定义和声明之前的代码(如语法)。
当你设置语句包围来每个变量
,您可以使用令牌$ N
表示使用内存部分的每个变量或函数的名称。
发布声明
-在数据或功能代码之后插入的代码
文本
插入到内存部分中数据或函数的定义和声明之后的代码,如pragmas。
当你设置语句包围来每个变量
,您可以使用令牌$ N
表示使用内存部分的每个变量或函数的名称。
语句包围
-将数据和功能分开包装或分组包装的规范
每个变量
(默认)|变量组
插入代码语句的规范(之前的声明而且发布声明):
围绕每个变量和函数使用内存部分。选择
每个变量
.一次,在整个内存部分。生成的代码将变量和函数定义聚合到一个连续的代码块中,并用语句包围该代码块。选择
变量组
.
限制
在嵌入式编码器字典中创建的存储类或函数自定义模板不能使用从包中加载的内存段(如中所述)请参阅包中的代码生成定义).使用嵌入式编码器字典中定义的内存部分。
中无法创建代码生成定义
. mdl
模型文件。对于数据字典的嵌入式编码器字典中代码生成定义的其他限制(
.sldd
文件),请参阅部署代码生成定义.