减少的努力准备C代码生成一个模型通过指定类别的默认配置的数据元素和功能在一个模型。应用默认配置可以节省时间和减少引入错误代码的风险,特别是对于较大的模型和模型的生成多实例代码。
你必须设置示例环境,描述设置示例环境。
复制这些外部源和头文件matlabroot /工具箱/ rtw / rtwdemos
一个可写的工作文件夹。这些文件定义和声明的外部数据类型和数据生成的代码使用。
文件 | 描述 |
---|---|
exDblFloat.h |
双项目定义了数据类型的别名,DBL_FLOAT 。金宝app动态仿真模块®使用PreLoadFcn 指定的回调模型来解析这个头文件并创建一个相应的金宝appSimulink.AliasType 对象。 |
exInDataMem.c |
包括exInDataMem.h 并定义变量ex_input1 。 |
exInDataMem.h |
包括exDbFloat.h 并声明变量ex_input1 。 |
exInDataLut.c |
exInDataLut.c 包括exInDataLut.h 和定义变量ex_input2 ,ex_input3 ,ex_input4 。 |
exInDataLut.h |
包括exDbFloat.h 和声明变量ex_input2 ,ex_input3 ,ex_input4 。 |
exCodeDefs.sldd |
数据字典 |
rtwdemo_configdefaults.slx |
模型的例子。 |
打开你的示例模型的复制rtwdemo_configdefaults
。
在应用画廊,打开嵌入式编码器应用程序。
这个例子展示了如何使用映射编辑器的代码指定代码生成模型数据的要求。该模型使用多个执行利率和单实例的配置使用。
这个例子假定这些代码生成数据要求:
使用项目类型定义DBL_FLOAT
在头文件中定义exDblFloat.h
。
得到数据元素ex_input1
的头文件exInDataMem.h
。数据用于计算一个值存储在内存中,然后使用一个if - else条件开关块。
得到的数据元素ex_input2
,ex_input3
,ex_input4
的头文件exInDataLut.h
。用于查找表的数据表1
和表二
。
头文件导入到模型的数据exInDataMem.h
和exInDataLut.h
的类型是DBL_FLOAT
,一个项目的标准。
参数K1
必须可调,使校准。
数据存储模式
定义了模型中的数据共享。逻辑算符块写入数据存储和过渡块读取的数据存储。
数据元素X
代表的延迟单位延迟块。
存储数据内部的模型,如延迟X
在一段内存标签internalDataMem
。
出口输出数据声明头文件exSysOut.h
和定义exSysOut.c
。
港口和外港名称变量代表在生成的代码中指定此表所以他们匹配变量名在外部头和定义文件。
虽然一些数据的模型使用单一实例,配置默认设置的例子来展示不同类型的映射。你块添加到模型中,新的数据元素获取默认代码生成映射。
指定一个外部头文件声明输入数据。三个港口读取输入的四根在头文件中声明的变量exInDataLut.h
。作为默认设置头文件。
开放模式rtwdemo_configdefaults。保存一个副本到可写的位置。
打开嵌入式编码器应用程序。
在C代码选项卡上,选择代码接口>默认的代码映射。这将打开代码映射编辑器数据默认值选项卡。
在数据默认值选项卡,扩大港口和外港。然后,选择港口。
设置存储类ImportFromFile
。
单击图标和设置头文件来exInDataLut.h
。
为模型工作区配置默认设置你想要可调参数。
在代码映射编辑器中,单击数据默认值选项卡。
在数据默认值选项卡,扩大参数。
的行模型参数,单击文本“汽车”将内联
。模型配置参数对话框打开代码生成>优化窗格。集默认参数的行为来可调
。申请更改并关闭对话框。在代码映射编辑器中,文本的右边模型参数现在读“汽车”将可调
。
包括全局变量定义和声明为模型参数在生成的代码,设置的存储类模型参数类别ExportedGlobal
。
定义一个内存部分存储单元延迟X
,内部的数据模型。
开放的嵌入式编码字典通过选择代码接口>嵌入式编码字典。
在嵌入式编码字典,点击记忆的部分选项卡。
点击添加。
在表的新行,新的内存部分名称internalDataMem
。还设置:
之前的声明来# pragma开始INTERNALDATA
发布声明来# pragma INTERNALDATA结束
语句包围来组变量
关闭词典。
有关更多信息,请参见控制数据和函数放置在内存中插入语法。
设置默认的代码生成配置内部数据包括内存部分internalDataMem
。
在代码映射编辑器中,单击数据默认值选项卡。
在数据默认值选项卡,扩大信号。
选择类别信号、状态和内部数据。
单击图标和设置记忆的部分来internalDataMem
。
指定的默认外部头和定义文件生成的代码写到输出变量。
在代码映射编辑器中,单击数据默认值选项卡。
在数据默认值选项卡,扩大港口和外港。
选择类别外港。
设置存储类ExportToFile
。
单击图标和设置头文件来exSysOut.h
和定义文件来exSysOut.c
。
除非你明确单个数据元素映射到替代存储类设置,映射编辑器的代码假设元素的存储类汽车
。当一个数据元素的存储类汽车
,代码生成器可能消除或改变相关代码的表示为优化目的。如果不可能优化,代码生成器模型适用于默认配置。
避免优化和强制代码生成器使用默认配置,设置单独的元素的存储类模型的默认
。
覆盖默认配置,指定存储类满足数据元素的代码生成的要求。
对于这个示例,代码生成器配置默认的存储类设置应用于这些数据元素:
港口In2
,In3
,In4
外港着干活
模型参数K1
状态X
在代码映射编辑器中,单击港口选项卡。
为港口选择的行In2
,In3
,In4
。然后,对于选定的港口之一,设置存储类模型默认值:ImportFromFile
。三个港口更改选定的存储类模型默认值:ImportFromFile
。
单击外港选项卡。对于输出港着干活
,设置存储类模型默认值:ExportToFile
。
单击参数选项卡。扩大模型参数。然后,对于参数K1
,设置存储类模型默认值:ExportedGlobal
。
单击信号/州选项卡。扩大州。国家X
,设置存储类默认值:违约模型
。
保存模型。
生成代码并验证所生成的代码。
在文件中rtwdemo_configdefaults.h
,搜索# include
语句包含头文件声明外部输入数据。
# include“exInDataMem。h exInDataLut.h“# include
打开的文件rtwdemo_configdefaults.c
。代码初始化变量K1
并使用变量在模型中阶跃函数exFast_step1
。
DBL_FLOAT K1 = 2.0;。空白exFast_step1 (void) {DBL_FLOAT rtb_Gain;rtb_Gain = K1 * look1_binlc (ex_input2 (& (rtTable1_bp01Data [0])), (& (rtTable1_tableData [0])), 10 u);rtDWork。RateTransition_Buffer0 = rtb_Gain;}。}
在文件rtwdemo_configdefaults.c
,找# pragma
控制线路定义内存的部分INTERNALDATA
(本地数据存储单元延迟,和常量)。
# pragma开始INTERNALDATA D_Work rtDWork;# pragma INTERNALDATA结束。。# pragma开始INTERNALDATA静态RT_MODEL rtM_;# pragma INTERNALDATA结束。。编译指示开始INTERNALDATA走读生D_Work rtDWork;# pragma INTERNALDATA结束
打开的文件exSysOut.c
。的文件中包括一个导出的数据定义ex_output
。
# include“rtwdemo_configdefaults。h”DBL_FLOAT ex_output;
打开共享文件exSysOut.h
。文件声明ex_output
。进入ex_output
外部代码可以包含这个头文件。
走读生DBL_FLOAT ex_output;
这个例子展示了如何使用映射编辑器的代码指定代码生成模型的功能要求。该模型使用多个执行利率和单实例的配置使用。代码生成器产生的初始化、执行和终止入口点函数。因为模型使用多个利率,代码生成器产生执行函数为每个率。
这个例子假定这些代码生成需求:
存储在内存中生成的初始化和终止功能部分functionSlowMem
在内存和执行功能部分functionFastMem
。
使用命名规则exSlow_ $ N
的名字初始化
和终止
功能。使用命名规则exFast_ $ N
执行函数的名字。
定义两个内存部分:functionSlowMem
初始化和终止功能functionFastMem
执行功能。
打开嵌入式编码器应用程序。
开放的嵌入式编码字典通过选择代码接口>嵌入式编码字典。
在嵌入式编码字典,点击记忆的部分选项卡。
点击添加。
在表的新行,新的内存部分名称functionFastMem
。然后,设置:
之前的声明来# pragma开始FASTMEM
发布声明来# pragma FASTMEM结束
点击添加一次。名字的内存部分functionSlowMem
。然后,设置:
之前的声明来# pragma开始SLOWMEM
发布声明来# pragma SLOWMEM结束
配置类别的函数,函数定义定制模板。除非你在相关的嵌入式编码字典定义模板模型,唯一可用的模板默认的
。根据需求,在字典里,定义两个函数定制模板:一个指定的命名规则和内存部分用于初始化和终止功能,一个指定的命名规则和内存部分执行功能。
在嵌入式编码字典,点击功能定制模板选项卡。
点击添加。
在表的新行,新模板名称exFastFunction
。然后,设置:
函数名来exFast_ $ N
。这种命名规则应用前缀exFast_
识别的名字默认代码生成器的函数的名称(例如,初始化
或一步
)。
记忆的部分来functionFastMem
。这种映射关联的内存部分中定义定义内存部分用新的模板。
点击添加一次。名字的模板exSlowFunction
。然后,设置:
函数名来exSlow_ $ N
。
记忆的部分来functionSlowMem
。
关闭词典。
在C代码选项卡上,单击代码接口>默认的代码映射。
在代码映射编辑器中,单击功能默认值选项卡。
配置初始化和终止入口点函数。的类别初始化和终止,选择模板exSlowFunction
。
配置执行入口点函数。的类别执行,选择模板exFastFunction
。
保存模型。
生成的代码。
在代码观点:
打开的文件rtwdemo_configdefaults.c
。点击搜索字段。一个菜单列表生成的入口点函数:
exFast_step0
(称为定期,每0.5秒)
exFast_step1
(称为定期,每1秒)
exFast_step2
(称为定期,每1.5秒)
exSlow_initialize
进入的入口点函数的代码rtwdemo_configdefaults.c
,单击函数名。验证编译指示
控制语句周围的函数代码。例如:
。# pragma开始FASTMEM空白exFast_step2 (void) / *样品时间:[1.5,0.0 s] * / {boolean_T rtb_DataStoreRead;rtb_DataStoreRead = ((ex_input1 > 10.0) | | (ex_input1 < -10.0));rtDWork。RateTransition1_Buffer0 = rtb_DataStoreRead;}# pragma结束FASTMEM # pragma开始SLOWMEM空白exSlow_initialize (void){/ *(不需要初始化代码)* /}# pragma SLOWMEM结束。。
打开的文件rtwdemo_configdefaults.h
。使用搜索找到# pragma
控制线路定义内存的部分FASTMEM
和SLOWMEM
。验证编译指示
控制语句声明。例如:
。# pragma开始SLOWMEM走读生空白exSlow_initialize(无效);# pragma结束SLOWMEM # pragma开始FASTMEM走读生空白exFast_step0(无效);# pragma FASTMEM结束。。
您可以选择配置默认的数据和函数代码生成的定义建立在模型数据字典。金宝app一个数据字典使之间共享代码定义模型。这个例子展示了如何改变从使用代码定义一个模型的模型相关的嵌入式编码字典使用定义在嵌入式编码字典在共享数据字典。如果你已经完成了的例子配置默认代码生成数据和配置默认代码生成功能你添加了这些代码定义与模型相关的嵌入式编码字典rtwdemo_configdefaults
。
记忆的部分internalDataMem
与之前的声明设置为# pragma开始INTERNALDATA
和发布声明设置为# pragma INTERNALDATA结束
。
记忆的部分functionFastMem
与之前的声明设置为# pragma开始FASTMEM
和发布声明设置为# pragma FASTMEM结束
。
记忆的部分functionSlowMem
与之前的声明设置为# pragma开始SLOWMEM
和发布声明设置为# pragma SLOWMEM结束
。
功能定制模板exFastFunction
函数命名规则exFast_ $ N
和记忆的部分functionFastMem
功能定制模板exSlowFunction
函数命名规则exSlow_ $ N
和记忆的部分functionSlowMem
更新模型rtwdemo_configdefaults
使用相同的代码定义数据字典exCodeDefs。sldd而不是定义在当地模型嵌入编码字典。
你必须设置示例环境,描述设置示例环境。
在模型编辑器中金宝app,选择建模>链接到数据字典。
在模型属性对话框中,在外部数据选项卡中,浏览到的位置数据字典文件的副本exCodeDefs
并选择该文件。
点击迁移数据。
链接模型数据字典的对话框中,点击应用。
在迁移数据对话框中,单击迁移。在数据迁移完成时,单击好吧。
在模型的画布,左下角点击模型数据图标。
从模型的数据源列表中,点击外部数据。
在Model Explorer模型层次结构窗格中,展开exCodeDefs节点。
右键单击嵌入式编码字典。
单击开放的嵌入式编码字典按钮出现。
在嵌入式编码字典,审查的定义功能定制模板和记忆的部分选项卡。
关闭嵌入式编码字典。
打开嵌入式编码器应用程序。
在C代码选项卡上,选择代码接口>嵌入式编码字典。
删除本地模型中创建的代码定义。
在功能定制模板选项卡上,选择行exSlowFunction
和exFastFunction
有源设置为rtwdemo_configdefaults
。点击删除。
在记忆的部分选项卡上,选择行functionFastMem
,functionSlowMem
,internalDataMem
有源设置为rtwdemo_configdefaults
。点击删除。
关闭词典。
保存模型。
在C代码选项卡上,选择代码接口>默认的代码映射。
在代码映射编辑器中,单击数据默认值选项卡。
扩大信号。选择类别信号、状态和内部数据。
单击图标。集记忆的部分来internalDataMem
。
单击功能默认值选项卡。
为初始化和终止类别,选择功能定制模板exSlowFunction
。
为执行类别,选择模板exFastFunction
。
保存模型。
生成和检查代码。
更多信息建立嵌入式编码字典,看到的定义存储类、内存部分,为软件架构和功能模板。
这个例子展示了如何配置默认的数据和函数的代码生成模型为例rtwdemo_configdefaults
,示例使用默认的编程接口映射到指定的代码生成模型数据和功能要求。使用这个接口自动化配置,或者如果你喜欢以编程方式配置模型。配置默认的数据信息和功能代码生成通过使用映射编辑器的代码,看看配置默认C代码生成类别的数据元素和功能。
打开模型
该模型rtwdemo_configdefaults
使用多个执行利率和单实例的配置使用。
open_system (“rtwdemo_configdefaults”)
代码生成的需求
对于这个示例,这些代码生成要求:
导入项目类型定义的数据类型双
DBL_FLOAT,头文件exDblFloat.h
。
输入信号ex_input1
计算一个值存储在内存和用于开关组的if - else条件。从头文件导入信号数据exInDataMem.h
。
进口的信号ex_input2
,ex_input3
,ex_input4
为查找表表1
和表二
。从头文件导入信号数据exInDataLut.h
。
头文件导入到模型的数据exInDataMem.h
和exInDataLut.h
的类型是DBL_FLOAT
,一个项目的标准。
参数上
,较低的
,K1
,K2
是参数对象存储在模型空间。参数表示为全局变量在生成的代码中。
数据元素X
代表了延迟单元的延迟块。
在内存中存储数据内部的模型部分internalDataMem
。
存储在内存中生成的初始化和终止功能部分functionSlowMem
在内存和执行功能部分functionFastMem
。
使用标识符命名规则exSlow_ $ N
的名字初始化
和终止
入口点函数。使用命名规则exFast_ $ N
名执行。5秒和1.5秒周期函数的功能。设置1秒周期函数的名称exFast_1sec
。
出口输出数据声明头文件exSysOut.h
和定义exSysOut.c
。
对于这个示例,某人,比如系统架构师,曾创造了这些代码定义在嵌入式编码字典是模型的一部分数据字典金宝appexCodeDefs.sldd
:
记忆的部分internalDataMem
,functionFastMem
,functionSlowMem
。
功能定制模板exFastFunction
和exSlowFunction
。
获取数据和功能代码的映射模型
例如代码映射模型rtwdemo_configdefaults
通过指定模型在调用函数的名称coder.mapping.api.get
。函数返回一个对象,该对象代表了代码的映射模型。你指定对象作为第一个参数在随后的API调用其他函数。
如果代码映射模型不存在,创建一个映射对象通过调用代码coder.mapping.utils.create
。
厘米= coder.mapping.api.get (“rtwdemo_configdefaults”);
设置相关的类别、属性和值的组合
设置相关的类别、属性和值的组合调用setDataDefaults
和setFunctionDefaults
。前两个参数指定为这些函数返回的代码映射对象coder.mapping.api.get
和一个数据或函数类别的名称。此外,您指定名称-值对参数指定你想要设置的默认配置信息,如存储类和存储类属性。
在本例中,您设置了默认值:
存储类尺寸街区、外港块和模型参数
内存部分内部数据(例如,signald和块状态)
头和定义文件尺寸和外港块
初始化函数定制模板,终止和执行功能
%配置数据默认值setDataDefault(厘米,“港口”,“StorageClass”,“ImportFromFile”,“HeaderFile”,“exInDataLut.h”);setDataDefault(厘米,“输出港”,“StorageClass”,“ExportToFile”,“HeaderFile”,“exSysOut.h”,…“DefinitionFile”,“exSysOut.c”);setDataDefault(厘米,“ModelParameters”,“StorageClass”,“ExportedGlobal”);setDataDefault(厘米,“InternalData”,“MemorySection”,“internalDataMem”);%配置功能默认值setFunctionDefault(厘米,“InitializeTerminate”,“FunctionCustomizationTemplate”,“exSlowFunction”);setFunctionDefault(厘米,“执行”,“FunctionCustomizationTemplate”,“exFastFunction”);
验证默认映射
验证默认映射调用getDataDefaults
和getFunctionDefaults
。前两个参数指定为这些函数返回的代码映射对象coder.mapping.api.get
和一个数据或函数类别的名称。此外,您指定的名称配置信息,你想要的函数返回,如存储类的名称或一个存储类属性。
在本例中,您核实这些默认设置:
存储类尺寸街区、外港块和模型参数
内存部分内部数据(例如,信号数据和块状态)
头和定义文件尺寸和外港块
初始化函数定制模板,终止和执行功能
%验证默认数据配置defscInports = getDataDefault(厘米,“港口”,“StorageClass”)
defscInports = ' ImportFromFile '
defhfileInports = getDataDefault(厘米,“港口”,“HeaderFile”)
defhfileInports = ' exInDataLut.h '
defscOutport = getDataDefault(厘米,“输出港”,“StorageClass”)
defscOutport = ' ExportToFile '
defhfileOutport = getDataDefault(厘米,“输出港”,“HeaderFile”)
defhfileOutport = ' exSysOut.h '
defdffileOutport = getDataDefault(厘米,“输出港”,“DefinitionFile”)
defdffileOutport = ' exSysOut.c '
defscParams = getDataDefault(厘米,“ModelParameters”,“StorageClass”)
defscParams = ' ExportedGlobal '
defmemInternal = getDataDefault(厘米,“InternalData”,“MemorySection”)
defmemInternal = ' internalDataMem '
%验证默认功能配置deftempInitTerm = getFunctionDefault(厘米,“InitializeTerminate”,“FunctionCustomizationTemplate”)
deftempInitTerm = ' exSlowFunction '
deftempExecution = getFunctionDefault(厘米,“执行”,“FunctionCustomizationTemplate”)
deftempExecution = ' exFastFunction '
单个数据元素配置为使用默认配置设置
每个模型的存储类数据元素集汽车
,这意味着代码生成器可能消除或改变的代表性相关代码进行优化。如果不可能优化,代码生成器模型适用于默认配置。
避免优化和强制代码生成器使用默认配置,设置存储类模型的默认
。
覆盖默认配置,指定存储类符合尺寸的代码生成的要求。
对于这个示例,您配置代码生成器将默认的存储类设置应用到尺寸块,输出块中,模型参数和状态X
为单位延迟块。使用找到
函数获取数据元素的名称在不同类别的模型。然后,使用返回的值找到
在调用setInport
,setOutport
,setModelParameter
,设置状态
设置存储类模型的默认
。使用电话getInport
,getOutport
,getModelParameter
,getState
验证、存储类设置。
在每个函数调用,您指定返回的代码映射对象coder.mapping.api.get
。此外:
在调用找到
功能,您指定一个值,指出代码映射函数返回的信息。
调用setInport
,setOutport
,setModelParameter
,设置状态
确定你想配置和数据元素名称-值对参数,指定你想要设置的配置信息,如存储类或一个存储类属性。
调用getInport
,getOutport
,getModelParameter
,getState
标识一个数据元素,你想返回配置信息和你想要的信息的类型函数返回。
输入=找到(厘米,“港口”);setInport (cm、输入、“StorageClass”,“模型默认”);输出=找到(厘米,“输出港”);setOutport (cm、输出“StorageClass”,“模型默认”);params =找到(厘米,“ModelParameters”);setModelParameter (cm,参数,“StorageClass”,“模型默认”);州=找到(厘米,“州”);设置状态(cm、状态“StorageClass”,“模型默认”);scIn1 = getInport(厘米,“三机”,“StorageClass”)
scIn1 =“模型默认”
scIn2 = getInport(厘米,“In2”,“StorageClass”)
scIn2 =“模型默认”
scIn3 = getInport(厘米,“In3”,“StorageClass”)
scIn3 =“模型默认”
scIn4 = getInport(厘米,“In4”,“StorageClass”)
scIn4 =“模型默认”
scK1 = getModelParameter(厘米,“K1”,“StorageClass”)
scK1 =“模型默认”
scTable2 = getModelParameter(厘米,“表”,“StorageClass”)
scTable2 =“模型默认”
scK2 = getModelParameter(厘米,“K2”,“StorageClass”)
scK2 =“模型默认”
scX = getState(厘米,rtwdemo_configdefaults /延迟的,“StorageClass”)
scX =“模型默认”
覆盖默认设置头文件尺寸块三机一体
以前,你设置的默认头文件港口exInDataLut.h
。轮廓尺寸的需求指定导入数据块三机一体
的头文件exInDataMem.h
。
为轮廓尺寸
块三机一体
,覆盖默认的存储类ImportFromFile
并设置头文件exInDataMem.h
与调用setInport
。函数调用指定返回的代码映射对象coder.mapping.api.get
,尺寸块配置的名称,名称-值对参数指定函数集StorageClass
来ImportFromFile
和HeaderFile
来exInDataMem.h
。
setInport(厘米,“三机”,“StorageClass”,“ImportFromFile”,“HeaderFile”,“exInDataMem.h”);
验证头文件设置
验证更新头文件设置尺寸块三机一体
与调用getInport
,函数调用指定返回的代码映射对象coder.mapping.api.get
感兴趣的,尺寸的块的名字,和配置信息返回。
hfileIn1 = getInport(厘米,“三机”,“StorageClass”)
hfileIn1 = ' ImportFromFile '
为阶跃函数覆盖缺省函数名设置
以前,你设置默认函数为exeuction功能定制模板functionFastMem,
应用的命名规则exFast_ $ N
这三个步骤生成的函数模型。需求指定函数的名称周期:D2
样品时间1 seccond,具名exFast_1sec。
设置调用的函数名setFunction
,函数调用指定返回的代码映射对象coder.mapping.api.get
源函数的周期性:D2,名称-值对参数指定函数的函数名exFast_1sec
。
setFunction(厘米,“周期:D2”,“FunctionName”,“exFast_1sec”)
检查函数名称设置
验证更新函数名称设置为执行函数周期:D2
与调用getFunction
,函数调用指定返回的代码映射对象coder.mapping.api.get
、感兴趣的功能和属性FunctionName
。
functionName = getFunction(厘米,“周期:D2”,“FunctionName”)
functionName = ' exFast_1sec '
相关链接