嵌入式编码器词典
创建代码定义,用于控制模型数据和函数的代码生成
描述
嵌入式编码器字典是一个用于创建自定义代码定义的图形界面。通过在模型中应用这些定义,您和您的用户可以生成默认情况下符合特定软件架构的代码。例如,您可以创建自己的存储类,您和您的用户可以在默认情况下将其应用于模型数据的类别(例如根级输入)。
你可以创建这些类型的代码定义:
存储类,它们控制为模型数据生成的代码。
函数定制模板,它控制模型入口点函数的命名,例如
.这些模板还将内存段应用到入口点函数。模型
_step内存段,它控制数据和函数在内存中的位置。生成的代码包括自定义装饰,比如您指定语法的pragmas。
嵌入式编码器字典为每种类型的代码定义提供了一个选项卡。在每个选项卡中,配置代码定义的属性。使用该表配置属性并并排比较定义。要访问未出现在表中的属性,请使用属性检查器。
您在字典中创建的定义可以通过在代码映射编辑器中配置模型范围的默认设置应用于模型元素为模型数据和函数类别配置默认代码生成).若要创建可在代码映射编辑器之外使用的存储类和内存段,请使用自定义存储类设计器(请参阅创建代码定义以覆盖默认设置).
有关创建代码生成定义的一般信息,请参见为软件架构定义存储类、内存段和功能模板.
打开嵌入式编码器字典
要打开模型使用的嵌入式编码器字典,请使用以下技术之一:
在代码映射编辑器中(请参阅代码映射编辑器),点击“嵌入式编码器字典”图标.
在模型窗口中,选择代码>C / c++代码>嵌入式编码器词典.
如果模型未链接到Simulink万博1manbetx®数据字典(见什么是数据字典?(万博1manbetxSimulink)),“嵌入式编码器字典”窗口显示存储在模型文件中的代码生成定义。如果模型链接到一个数据字典,该窗口将显示存储在该数据字典中或(如果适用的话)存储在引用字典中的定义。
要在“模型资源管理器”中打开Simulink数据字典中的嵌入式编码器字典万博1manbetx模型层次结构面板:
在字典节点下,选择嵌入式编码器节点。
如果没有看到该节点,右键单击字典节点并选择显示空部分.
在Dialog窗格(右侧窗格)中,单击打开嵌入式编码器字典.
例子
创建并验证自定义存储类
在模型中,创建一个存储类,它将内部模型数据(包括块状态)聚合到一个结构中,该结构的特征可以由您控制。然后,通过从模型生成代码来验证存储类。
打开示例模型
rtwdemo_roll
.rtwdemo_roll
在模型中,选择代码>C / c++代码>在代码透视图中配置模型.
在方框图下面代码的映射>数据默认值,单击“嵌入式编码器字典”图标。
因为
rtwdemo_roll
没有链接到Simulink数据字典,则万博1manbetx“嵌入式编码器字典”窗口将显示存储在模型文件中的代码生成定义。在“嵌入式编码器字典”窗口中,单击添加按钮。一个名为
StorageClass1
显示在列表的底部。选择新的存储类。在“嵌入式编码器字典”窗口的右侧,在“属性检查器”中,设置本表中列出的属性值。
财产 价值 的名字 InternalStruct
存储类型 结构化
头文件 internalData_ R.h美元
定义文件 美元internalData_阻容
结构特性>类型名称 internalData_T_ M美元
结构特性>实例名 internalData_ M美元
在模型中,在下面代码的映射>数据默认值,用于内部数据行,设置存储类来
InternalStruct
.从模型生成代码。
在代码生成报告中,下生成的代码>数据文件、检查
internalData_rtwdemo_roll.h
.文件定义结构类型internalData_T_
,其字段表示模型中的块状态。/*存储类'InternalStruct',用于系统'<根>' */ typedef struct {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_ internalData_;
创建功能定制模板
使用函数模板,您可以指定规则来管理生成的入口点函数的名称。这种技术有助于在具有许多入口点函数的模型中节省时间和维护工作,例如导出函数模型或多速率多任务模型。
此示例显示如何创建指定命名规则的函数模板func_ N_ R美元
.$ N
是每个生成的函数的基本名称和$ R
是Simulink模型的名称。万博1manbetx
打开示例模型
rtwdemo_mrmtbb
.更新框图。这个多任务模型有两种执行速率,因此生成的代码包括两个相应的入口点函数。
在模型中,设置配置参数>代码生成>系统目标文件来
ert.tlc
.要使用函数自定义模板,必须使用基于ert的系统目标文件。在模型中,进入代码透视图并打开嵌入式编码器字典。
在嵌入式编码器字典中,在功能定制模板选项卡,单击添加按钮。
对于新的函数模板,设置这些属性:
的名字来
myfunction
.函数名来
func_ N_ R美元
.
在模型的“代码映射编辑器”中功能默认值选项卡,用于初始化和终止而且执行行,设置功能定制模板来
myfunction
.从模型生成代码。
在代码生成报告中,检查
rtwdemo_mrmtbb.c
.该文件定义了两个执行函数,func_step_rtwdemo_mrmtbb0
而且func_step_rtwdemo_mrmtbb1
,它们的名称符合您在函数模板中指定的规则。
创建内存部分
有关显示如何创建内存部分的示例,请参见通过插入Pragmas控制数据和函数在内存中的位置.
创建用于参数和非参数数据的存储类
这个例子展示了如何创建一个存储类,将全局变量定义和声明放在文件名依赖于模型名的文件中。您可以创建存储类的两个副本,这样就可以使用一个带有参数数据的副本(数据类别)本地参数)和另一份非参数资料。
通常,生成的代码在任何函数之外静态初始化参数数据,并在模型初始化函数中动态初始化非参数数据。使用自定义存储类设计器或嵌入式编码器字典创建存储类时,可以设置数据初始化属性指定初始化机制。
在嵌入式编码器字典中,对于每个存储类,您必须选择其中之一静态
或动态
.考虑为参数数据创建存储类的一个副本(静态
)和一份非参数数据(动态
).
创建存储类
打开示例模型
rtwdemo_roll
.rtwdemo_roll
在模型中,选择代码>C / c++代码>在代码透视图中配置模型.
在方框图下面代码的映射,单击“嵌入式编码器字典”图标。
在“嵌入式编码器字典”中,单击添加按钮。
对于新的存储类,设置这些属性:
的名字来
SigsStates
头文件来
R_my_data.h美元
定义文件来
R_my_data.c美元
默认情况下,数据初始化属性设置为
动态
,这意味着存储类适合用于非参数数据。单击重复的按钮。一个新的存储类,
SigsStates_copy
,出现了。对于新的存储类,设置这些属性:
的名字来
参数个数
数据初始化来
静态
应用存储类并生成代码
在模型中,在下面代码的映射>数据默认值,用于本地参数行,在存储类列,选择
参数个数
.为内部数据行,设置存储类来
SigsStates
.在模型中配置一些参数数据元素,以便优化不会从生成的代码中消除它们。控件的下面,打开模型数据编辑器模型数据编辑器选项卡。
选择参数选项卡。
模型中,导航到
BasicRollMode
子系统。更新框图。现在,数据表包含了与模型使用的工作区变量相对应的行。
旁边是内容过滤框,激活使用选择筛选按钮。
在模型中,选择这三个获得块。
在“模型数据编辑器”的数据表中,选择与
dispGain
,intGain
,rateGain
模型工作区中的变量。中的每个变量存储类列,选择
转换为参数对象
.模型数据编辑器将工作区变量转换为
万博1manbetx仿真软件。参数
对象。新对象使用存储类模型的默认
,这意味着它们获取您指定的默认存储类本地参数在代码映射编辑器中。从模型生成代码。
在代码生成报告中,检查文件
rtwdemo_roll_my_data.c
而且rtwdemo_roll_my_data.h
.文件定义并声明了与参数对象和某些块状态(如积分器块BasicRollMode
子系统。/*存储类'SigsStates' */ real32_T rtwdemo__FixPtUnitDelay1_DSTATE;real32_T rtwdemo_roll_Integrator_DSTATE;int8_T rtwde_Integrator_PrevResetState;/*存储类Params */ real32_T disgain = 0.75F;real32_T intGain = 0.5F;real32_T rateGain = 2.0F;
通过使用共享模型之间的代码生成定义万博1manbetx数据字典
有关如何使用数据字典在模型之间共享代码生成定义的示例,请参见在模型之间共享嵌入式编码器字典定义.
参考包中的代码生成定义
您可以配置嵌入式编码器字典以引用存储在包中的代码生成定义(请参阅创建代码定义以覆盖默认设置).然后在代码映射编辑器中可以选择这些定义。在本例中,配置嵌入式编码器字典rtwdemo_roll
以引用存储在内置示例包中的定义ECoderDemos
.
打开嵌入式编码器字典
rtwdemo_roll
.有关说明,请参见创建并验证自定义存储类.在“嵌入式编码器字典”窗口中,单击管理包按钮。
在“包管理”对话框中,单击刷新.中出现更多选项时,请等待改变包装下拉列表。
集改变包装来
ECoderDemos
并点击加载包.在“嵌入式编码器字典”窗口中存储类选项卡中定义的存储类
ECoderDemos
包中。现在,在rtwdemo_roll
,您可以在下面选择这些存储类代码的映射>数据默认值.
代码定义属性
限制
不能以编程方式创建或修改代码生成定义。但是,您可以通过使用以下函数在模型和数据字典之间删除、复制和移动代码定义:
在嵌入式编码器字典中创建的存储类或函数模板不能使用从包中加载的内存段(如中所述)参考包中的代码生成定义).您必须使用嵌入式编码器字典内存部分。
类型中不能创建代码生成定义
. mdl
模型文件。有关数据字典的嵌入式编码器字典中代码生成定义的其他限制(
.sldd
文件),请参阅Simulink数据字典中定义的限制万博1manbetx.