创建代码定义,用于控制模型数据和函数的代码生成
控件上的模型窗口中打开嵌入式编码器字典C代码选项卡,选择代码接口>嵌入式编码词典.
嵌入式编码器字典窗口显示存储在模型文件中的代码生成定义。如果模型链接到数据字典,则窗口还将显示在该数据字典中存储的定义,或者如果适用,则在引用的字典中。这来源列表示存储每个清晰度的位置。
在Simulink中打开嵌入的编码器字典金宝app®数据字典,在模型资源管理器中模型层次结构窗格:
在字典节点下,选择嵌入式编码器节点。
如果看不到该节点,请右键单击字典节点并选择显示空节.
在对话框(右窗格)中,单击开放式嵌入式编码词典.
在模型中,创建一个存储类,该存储类聚合内部模型数据,包括块状态,进入您可以控制其特征的结构。然后,通过从模型生成代码来验证存储类。
打开示例模型rtwdemo_roll
.
rtwdemo_roll
如果模型未在嵌入式编码器应用程序中打开,请打开该应用程序并单击C代码标签。
上C代码选项卡,选择代码接口>嵌入式编码词典。嵌入式编码器字典窗口显示存储在模型文件中的代码生成定义。
在嵌入式编码器字典窗口中,单击添加.
选择列表底部显示的新存储类,存储类别1
。在右侧的“属性检查器”窗格中,设置此表中列出的属性值。
财产 | 价值 |
---|---|
名称 | 内部结构 |
标题文件 | 内部数据\uuu$R.h |
定义文件 | 内部数据(R.c.) |
存储类型 | 结构化 |
结构特性>键入名称 | InternalData_T_ $ M. |
结构特性>实例名 | InternalData_ $ M. |
在更改更改后,在底部窗格中,验证伪代码预览是否反映了您所期望的内容。
返回模型编辑器。要打开Canvas下方的代码映射编辑器,请双击代码映射。上数据默认值标签,展开信号部分。选择信号、状态和内部数据行和设置存储类到内部结构
.
在“配置参数”对话框中,单击代码生成>代码放置窗格中,设置文件的包装格式到模块化
.
生成代码。
在Simuli金宝appnk编辑器代码视图中,打开并检查文件内部数据\u rtwdemo\u 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_;
该文件还声明名为的全局结构变量内部数据_
.
/ *存储类'InternalStruct'* / extern InternalData_t_ InternalData_;
打开并检查文件InternalData_rtwdemo_roll.c..
.该文件分配内存内部数据_
.
/ *存储类'InternalStruct'* / InternalData_t_ InternalData_;
使用函数模板,您可以指定管理生成的入口函数的名称的规则。该技术有助于在具有许多入口点函数的模型中节省时间和维护工作,例如导出功能模型或多速率多任务模型。
此示例显示如何创建指定命名规则的函数模板func_ $ n_ $ r
.$ N
是每个生成函数的基名称,并且$ R
是Simulink模型的名称。金宝app
打开示例模型rtwdemo_mrmtbb
.
更新框图。该多任务模型具有两个执行速率,因此生成的代码包括两个相应的入口点函数。
在模型中,设置模型配置参数系统目标文件到ert.tlc
.要使用函数自定义模板,必须使用基于ert的系统目标文件。
在Simuli金宝appnk编辑器中,打开嵌入式编码器应用程序并打开嵌入式编码器字典。
在嵌入式编码器字典中,在功能定制模板选项卡上,单击添加.
对于新功能模板,请设置以下属性:
名称到myfunction
.
函数名称到func_ $ n_ $ r
.
进行更改后,验证伪代码预览是否反映了您的期望。
在模型窗口中,打开代码映射编辑器。上函数默认值选项卡,用于初始化和终止和执行行,集合功能定制模板到myfunction
.
生成代码。
在代码视图中,打开并检查文件RTWDEMO_MRMTBB.C.
.该文件定义了两个执行函数,func_step0_rtwdemo_mrmtbb.
和func_step1_rtwdemo_mrmtbb.
,其名称符合您在函数模板中指定的规则。
有关如何创建内存部分的示例,请参见通过插入Pragmas来控制数据和功能放置.
此示例显示如何创建存储类,该存储类将名称依赖于模型名称的文件中的全局变量定义和声明。您创建了两个存储类的副本,以便您可以使用一个副本与参数数据(数据类别模型参数)和一个与其他数据的副本。
通常,生成的代码静态地初始化参数数据,在任何功能之外,并在模型初始化函数中动态地初始化其他数据。使用自定义存储类设计器或嵌入式编码器字典创建存储类时,您将设置数据初始化属性指定初始化机制。
在嵌入式编码器字典中,对于每个存储类,您必须选择静止的
或动态
初始化。考虑为参数数据创建一个存储类的一个副本(静止的
)及其他资料副本一份(动态
).
打开示例模型rtwdemo_roll
.
如果是C代码选项卡未打开,打开嵌入式编码器应用程序,然后单击C代码标签。
选择代码接口>嵌入式编码词典
在嵌入式编码器字典中,单击添加.
对于新存储类,请设置这些属性:
名称到sigsstates.
标题文件到$ r_my_data.h.
定义文件到$ r_my_data.c.
默认情况下,数据初始化属性设置为动态
,这意味着存储类适合用于信号、状态和数据存储。
进行更改后,验证伪代码预览是否反映了您的期望。
点击复制.一个新的存储类,sigsstates_copy.
,出现。
对于新存储类,请设置这些属性:
名称到参数
数据初始化到静止的
进行更改后,验证伪代码预览是否反映了您的期望。
返回模型并打开代码映射编辑器。在模型画布下方,双击代码映射-C.
上数据默认值选项卡,用于参数>模型参数行,在存储类列,选择参数
.
为了信号>信号、状态和内部数据行,集存储类到sigsstates.
.
在模型中配置一些参数数据元素,以便优化不会从生成的代码中消除这些元素。上造型选项卡上,单击设计>模型工作空间.
在模型资源管理器中,在中心窗格中,选择与变量对应的三行dispGain
,intGain
, 和比特
在模型工作区中。
右键单击其中一个行,然后单击转换为参数对象
.模型数据编辑器将工作区变量转换为金宝appSimulink.Parameter.
对象。
在参数的行中dispGain
, 在里面存储类列,单击配置.的模型窗口突出显示该行dispGain
代码映射编辑器中的参数。
对于每个变量,在存储类列,选择默认值:模型参数
,这意味着它们获取您指定的默认存储类模型参数.
在“配置参数”对话框中,单击代码生成>代码放置窗格中,设置文件的包装格式到模块化
.
生成代码。
在代码视图中,打开并检查文件RTWDEMO_ROLL_MY_DATA.C.
和RTWDEMO_ROLL_MY_DATA.H.
.这些文件定义并声明与参数对象和一些块状态相对应的全局变量,例如积分商块的基本模式
子系统。
/ *存储类'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
.
打开嵌入式编码器字典rtwdemo_roll
。有关说明,请参阅创建和验证存储类.
在嵌入式编码器字典窗口中,单击管理包裹.
在“管理包”对话框中,单击刷新.等到更多选项出现在选择包下拉列表。
集选择包到ECoderDemos
然后点击加载.
在嵌入式编码器字典窗口中,在存储类选项卡中定义的存储类ECoderDemos
包裹。现在,在rtwdemo_roll
,您可以在代码映射编辑器中选择这些存储类数据默认值标签。
要卸载包,请在“管理包”对话框中,选择“包装”选择包下拉列表并单击卸载.
有关如何使用数据字典在模型之间共享代码生成定义的示例,请参见在模型之间共享嵌入式编码器字典定义.
有关如何在共享嵌入式编码器字典中配置默认代码映射的示例,请参见在共享字典中配置默认代码映射.
这些属性出现在嵌入式编码器字典窗口的属性检查器窗格中。在表中,某些属性显示为允许批量编辑的列。
存储类名称
- 存储类的名称存储类别1
(默认)|文本存储类的名称。该名称在字典中的存储类中必须是唯一的。
有关Simulink提供的内置存储类和示例存储类的列表,请参见金宝app选择存储类以控制生成代码中的数据表示.
描述
- 存储类的目的和功能您可以使用的自定义文本来描述存储类的目的和功能。
来源
- 存储类定义的位置此属性是只读的。
存储类定义的位置。
内置的
- 由Simulink提供。金宝app
模型名称 - 在Simulink模型中定义。金宝app
字典名称-在Simulink数据字典中定义(请参阅金宝app什么是数据字典?).
包名称 - 在Simulink包中或在自定义包中定义(请参阅金宝app使用自定义存储类设计器创建存储类).
数据访问
-访问数据的规范直接的
(默认)|作用
访问与模型关联的数据的规范。直接查阅资料(直接的
)或通过可定制的得到
和集
职能 (作用
).有关更多信息,请参阅使用嵌入式编码器字典中的存储类通过函数访问数据.
将此属性设置为作用
:
集数据范围到进口
.
意味着您无法指定多实例属性。
使这些属性:
访问模式
允许访问
Getter的名字
Setter的名称
禁用保留阵列尺寸要在生成的代码中保留多维数组的维度,请设置数据访问到直接的
.
数据范围
- 要生成数据定义的规范出口
(默认)|进口
生成的代码定义数据的规范(出口
)或进口(进口
)来自外部代码的数据定义。Simulink等软件包中内置存储类和存储类可以使用其他范围选项,例如金宝app文件
.
将此属性设置为进口
:
禁用定义文件.要在构建过程中包含外部源代码文件,请使用模型配置参数。例如,看到配置数据界面.
表示您无法设置标题文件到新罕布什尔州美元
,虽然你可以使用$ N
令牌。
将此属性设置为出口
,则必须使用其中一个令牌$ N
或$ R
价值标题文件.
标题文件
- 声明数据的头文件的名称新罕布什尔州美元
(默认)|文本声明数据的头文件的名称,指定为名称或命名规则。命名规则包括文本和标记的组合。此表中列出了有效标记。
令牌 | 描述 |
---|---|
$ R |
根模型的名称 |
$ N |
关联数据元素的名称 |
G美元 |
存储类的名称 |
你美元 |
您为模型指定的用户令牌文本,如标识符的格式控制 |
如果你设定数据范围到出口
,则必须使用其中一个令牌$ R
或$ N
在这个属性的价值。
如果你设定数据范围到进口
,则无法将此属性的值设置为新罕布什尔州美元
,但你可以使用$ N
令牌。
访问模式
-通过函数访问数据的规范价值
(默认)|指针
允许访问
-允许通过函数访问数据的规范读/写
(默认)|只读
|只写
存储类的规范允许读写(读/写
), 只读 (只读
),或只写(只写
)访问数据。
只有在您设置时才启用此属性数据访问到作用
.
Getter的名字
-名称得到
获取相关数据的函数get_ $ n $ m
(默认)|文本的名字得到
函数,用于获取指定为名称或命名规则的关联数据。命名规则包括文本和标记的组合。此表中列出了有效标记。
令牌 | 描述 |
---|---|
$ N |
关联数据元素的名称(必需) |
$ R |
根模型的名称 |
M美元 |
Mangle文本,确保唯一性 |
你美元 |
用户令牌文本。请参阅标识符的格式控制. |
只有在您设置时才启用此属性数据访问到作用
.
Setter的名称
-名称集
函数,用于修改关联的数据set_ N M美元
(默认)|文本的名字集
函数,获取作为名称或命名规则指定的修改数据。命名规则包括文本和标记的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ N |
关联数据元素的名称(必需) |
$ R |
根模型的名称 |
M美元 |
Mangle文本,确保唯一性 |
你美元 |
用户令牌文本。请参阅标识符的格式控制. |
只有在您设置时才启用此属性数据访问到作用
.
使用不同的属性设置单个实例和多实例数据
- 指定分配单独的存储设置离开
(默认)|在…上
存储类使用在中指定的存储设置的规范单实例存储您指定的部分或存储设置多实例存储部分。将存储类应用于数据项时,嵌入的编码器字典确定它是否是单个实例存储类或由数据类型的单实例存储类或多实例存储类,以及模型引用层次结构中的模型的上下文。
选择此属性允许这些属性单实例存储和多实例存储1.物业存储类型,键入名称, 和实例名出现在两个单实例存储和多实例存储部分。
存储类型
- 将数据汇总为结构的规范非结构化
(默认)|结构化
规范,将使用存储类的数据聚合到生成代码中的结构中。每个数据元素在代码中显示为结构的字段。若要创建结构,请使用结构化
.
将此属性设置为结构化
启用键入名称和实例名.
键入名称
- 结构类型的名称$ r $ n $ g $ m
(默认)|文本生成的代码中的结构类型的名称,指定为名称或命名规则。命名规则包括文本和标记的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型的名称 |
$ N |
关联函数的基名,例如步 |
G美元 |
存储类的名称 |
你美元 |
您为模型指定的用户令牌文本,如标识符的格式控制 |
M美元 |
如果需要,请插入名称 - 漫画文本以避免名称碰撞 |
环境存储类型到结构化
启用此属性。
实例名
- 结构变量的名称$N$G$M
(默认)|文本生成的代码中的结构变量的名称,指定为名称或命名规则。命名规则包括文本和标记的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型的名称 |
$ N |
关联函数的基名,例如步 |
G美元 |
存储类的名称 |
你美元 |
您为模型指定的用户令牌文本,如标识符的格式控制 |
M美元 |
如果需要,请插入名称 - 漫画文本以避免名称碰撞 |
环境存储类型到结构化
启用此属性。
数据初始化
—如何初始化数据动态
(默认)|静止的
|没有任何
规范生成的代码初始化数据。
动态
-生成的代码初始化数据,作为模型初始化入口点函数的一部分。
静止的
- 生成的代码初始化与数据定义和分配数据的同一语句中的数据。赋值语句显示在a的顶部.c
或.cpp.
源文件,在函数之外。
没有任何
- 生成的代码不会初始化数据。
如果你选择常量,您无法将此属性设置为动态
.
将此属性设置为动态
禁用常量.
记忆部分
- 用于分配数据的内存中的位置没有任何
(默认)|现有的内存部分内存中的位置分配数据,指定为嵌入式编码器字典中存在的内存部分记忆部分标签。有关内存部分的信息,请参阅通过插入Pragmas来控制数据和功能放置.
保留阵列尺寸
- 规范,以保持多维数组的维度离开
(默认)|在…上
存储类规范以在生成的代码中保留多维数组的维度。有关更多信息,请参阅在生成的代码中保持多维数组的维度.
常量
-应用规范const
限定者离开
(默认)|在…上
规范申请const
限定数据。
如果您选择此属性,则无法设置数据初始化到动态
.
环境数据初始化到动态
禁用此属性。
易挥发的
-应用规范易挥发的
限定者离开
(默认)|在…上
规范申请易挥发的
限定数据。
其他限定符
-应用自定义限定符的规范将自定义限定符应用于数据的规范。例如,某些内存体系结构支持限定符金宝app远的
和巨大的
.
请勿使用此属性应用关键字静态
.相反,使用内置存储类文件镜
,无法使用代码映射编辑器应用。请参阅选择存储类以控制生成代码中的数据表示.
参数
- 是否允许使用模型参数离开
(默认)|在…上
指示是否允许使用带有模型参数的存储类的规范。
环境数据初始化到静止的
启用此属性。
环境数据初始化到动态
禁用此属性。
若要设置此属性的值,请设置数据初始化到没有任何
.
信号
- 是否允许使用模型信号在…上
(默认)|离开
指示是否允许使用模型信号使用存储类。
环境数据初始化到动态
启用此属性。
环境数据初始化到静止的
禁用此属性。
若要设置此属性的值,请设置数据初始化到没有任何
.
名称
—函数模板名称functiontemplate1.
(默认)|文本模板的名称。名称在字典中的函数模板中必须是唯一的。嵌入式编码器提供此表中列出的内置模板。
模板 | 描述 |
---|---|
modelfunction. |
在代码映射编辑器中,用于初始化,执行,终止和重置的入学点函数(请参阅配置函数的默认代码生成) |
实用功能 |
在代码映射编辑器中,用于共享实用程序函数(请参见配置函数的默认代码生成) |
描述
- 功能模板的目的和功能可用于描述函数模板的目的和功能的自定义文本。
来源
- 功能模板定义的位置函数名称
- 生成函数的名称$R$N
(默认)|文本生成代码中的函数的名称,指定为命名规则。命名规则包括文本和标记的组合。该表中列出了有效的令牌。
令牌 | 描述 |
---|---|
$ R |
根模型的名称 |
$ N |
关联函数的基名,例如步 |
你美元 |
您为模型指定的用户令牌文本,如标识符的格式控制 |
$ C |
对于共享实用程序函数,插入校验和以避免名称冲突 |
M美元 |
如果需要,请插入名称 - 漫画文本以避免名称碰撞 |
记忆部分
- 用于分配功能的内存中的位置没有任何
(默认)|现有的内存部分内存中的位置分配函数,指定为嵌入式编码器字典中存在的内存部分记忆部分标签。有关内存部分的信息,请参阅通过插入Pragmas来控制数据和功能放置.
名称
- 内存部分的名称内存段的名称。该名称在字典中的内存段中必须是唯一的。Embedded Coder提供了表中列出的内置内存部分。
记忆部分 | 描述 |
---|---|
记忆常数 |
应用存储类型限定符const 到数据。 |
MemVolatile |
应用存储类型限定符易挥发的 到数据。 |
MemConstVolatile |
应用存储类型限定符const 和易挥发的 到数据。 |
描述
-内存部分的目的和功能您可以使用的自定义文本来描述内存部分的目的和功能。
来源
- 内存部分定义的位置此属性是只读的。
内存部分定义的位置。
模型名称 - 在Simulink模型中定义。金宝app
字典名称-在Simulink数据字典中定义(请参阅金宝app什么是数据字典?).
包名称 - 在Simulink包中或在自定义包中定义(请参阅金宝app为外部数据对象创建代码定义).
评论
-注释以插入生成的代码代码注释代码生成器包含与您指定的Pragmas或其他装饰品初级陈述和邮政声明.
初级陈述
—在数据或函数代码之前插入的代码在内存段中的数据或函数的定义和声明之前插入的代码,如pragmas。
您可以使用令牌$ R
表示使用内存部分的模型的名称。
当你设置时陈述周围到每个变量
,你可以使用令牌$ N
表示使用内存部分的每个变量或函数的名称。
邮政声明
- 要在数据或功能代码后插入的代码代码,如pragmas,以在内存部分中的数据或函数的定义和声明之后插入。
您可以使用令牌$ R
表示使用内存部分的模型的名称。
当你设置时陈述周围到每个变量
,你可以使用令牌$ N
表示使用内存部分的每个变量或函数的名称。
陈述周围
- 规范以单独或在组中包装数据和功能每个变量
(默认)|一组变量
指定插入代码语句(初级陈述和邮政声明):
在使用内存段的每个变量和函数周围。选择每个变量
.
生成的代码将变量和函数定义聚合成一个连续的代码块,并用语句包围该块。选择一组变量
.
在嵌入式编码器字典中创建的存储类或函数自定义模板不能使用从包加载的内存部分(如请参阅包中的代码生成定义).使用嵌入式编码器字典中定义的内存部分。
您无法在a中创建代码生成定义.mdl.
模型文件。
有关数据字典的嵌入式编码器字典中代码生成定义的其他限制(.sldd.
文件),见部署代码生成定义.