通过为跨模型的数据元素和函数类别指定默认配置,可以减少为C代码生成准备模型的工作。应用默认配置可以节省时间并降低在代码中引入错误的风险,特别是对于生成多实例代码的大型模型和模型。
你可以设置一个默认的代码生成配置:
模型数据的类别。在为数据生成代码时,代码生成器使用您指定的存储类来确定属性,例如数据是否结构化、定义和头文件的命名规则,以及数据是否存储在内存段中。
类别的函数。在为函数生成代码时,代码生成器使用您指定的函数自定义模板来确定属性,例如函数命名规则和函数代码是否存储在内存段中。
你可以在Simulink中以交互方式指定默认配置金宝app®编辑器的代码映射编辑器或以编程方式。
为在Simulink编辑器中以交互式方式指定模型数据和函数的默认代码生成配置金宝appC代码选项卡,使用代码映射编辑器和属性检查器。要显示这些工具,请单击代码映射- C和属性检查器标签或选择设置>代码映射和设置>属性检查器.代码映射编辑器由制表符表组成:数据默认值,功能默认值,功能.要将模型数据元素的类别与存储类关联,请使用数据默认值表格要将函数与功能自定义模板相关联,请使用功能默认值表格在其中一个表中选择一行时,代码部分显示该数据元素或函数类别的属性设置。
在为模型配置一个或多个数据和函数类别之后,设置内存部分和共享实用程序标识符格式模型配置参数没有影响。当你打开金宝appSimulink Coder™或嵌入式编码器®app, 金宝appSimulink将模型配置参数设置迁移到代码映射编辑器。作为迁移的一部分,Simulink配置模型使用的嵌入金宝app式编码器字典,如从配置参数迁移内存部分和共享实用程序设置到代码映射编辑器.
通过将类别与存储类和内存部分关联起来,可以配置模型中数据元素类别的默认代码生成。数据元素被分组到这些类别中。
模型元素类别 | 描述 |
---|---|
inports. | 模型的根级输入端口。 |
外港 | 模型的根级输出端口。 |
模型参数 | 在模型中定义的参数,例如模型工作区中的参数。不包括模型参数。 |
模型参数参数 | 块在模型工作空间中的参数配置为模型参数。这些参数在模型块处暴露,以使每个模型实例能够提供自己的值。要将参数指定为模型参数,请选择模型数据编辑器+参数+论点复选框。 |
外部参数对象 | 在基本工作空间或数据字典中定义为对象的参数。应用程序中的多个模型可以使用这些参数。 |
共享本地数据存储 | 数据存储内存使用block参数的块跨模型实例共享集。这些数据存储只能在定义它们的模型中访问。数据存储值在模型的实例之间共享。 |
全球数据商店 | 由基本工作空间或数据字典中的信号对象定义的数据存储。应用程序中的多个模型可以使用这些数据存储。 |
内部数据 | 诸如数据存储,离散块状态,块输出信号和零交叉信号的本地数据。 |
常数 | 模型中的常量值块输出和常量参数。 |
代码映射编辑器为给定类别提供有效的存储类选项。选项包括:
未指定的存储类(默认的
).代码生成器将数据元素类别的代码放在标准结构中,例如B_
,ExtY_
,ExtU_
,DW_
,P_
.看生成代码中的标准数据结构.
相关内置存储类,如ExportedGlobal.
.
可用包中的相关存储类,例如ImportFromFile
.
在嵌入式编码器字典中定义的存储类。
在配置数据的默认代码生成设置之前,请考虑:
考虑 | 更多的信息 |
---|---|
哪些类别与您的模型相关? | 上表中的模型元素类别 |
模型是否使用类别中的多个数据实例?如果答案是肯定的,那么应用默认映射是有益的。否则,考虑使用模型数据编辑器为每个数据元素单独配置代码生成。 | 使用模型数据编辑器配置数据属性(金宝app模型),将存储类应用于单个信号、状态和参数数据元素,将内置和自定义存储类应用于数据元素 |
哪个存储类与每个类别的代码生成要求一致? | 选择存储类以控制生成代码中的数据表示 |
您希望模型数据是结构化的吗?例如,如果您为多实例代码生成配置了模型,结构可以提高代码效率和可读性。 | 在生成的代码中将数据组织成结构 |
类别是否要求代码生成器将数据存储在内存的特定区域?例如,考虑是否将初始化数据存储在慢速内存中,将算法或计算性数据存储在快速内存中。 | 为软件架构定义存储类,内存部分和功能模板和通过插入Pragmas来控制数据和功能放置 |
您希望防止优化消除代码中的特定数据吗? | 通过优化消除参数和其他内部数据 |
是否有数据元素必须覆盖默认配置设置? | 下面的例子。 |
是否需要定义可以在代码映射编辑器中选择的新存储类? | 为软件架构定义存储类,内存部分和功能模板和使用自定义存储类设计器创建存储类 |
模型的默认映射存储为模型的一部分。
这个示例展示了如何使用Code Mappings编辑器为模型数据指定代码生成需求。该模型使用多个执行速率,并配置为单实例使用。
此示例假定这些代码生成要求:
使用项目类型定义dbl_float.
在头文件中定义exDblFloat.h
.
得到数据元素ex_input1
的头文件exindatamem.h.
.该数据用于计算存储在内存中的值,然后在转变块。
得到的数据元素ex_input2
,ex_input3
,ex_input4
的头文件exInDataLut.h
.数据用于查找表表格1
和表2.
.
从头文件导入到模型中的数据exindatamem.h.
和exInDataLut.h
的类型是dbl_float.
,项目标准。
参数K1
必须是可调的,以启用校准。
数据存储模式
定义模型中共享的数据。逻辑运算符块写入数据存储,速率转换块从数据存储读取数据。
数据元素X
表示的延迟单位延迟块。
存储模型内部的数据,例如延迟X
,在一段标记为InternalDatamem.
.
导出输出数据声明到头文件exSysOut.h
和定义exSysOut.c
.
尽管该模型使用某些数据的单个实例,但该示例配置了默认设置以演示不同类型的映射。当您向模型添加块时,新的数据元素将获得默认的代码生成映射。
复制这些外部源文件和头文件matlabroot /工具箱/ rtw / rtwdemos
到一个可写的工作文件夹。这些文件定义并声明生成代码使用的外部数据类型和数据。
文件 | 描述 |
---|---|
exDblFloat.h |
定义项目数据类型别名 |
exindatamem.c. |
包括 |
exindatamem.h. |
包括 |
exInDataLut.c |
|
exInDataLut.h |
包括 |
exCodeDefs.sldd |
数据字典 |
RTWDEMO_CONFIGDEFAULTS.SLX. |
模型的例子。 |
打开示例模型的副本rtwdemo_configdefaults
.
在应用程序库中,打开嵌入式编码器应用程序。
指定一个声明输入数据的外部头文件。四个根导入中的三个从头文件中声明的变量中读取输入exInDataLut.h
.将该头文件设置为默认值。
在C代码选项卡,在代码映射- C,单击数据默认值选项卡。
选择类别inports..将存储类设置为ImportFromFile
.
在物业检查员,套装头文件到exInDataLut.h
.
的默认外部头文件设置三机一体
.Inport从标题文件中声明的变量读取数据exindatamem.h.
.
单击。打开模型数据编辑器模型数据编辑器选项卡。
在代码
视图,单击模型数据编辑器港口/外港选项卡。
在源列,选择三机一体.
为设置存储类三机一体到ImportFromFile
.
放头文件到exindatamem.h.
.
配置参数上
,降低
,K1
,K2
.这些参数是模型参数,参数对象存储在模型工作区中。
单击。打开代码映射编辑器代码映射- C选项卡。
单击数据默认值选项卡。
单击模型参数选项卡。
将存储类设置为ExportedGlobal.
,这使得参数对象显示在生成的代码中作为可调全局变量。
防止代码生成器优化消除K1
从生成的代码。数据要求表明K1
必须可调。为了防止可能从生成的代码中删除该变量:
单击。打开模型数据编辑器模型数据编辑器选项卡。
在代码
视图,单击模型数据编辑器参数选项卡。
选择模型工作区参数的行K1
.
为设置存储类K1
到模型默认值
.
有关更多信息,请参见通过优化消除参数和其他内部数据.
定义用于存储单元延迟的内存段X
,模型内部的数据。
单击。打开代码映射编辑器代码映射- C选项卡。
通过选择打开嵌入式编码器字典设置>嵌入式编码字典.
在嵌入式编码器字典中,单击记忆部分选项卡。
点击添加.
在表的新行中,命名新的内存部分InternalDatamem.
.还设置:
之前的声明到#pragma start InternalData.
发布声明到#pragma结束InternalData.
陈述周围到组变量
关闭词典。
有关更多信息,请参见通过插入Pragmas来控制数据和功能放置.
在“代码映射编辑器”中,单击数据默认值选项卡。
选择类别内部数据.
在物业检查员,套装记忆部分到InternalDatamem.
.
为生成的代码将输出写到的变量指定默认的外部头文件和定义文件。
在“代码映射编辑器”中,单击数据默认值选项卡。
单击外港选项卡。
将存储类设置为ExportToFile
.
在物业检查员,套装头文件到exSysOut.h
和定义文件到exSysOut.c
.
保存模型。
生成代码。
验证生成的代码。在代码观点:
打开的文件rtwdemo_configdefaults.h
.使用搜索找到# include
包含声明外部输入数据的头文件的语句。
#include“exindatamem.h”#include“exindatalut.h”
打开的文件rtwdemo_configdefaults.c
.代码初始化增益变量K1
并在模型阶跃函数中使用变量EXFAST_STEP1
.
Dbl_float k1 = 2.0;. . .void exFast_step1(void) {DBL_FLOAT rtb_Gain;rtb_Gain = K1 * look1_binlc(ex_input2, rtCP_Table1_bp01Data, rtCP_Table1_tableData, 10U);. . .}
在文件中rtwdemo_configdefaults.c
, 找# pragma
用于定义内存段的控制线INTERNALDATA
(本地数据存储、单位延迟和常量)。
#pragma启动InternalData D_Work RTDWork;#pragma结束InternalData #pragma启动InternalData RT_Model RTM_;#pragma结束InternalData。..Pragma启动InternalData extern D_Work RTDWork;#pragma结束InternalData.
打开的文件exSysOut.c
.该文件包括导出的数据定义rtOut1
.
#include "rtwdemo_configdefaults.h" DBL_FLOAT rtOut1;
打开共享文件exSysOut.h
.文件声明rtOut1
.获得rtOut1
,外部代码可以包含此头文件。
extern dbl_float rtout1;
通过使用code Mappings编辑器将入口点函数类别与函数定制模板关联起来,配置入口点函数类别的默认代码生成。
模型功能类别 | 描述 |
---|---|
初始化/终止 | 初始化和终止函数代码,如 和 . |
执行 | 模型的执行代码,例如 和 . |
共享效用 | 共享实用程序函数的代码。 |
函数自定义模板定义代码生成器如何为一类函数生成代码。对于函数类,你可以定义:
函数命名规则
内存中用于函数定义的位置(内存段)
默认情况下,代码生成器使用标识符命名规则R N美元
命名入口点函数。$ R
是根模型的名称。$ N
是函数的默认代码生成器名称,例如,初始化
,步
,终止
.要将生成的代码与现有的外部代码集成,或者遵循命名标准或指导原则,您可以调整默认的命名规则。调整默认命名规则可以节省时间,特别是对于代码生成器生成惟一的多速率模型步
函数为每个速率。
除非有人为模型定义了函数自定义模板,否则代码映射编辑器呈现默认的
作为唯一的模板选项。要定义模板,请使用嵌入式编码器字典。通过选择打开字典设置>嵌入式编码字典在C代码选项卡。
在配置函数的默认代码生成设置之前,请考虑以下问题。
考虑 | 更多的信息 |
---|---|
哪些类别与您的模型相关? | 配置模型入口点函数的代码生成 |
您有功能命名要求吗?如果答案是肯定的,它们是什么?这些要求适用于哪些类别? | 配置模型入口点函数的代码生成和标识符的格式控制 |
模型是否使用一个类别中的多个函数实例?如果答案是肯定的,那么应用默认映射是有益的。否则,考虑为每个函数分别配置代码生成,如引用的主题中所述。 | 自定义生成的C函数接口和为Simulink函数和函数调用程序块定制入口点函数接口金宝app |
您的应用程序是否需要代码生成器将函数代码存储在内存的特定区域? | 为软件架构定义存储类,内存部分和功能模板和通过插入Pragmas来控制数据和功能放置 |
您是否需要定义新的函数定制模板,以便将其作为选项包含在代码映射编辑器中? | 为软件架构定义存储类,内存部分和功能模板 |
哪些功能定制模板与每个类别的代码生成需求保持一致? | 定义函数自定义模板和嵌入式编码字典 |
此示例显示如何使用代码映射编辑器来指定模型功能的代码生成要求。该模型使用多个执行速率,并配置为单实例使用。代码生成器会产生初始化,执行和终止入口点函数。由于模型使用多个速率,因此代码生成器为每个速率产生执行功能。
此示例假定这些代码生成要求:
将生成的初始化和终止函数存储在内存段中functionSlowMem
和内存段的执行函数functionFastMem
.
使用命名规则exSlow_ $ N
命名初始化
和终止
功能。使用命名规则exFast_ $ N
命名执行函数。
本示例还假设您已经按照中所述设置了示例环境设置示例环境.
定义两个内存段:functionSlowMem
用于初始化和终止功能和functionFastMem
执行功能。
通过选择打开嵌入式编码器字典设置>嵌入式编码字典.
在嵌入式编码器字典中,单击记忆部分选项卡。
点击添加.
在表的新行中,命名新的内存部分functionFastMem
.然后,设置:
之前的声明到# pragma开始FASTMEM
发布声明到#pragma结束fastmem.
点击添加一次。为内存段命名functionSlowMem
.然后,设置:
之前的声明到# pragma开始SLOWMEM
发布声明到#pragma结束慢动作
若要配置功能类别,请定义功能自定义模板。除非您在嵌入式编码器字典中定义了与模型相关联的模板,否则唯一可用的模板是默认的
.根据需求,在字典中定义两个函数自定义模板:一个指定初始化函数和terminate函数的命名规则和内存段,一个指定执行函数的命名规则和内存段。
在嵌入式编码器字典中,单击功能自定义模板选项卡。
点击添加.
在表的新行中,命名新模板exFastFunction
.然后,设置:
函数名到exFast_ $ N
.该命名规则应用前缀exFast_
为标识函数的默认代码生成器名称的名称(例如,初始化
或步
).
记忆部分到functionFastMem
.这个映射与您在定义内存部分使用新模板。
点击添加一次。名字的模板exslowfunction.
.然后,设置:
函数名到exSlow_ $ N
.
记忆部分到functionSlowMem
.
关闭词典。
在Simuli金宝appnk编辑器中,在C代码选项卡上,单击代码映射- C.
Cick的功能默认值选项卡。
配置初始化和终止入口点函数。的类别初始化/终止,选择模板exslowfunction.
.
配置执行入口点功能。的类别执行,选择模板exFastFunction
.
保存模型。
生成代码。
在代码观点:
打开的文件rtwdemo_configdefaults.c
.点击搜索字段。一个菜单列出了生成的入口点函数:
EXFAST_STEP0.
(周期性调用,每0.5秒一次)
EXFAST_STEP1
(定期被称为每1秒)
EXFAST_STEP2.
(每1.5秒周期性调用)
exSlow_initialize
获取进入点功能代码的访问rtwdemo_configdefaults.c
,单击函数名。验证编译指示
控制功能代码的控制语句。例如:
. . .#pragma start FASTMEM void exFast_step2(void) /* Sample time: [1.5s, 0.0s] */ {boolean_T rtb_datastoreeread;rtb_DataStoreRead = ((ex_input1 > 10.0) || (ex_input1 < -10.0));rtDWork。RateTransition1_Buffer0 = rtb_DataStoreRead;} #pragma end FASTMEM #pragma start SLOWMEM void exSlow_initialize(void){/*(不需要初始化代码)*/}#pragma end SLOWMEM…
打开的文件rtwdemo_configdefaults.h
.使用搜索找到# pragma
用于定义内存段的控制线FASTMEM
和SLOWMEM
.验证编译指示
控制语句围绕着声明。例如:
. . .#pragma start SLOWMEM extern void exSlow_initialize(void);#pragma end SLOWMEM #pragma start FASTMEM extern void exFast_step0(void);#pragma end FASTMEM…
您可以选择使用在Simulink数据字典中设置的定义来配置默认数据和函数代码生成。金宝app数据字典允许在模型之间共享代码定义。此示例演示如何将模型从使用特定于模型的嵌入式编码器字典中的代码定义更改为使用共享数据字典中的嵌入式编码器字典中的定义。如果你已经完成了配置数据的默认代码生成和配置函数的默认代码生成您已经将这些代码定义添加到与模型相关联的嵌入式编码器字典中rtwdemo_configdefaults
.
记忆部分InternalDatamem.
与之前的声明设置为#pragma start InternalData.
和发布声明设置为#pragma结束InternalData.
.
记忆部分functionFastMem
与之前的声明设置为# pragma开始FASTMEM
和发布声明设置为#pragma结束fastmem.
.
记忆部分functionSlowMem
与之前的声明设置为# pragma开始SLOWMEM
和发布声明设置为#pragma结束慢动作
.
功能定制模板exFastFunction
使用函数命名规则exFast_ $ N
和记忆的部分functionFastMem
功能定制模板exslowfunction.
使用函数命名规则exSlow_ $ N
和记忆的部分functionSlowMem
更新模型rtwdemo_configdefaults
要在数据字典中使用相同的代码定义,而不是本地模型嵌入编码器字典中的定义。
如上所述,您必须设置示例环境设置示例环境.
在Simuli金宝appnk编辑器中,选择建模>数据字典.
在“模型属性”对话框中数据选项卡,浏览到数据字典文件副本的位置Excodedefs.
并选择该文件。
点击迁移数据.
在“链接模型到数据字典”对话框中,单击应用.
在“数据迁移”对话框中,单击迁移.数据迁移完成后,单击好吧.
在模型画布的左下角,单击模型数据图标。
从模型数据源列表中单击数据字典.
在模型资源管理器中模型层次结构窗格,扩展Excodedefs.节点。
右键点击嵌入式编码字典.
单击打开嵌入式编码器字典按钮出现。
在嵌入式编码器字典中,查看定义功能自定义模板和记忆部分选项卡。
关闭嵌入式编码器字典。
在Simuli金宝appnk编辑器中,单击C代码选项卡。
选择设置>嵌入式编码字典.
删除模型中本地创建的代码定义。
在功能自定义模板选项卡,选择行exslowfunction.
和exFastFunction
有源设置为rtwdemo_configdefaults
.点击删除.
在记忆部分选项卡,选择行functionFastMem
,functionSlowMem
,InternalDatamem.
有源设置为rtwdemo_configdefaults
.点击删除.
关闭词典。
保存模型。
在Simuli金宝appnk编辑器中C代码选项卡上,单击代码映射- C选项卡。
在代码映射编辑器中,单击数据默认值选项卡。
选择类别内部数据.
在物业检查员,套装记忆部分到InternalDatamem.
.
单击功能默认值选项卡。
为了初始化/终止类别,选择功能自定义模板exslowfunction.
.
为了执行类别,选择模板exFastFunction
.
保存模型。
生成和检查代码。
有关设置嵌入式编码器字典的详细信息,请参阅为软件架构定义存储类,内存部分和功能模板.
如果您将模型链接到Simulink数据字典,其中包金宝app括为数据和函数类别配置默认代码定义的编码器字典,则可以使用code Mappings编辑器应用字典默认值。在代码映射编辑器中,在数据默认值和功能默认值选项卡,选择一个类别并将存储类或函数自定义模板设置为字典默认值
.如果有人更改了共享编码器字典中的默认设置,那么代码生成器将在为您的模型生成代码时应用更新后的默认设置。
有关更多信息,请参见在共享字典中配置默认代码映射.
此示例演示如何配置默认数据和函数代码生成示例模型rtwdemo_configdefaults
示例使用默认的映射编程接口来指定模型数据和函数的代码生成需求。使用该接口来自动化配置,或者如果您喜欢以编程方式配置模型的话。有关使用代码映射编辑器配置默认数据和函数代码生成的信息,请参见配置用于模型数据和函数类别的默认C代码生成.
打开模型
该模型rtwdemo_configdefaults
使用多个执行速率,并配置为单实例使用。
Open_System(“rtwdemo_configdefaults”)
代码生成的需求
对于本例,以下是代码生成需求:
为类型数据导入项目类型定义双倍的
, DBL_FLOAT,从头文件exDblFloat.h
.
输入信号ex_input1
用于计算存储在内存中的值,并用于Switch块中的if-else条件。从头文件导入信号数据exindatamem.h.
.
进口信号ex_input2
,ex_input3
,ex_input4
为查找表表格1
和表2.
.从头文件导入信号数据exInDataLut.h
.
从头文件导入到模型中的数据exindatamem.h.
和exInDataLut.h
的类型是dbl_float.
,项目标准。
参数上
,降低
,K1
,K2
是否存储在模型工作区中的参数对象。K1
必须是可调的,以启用校准。
数据存储模式
定义模型中共享的数据。
数据元素X
表示单位延迟块的延迟。
将模型内部的数据存储在内存部分InternalDatamem.
.
将生成的初始化和终止函数存储在内存段中functionSlowMem
和内存段的执行函数functionFastMem
.
使用标识符命名规则exSlow_ $ N
命名初始化
和终止
入学点函数。使用命名规则exFast_ $ N
命名执行函数。
导出输出数据声明到头文件exSysOut.h
和定义exSysOut.c
.
对于本例,某些人,例如系统架构师,已经在Simulink数据字典的一部分Embedded Coder Dictionary中创建了这些代码定义金宝appexCodeDefs.sldd
:
记忆部分InternalDatamem.
,functionFastMem
,functionSlowMem
.
功能自定义模板exFastFunction
和exslowfunction.
.
为数据和函数创建配置代码生成环境
创建一个环境,用于配置与模型相关的数据和函数的代码生成rtwdemo_configdefaults
通过调用函数编码器.mapping.Create.
.如果您之前在嵌入式编码器应用程序中打开了模型,则可以跳过此步骤。
coder.mapping.create (“rtwdemo_configdefaults”);
确定要设置为默认数据的类别、属性和值组合
将数据与可用数据类别的数据对齐。每个类别都有一组可以配置的属性。每个属性都有一组可能的值。使用呼叫coder.mapping.defaults.dataCategories, coder.mapping.defaults.allowedProperties
,coder.mapping.defaults.allowedValues
查看类别,属性和感兴趣的值的名称列表。
对于本例,您需要为模型工作区中存储的导入、输出和参数对象配置默认设置。调用。获取可用数据类别的列表Coder.mapping.defaults.datacategories.
.
coder.mapping.defaults.dataCategories ()
ans =1 x9单元阵列第1至4列{'Inports'} {'Outports'} {'ModelParameters'} {'ModelParameter…'}列5到7 {'ExternalParame…'} {SharedLocalDat……'} {'GlobalDataStores'}列8到9 {'InternalData'} {'Constants'}
数据类别inports.
,外港
、模型参数
,InternalData
确定可以使用呼叫设置的属性coder.mapping.defaults.allowedProperties
.
coder.mapping.defaults.allowedProperties(“rtwdemo_configdefaults”,“港口”)
ans =2 x1单元阵列{'storageClass'} {'headerfile'}
coder.mapping.defaults.allowedProperties(“rtwdemo_configdefaults”,“输出港”)
ans =4 x1单元阵列{'StorageClass'} {'HeaderFile'} {'DefinitionFile'} {'Owner'}
coder.mapping.defaults.allowedProperties(“rtwdemo_configdefaults”,“ModelParameters”)
ans =1 x1单元阵列{'storageClass'}
coder.mapping.defaults.allowedProperties(“rtwdemo_configdefaults”,“InternalData”)
ans =2 x1单元阵列{'StorageClass'} {'MemorySection'}
对于要设置的数据类别和属性组合,请通过调用来标识可能的值coder.mapping.defaults.allowedValues
.根据需求和调用的结果coder.mapping.defaults.allowedProperties
指定:
StorageClass
分类inports.
,外港
、模型参数
,InternalData
记忆
与InternalData
您不需要确定属性的值HeaderFile
(为了inports.
和外港
) 和定义文件
(外港
).
您为这些属性设置的值是已知的字符串。
coder.mapping.defaults.allowedValues (“rtwdemo_configdefaults”,“港口”,“StorageClass”)
ans =9x1单元格阵列{'exportedglobal'} {'importedextern'} {'importedexterntpinter'} {'volatile'} {'volidile'} {'importtoffile'} {'importfromfile'} {'autope'} {'getset'}
coder.mapping.defaults.allowedValues (“rtwdemo_configdefaults”,“输出港”,“StorageClass”)
ans =9x1单元格阵列{'exportedglobal'} {'importedextern'} {'importedexterntpinter'} {'volatile'} {'volidile'} {'importtoffile'} {'importfromfile'} {'autope'} {'getset'}
coder.mapping.defaults.allowedValues (“rtwdemo_configdefaults”,“ModelParameters”,“StorageClass”)
ans =14 x1单元阵列{'Default'} {'ExportedGlobal'} {'ImportedExtern'} {'ImportedExternPointer'} {'Const'} {'Volatile'} {'ConstVolatile'} {'Define'} {'ImportedDefine'} {'ExportToFile'} {'ImportFromFile'} {'FileScope'} {'GetSet'} {'CompilerFlag'}}
coder.mapping.defaults.allowedValues (“rtwdemo_configdefaults”,“InternalData”,“StorageClass”)
ans =10 x1单元阵列{'Default'} {'ExportedGlobal'} {'ImportedExtern'} {'ImportedExternPointer'} {'Volatile'} {'ExportToFile'} {'ImportFromFile'} {'FileScope'} {'AutoScope'} {'GetSet'}
coder.mapping.defaults.allowedValues (“rtwdemo_configdefaults”,“InternalData”,“MemorySection”)
ans =5 x1单元阵列{'none'} {'memvolatile'} {'functionfastmem'} {'composisherlowmem'} {'internaldatamem'}
确定要设置为函数默认值的类别、属性和值组合
将代码生成要求与可用功能类别进行调整。对于此示例,您需要为初始化,执行和终止功能配置默认设置。通过调用获取可用功能类别的列表coder.mapping.defaults.functionCategories
.
coder.mapping.defaults.functionCategories ()
ans =1 x3单元阵列{'initializetermi ...''} {'执行'} {'sharedutility'}
适用的类别是InitializeTerminate
和执行
.
对于功能类别InitializeTerminate
和执行
,确定可以通过调用来设置的属性coder.mapping.defaults.allowedProperties
.
coder.mapping.defaults.allowedProperties(“rtwdemo_configdefaults”,“InitializeTerminate”)
ans =1 x1单元阵列{' FunctionCustomizationTemplate '}
对于category,你会得到相同的输出执行
.
对于要设置的功能类别和属性组合,请识别呼叫的可能值coder.mapping.defaults.allowedValues
.根据需求和调用的结果coder.mapping.defaults.allowedProperties
,指定FunctionCustomizationTemplate
分类InitializeTerminate
和执行
.
coder.mapping.defaults.allowedValues (“rtwdemo_configdefaults”,“InitializeTerminate”,...“FunctionCustomizationTemplate”)
ans =3 x1单元阵列{'Default'} {'exSlowFunction'} {'exFastFunction'}
模板列表是相同的InitializeTerminate
和执行
.
设置相关类别,属性和价值组合
使用呼叫设置相关类别,属性和价值组合coder.mapping.defaults.set
.
coder.mapping.defaults.set(“rtwdemo_configdefaults”,“港口”,...“Storageclass”,'ImportFromFile',...'头球文件',“exInDataLut.h”);coder.mapping.defaults.set(“rtwdemo_configdefaults”,“输出港”,...“Storageclass”,'exportTofile',...'头球文件','exsysout.h',...“DefinitionFile”,“exSysOut.c”);coder.mapping.defaults.set(“rtwdemo_configdefaults”,“ModelParameters”,...“Storageclass”,“ExportedGlobal”);coder.mapping.defaults.set(“rtwdemo_configdefaults”,“InternalData”,...“MemorySection”,“internalDataMem”);coder.mapping.defaults.set(“rtwdemo_configdefaults”,“InitializeTerminate”,...“FunctionCustomizationTemplate”,“exSlowFunction”);coder.mapping.defaults.set(“rtwdemo_configdefaults”,“执行”,...“FunctionCustomizationTemplate”,“exFastFunction”);
验证默认映射
验证调用的默认映射coder.mapping.defaults.get.
.
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“港口”,“StorageClass”)
ans ='importfromfile'
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“港口”,'头球文件')
ans ='exindatalut.h'
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“输出港”,“StorageClass”)
ans = ' ExportToFile '
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“输出港”,'头球文件')
ans = ' exSysOut.h '
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“输出港”,“DefinitionFile”)
ans = ' exSysOut.c '
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“ModelParameters”,...“StorageClass”)
ans = ' ExportedGlobal '
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“InternalData”,...“MemorySection”)
ans ='internaldatamem'
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“InitializeTerminate”,...“FunctionCustomizationTemplate”)
ans = ' exSlowFunction '
coder.mapping.defaults.get (“rtwdemo_configdefaults”,“执行”,...“FunctionCustomizationTemplate”)
ans ='exfastfunction'
覆盖头文件设置
覆盖输入信号的头文件设置ex_input1
.属性中的数据设置了默认头文件inports.
类别exInDataLut.h
.这些要求指定您从标题文件导入该信号的数据exindatamem.h.
.
为In1块的输出端口创建一个句柄。
portHandles = get_param ('RTWDEMO_CONFIGDEFAULTS / IN1',“PortHandles”);嘴巴= portHandles.Outport;
在基础工作区中,创建临时信号对象。
temp_Obj =仿金宝app真软件。信号
temp_obj = persions属性:coderinfo:[1x1 simulink.coder金宝appinfo]描述:''数据类型:'auto'min:[] max:[]单位:''尺寸:'尺寸:'尺寸:'auto'复杂性:'auto'sampletime:-1 initialValue:''
在嵌套金宝app仿真软件。CoderInfo
对象,设置StorageClass
财产风俗
.然后,使用
customstorageClass.
属性指定存储类ImportFromFile
.
temp_Obj.CoderInfo。StorageClass =“自定义”;temp_Obj.CoderInfo。customstorageClass.='ImportFromFile';
定义特定于实例的头文件,exdatainmem.h.
,在嵌套金宝app仿真软件。CoderInfo
通过使用的对象CustomAttributes
财产。
temp_obj.coderinfo.customattributes.headerfile ='exindatamem.h';
通过附加临时工作区对象的副本,将信号对象嵌入到感兴趣的信号线中。
set_param(嘴巴,“SignalObject”, temp_Obj);
从基本工作区中清除对象。信号现在使用对象的内嵌副本。
清除temp_Obj
相关链接
如果有人从与模型相关联的Embedded Coder Dictionary中删除了存储类、函数自定义模板或内存部分的定义,则代码映射编辑器将该定义标识为未解决的
.例如,该图表明,从与模型关联的字典中删除了执行入口点函数的函数自定义模板。
要修复未解析的代码定义,请执行以下操作之一:
中选择一个不同的定义存储类,功能自定义模板, 或者记忆部分柱子。
将定义替换或添加到嵌入式编码器字典中。然后,更新映射。
咨询其他人,例如系统架构师的项目,关于为嵌入编码器字典添加定义。然后,更新映射。
代码生成优化可以消除代码中的数据,这意味着应用程序代码不能与数据交互。有关按优化消除数据的一般信息,请参见生成代码如何存储内部信号、状态和参数数据.
优化可以消除以下类别中的数据:
模型参数
模型参数参数
外部参数对象
内部数据
优化不能消除:
其他类别的数据。
代码为数字准确性所需要的数据,包括大多数块状态,这些状态位于内部数据类别。
在通过优化消除数据之后,代码生成器将代码映射编辑器中的默认代码生成设置应用于其余数据。对于参数和信号线,优化可以消除整个类别的数据。如果发生这种情况,则您为该类别指定的默认设置将不适用于数据。
为了防止优化消除各个数据元素,通过使用模型数据编辑器将存储类显式应用于元素。存储类控制生成的代码中的数据的外观。要强制数据元素,请使用在代码映射编辑器中指定的默认存储类,显式应用存储类模型默认值
.看选择存储类以控制生成代码中的数据表示.
对于引用的模型,映射数据元素类别inports.和外港到默认的
,即内置存储类或包存储类。您无法将这些数据元素类别映射到Paramstruct.
或SignalStruct
,它们是Quick Start工具创建的示例存储类。
使用示例存储类SignalStruct
或者在嵌入的编码器字典中创建自己的结构化存储类以获取以下类别:
轮廓尺寸
外港
内部数据
设置到用属性定义的存储类的默认映射常量选择或财产数据初始化设置为动态
或没有任何
这些类别:
inports.
外港
共享本地数据存储
全球数据商店
内部数据
属性定义的将参数类别映射到存储类数据初始化属性设置为静止的
或没有任何
.
地图类轮廓尺寸,外港,内部数据,其中类别中至少有一个数据元素被指定为具有用数据范围属性设置为进口
.看为代码生成定义可变大小的数据(金宝app模型)。
映射数据元素类别全局参数和全球数据商店到默认的
,即内置存储类或包存储类。不能将这些数据元素类别映射到Quick Start工具创建的示例存储类,Paramstruct.
和SignalStruct
.
如果一个模型包含一个可重用的子系统,即一个带有块参数的子系统功能包装设置为可重用的功能
,它包含一个共享的本地数据存储,映射类别共享本地数据存储到为该模型在Embedded Coder Dictionary中定义的存储类。有关更多信息,请参见从子系统生成重播代码.
对于配置为多实例使用的顶级和引用模型,将数据元素类别映射到具有存储类型属性设置为结构化.看从顶级模型生成重圈代码和从Simulink函数块生成重换代码金宝app.
如果模型使用数据对象对齐,则不要为模型配置默认的数据映射。有关更多信息,请参见金宝app仿真软件。CoderInfo
.
如果使用包含数据对齐规范的代码替换库配置模型,则不能配置涉及在Embedded Coder Dictionary中定义的存储类的默认代码映射。有关更多信息,请参见用于代码替换的数据对齐.
在计算变量控制变量的存储类设置时,代码生成器忽略默认映射。有关更多信息,请参见在生成的代码中表示子系统和变体模型.
全局数据类别的默认映射必须跨模型引用层次结构相同。
不能将默认映射设置为:
基于结构的内置存储类,塑造
和设置
包存储类类型扁平结构
或其他
,使用自定义存储类设计器创建
将模型配置为压缩文件打包时,不能将数据元素类别映射到用数据范围属性设置为出口
和头文件属性设置为除此之外的命名规则新罕布什尔州美元
.
例如,如果模型包含一个可调的非有限参数,其值为正
:
如果您在模型中直接指定非小型值,则不使用MATLAB®变量或参数对象(例如金宝app仿真软件。参数
)在生成的代码中,参数显示为默认参数数据结构的字段(参见生成代码中的标准数据结构).该参数不使用您在代码映射编辑器中为相应类别的参数数据指定的存储类。
如果在变量或参数对象中存储非小型值,对于代码映射编辑器中的相应类别的参数数据,则无法使用您在嵌入的编码器字典中创建的存储类。当您尝试生成代码时,模型会生成错误。选择其中一个解决方法:
应用除了以外的存储类汽车
或模型默认值
直接到非有限参数,如将存储类应用于单个信号、状态和参数数据元素.
如果只有一个块使用变量或对象,而不是使用变量或对象,请在块参数中直接在模型中指定非小型值。