为C代码生成配置模型数据接口
为了将生成的代码与外部代码集成,或者为了生成符合编码标准和准则的代码,您可以配置模型中的数据元素(比如块参数和信号线)如何在生成的代码中出现。您可以使用code Mappings编辑器或代码映射API为数据元素类别配置默认代码生成设置,并配置各个元素。例如,您可以配置如下设置:
控制生成文件和外部(导出和导入)文件中声明和定义的位置。
将多个数据项打包到结构中。
应用存储类型限定符
常量
而且挥发性
.
这个例子展示了如何为示例模型的代码生成配置数据元素rtwdemo_configinterface
.
探索范例模型
开放范例模型rtwdemo_configinterface。
模型=“rtwdemo_configinterface”;open_system(模型)
这个例子展示了如何配置这些模型数据元素来生成代码:
轮廓尺寸
块三机一体
,In2
,In3
,In4
外港块
着干活
模型参数参数
较低的
而且上
模型参数
K1
,表1
,一个
nd表二
本地数据存储
模式
来自查找表块的信号线
表1
而且表二
状态
X
(延迟)
配置默认设置轮廓尺寸
块
打开嵌入式编码器应用程序。
在C代码选项卡上,选择代码接口>默认代码映射.
在“代码映射”编辑器中导入和输出,选择类别港口.将默认存储类设置为
ImportFromFile
.在属性检查器中,设置头文件来
exInDataLut.h
.
为输出端口块配置默认设置
在数据默认值选项卡,在导入和输出,选择类别外港.将默认存储类设置为
ExportToFile
.在属性检查器中,设置头文件来
exOutSys.h
而且定义文件来exOutSys.c
.
配置参数的默认设置
在数据默认值选项卡,在参数,选择类别模型参数参数.将存储类设置为
默认的
.使用该设置,代码生成器为每个参数实例分配一个单独的内存区域。选择类别模型参数.链接文本
'Auto'将被内联
指示默认情况下将代码生成器配置为内联模型参数。对于本例,将模型参数配置为可调的。点击'Auto'将被内联
.打开“模型配置参数”对话框。设定模型配置参数默认参数行为来
可调
.保存更改并关闭对话框。在“代码映射”编辑器中,链接文本更改为Auto是可调的
.在代码映射编辑器中,使用模型参数选择类别后,将存储类设置为
ConstVolatile
.
配置信号、状态和数据存储的默认设置
在数据默认值选项卡,在信号,选择类别信号、状态和内部数据.将默认存储类设置为FileScope。
为共享本地数据存储配置默认代码映射。选择类别共享本地数据存储.将存储类设置为
挥发性
.保存模型。
为单个导入块配置代码生成设置
在代码映射编辑器中,单击港口选项卡。编辑器列出根级别的名称
轮廓尺寸
而且总线元件
模型中的块。如果端口解析为信号对象,则在元素名称的右侧出现一个解析为信号对象的图标。每个导入的存储类都设置为汽车
,这意味着代码生成器可能会出于优化目的而删除相关代码。如果不可能进行优化,代码生成器将应用模型默认配置。对于本例,模型默认配置指定存储类ImportedFromFile
.若要避免避免优化并强制代码生成器使用默认配置,请将存储类设置为模型的默认
.若要覆盖默认配置,请指定满足该导入的代码生成要求的存储类。配置代码生成器,将默认存储类设置应用于导入
In2
,In3
,In4
.为三个导入选择行。然后,对于选中的一个导入,将存储类设置为模型默认值:ImportFromFile
.所选三个导入的存储类更改为Model default: ImportFromFile。的尺寸。
三机一体
,覆盖默认的存储类设置。将存储类设置为ImportFromFile
.在属性检查器中,设置头文件来exInDataMem.h
.为导入配置代码标识符,以便生成的代码中的变量与外部头文件和定义文件中的接口名称匹配。在Code Mappings编辑器中,选择每个导入的行。在属性检查器中,设置标识符属性转换为以下值:
input1
,input2
,input3
,input4
.
为个别输出端口块配置代码生成设置
在代码映射编辑器中,单击外港选项卡。编辑器列出根级别的名称
外港
而且输出总线元件
模型中的块。如果端口解析为信号对象,则在元素名称的右侧出现一个解析为信号对象的图标。示例模型中输出端口的存储类设置为汽车
,这意味着代码生成器可能会出于优化目的而删除相关代码。要避免优化并强制代码生成器使用默认配置,请将存储类设置为
模型默认值:ExportToFile
.所选输出端口的存储类更改为模型默认值:ExportToFile
.配置输出端口的代码标识符,以便生成的代码中的变量与外部代码使用的接口名称匹配。在“代码映射”编辑器中,选择输出端口的行。在属性检查器中,设置标识符财产
输出
.
配置个别参数的代码生成设置
在代码映射编辑器中,单击参数选项卡。扩大模型参数参数.默认情况下,每个模型参数参数的存储类设置为
汽车
,这意味着代码生成器可能会出于优化目的而删除相关代码。如果不可能进行优化,代码生成器将应用模型默认配置。对于本例,将存储类设置为汽车
.扩大模型参数.默认情况下,每个模型参数的存储类设置为
汽车
.对于本例,您希望避免优化,并让代码生成器使用默认的存储类设置ConstVolatile。在“代码映射”编辑器中模型参数,选择参数
K1
,表1
,表二
.将存储类设置为模型默认值:ConstVolatile
.为名称包含前缀的模型参数配置代码标识符
mp_
,如需求所指定。在代码映射编辑器中,选择模型参数K1
.在属性检查器中,展开代码节点。设置存储类属性标识符来mp_K1
.为参数表1
而且表二
,设置标识符来mp_Table1
而且mp_Table2
.
配置单个数据存储的代码生成设置
在代码映射编辑器中,单击数据存储选项卡。扩大本地数据存储.用于数据存储模式的存储类被设置为Auto,这意味着代码生成器可能会出于优化目的而删除相关代码。对于本例,您希望避免优化,并让代码生成器使用默认的存储类设置,
挥发性
.在“代码映射”编辑器中选择本地数据存储
模式
.将存储类设置为模型默认值:Volatile
.为数据存储配置包含前缀的代码标识符
ds_
.在“代码映射”编辑器中,选择共享本地数据存储模式
.在属性检查器中,展开代码节点。设置存储类属性标识符来ds_mode
.
为个别州配置代码生成设置
在代码映射编辑器中,单击信号/州选项卡。扩大州.状态的存储类设置为
汽车
,这意味着代码生成器可能与优化目的相关的代码。对于本例,您希望避免优化,并让代码生成器使用默认的存储类设置,FileScope
.在代码映射编辑器中,选择状态
X
.将存储类设置为模型默认值:FileScope
.用包含前缀的名称配置状态的代码标识符
dstate_
,如需求所指定。在代码映射编辑器中,选择状态X
.在属性检查器中,展开代码节点。然后,设置存储类属性标识符来dstate_X
.
配置单个信号的码生成设置
向模型代码映射中添加您想配置的信号。对于本例,在模型代码中添加两个查找表块的输出信号映射。然后,配置这些信号。
在代码映射编辑器中,单击信号/州选项卡。没有信号被列出。
向代码映射添加信号。用于查找表块的输出信号
表1
而且表二
,在模型中,选择一个信号,在信号线上方或下方出现的省略号上暂停以打开操作栏,然后单击添加信号按钮。在“代码映射”编辑器中信号Node展开并列出所添加的两个信号的名称或块标识符。如果信号解析为信号对象,则在元素名称或端口标识符的右侧出现一个解析为信号对象的图标。每个信号的存储类都设置为汽车
,这意味着代码生成器可能会出于优化目的而删除相关代码。对于本例,您希望避免优化,并让代码生成器使用默认的存储类设置,FileScope
.在Code Mappings编辑器中,选择块的输出信号
表1
而且表二
.将存储类设置为模型默认值:FileScope
.为名称包含前缀的两个查找表块的输出信号配置代码标识符
dout
.在代码映射编辑器中,选择信号Table1:1
.在属性检查器中,展开代码节点。设置存储类属性标识符来dout_Table1
.对信号Table2:1
,设置标识符来dout_Table2
.保存模型。
为代码生成配置数据
或者,使用代码映射API以编程方式配置模型数据元素。
1.通过调用获取表示模型的代码映射的对象coder.mapping.api.get
.在随后调用代码映射函数时,将返回的对象指定为第一个参数。
Cm = code .mapping.api.get(model);
2.为调用的数据元素类别配置默认代码生成设置setDataDefaults
.在每个调用中,包含调用返回的对象coder.mapping.api.get
、数据元素类别的名称,以及指定存储类和存储类属性的名-值对参数。使用setDataDefaults
要配置这些默认设置:
轮廓尺寸
具有存储类的块ImportFromFile
头文件exInDataLut.h
用存储类ExportTo导出块
文件
头文件exOutSys.h
定义文件exOutSys.c
使用代码生成器默认配置对参数参数进行建模
使用存储类建模参数
ConstVolatile
使用存储类的内部数据(信号、状态和本地数据存储)
FileScope
具有存储类的共享locoal数据存储
挥发性
setDataDefault(厘米,“港口”,“StorageClass”,“ImportFromFile”,“HeaderFile”,“exInDataLut.h”);setDataDefault(厘米,“输出港”,“StorageClass”,“ExportToFile”,“HeaderFile”,“exOutSys.h”,...“DefinitionFile”,“exOutSys.c”);setDataDefault(厘米,“ModelParameterArguments”,“StorageClass”,“默认”);setDataDefault(厘米,“ModelParameters”,“StorageClass”,“ConstVolatile”);setDataDefault(厘米,“InternalData”,“StorageClass”,“FileScope”);setDataDefault(厘米,“SharedLocalDataStore”,“StorageClass”,“不稳定”);
设定模型配置参数DefaultParameterBehavior
来可调
,以便在程序执行时可以访问模型参数。
set_param(模型,“DefaultParameterBehavior”,可调的);
3.配置个人轮廓尺寸
调用的块setInport
.为避免优化,请应用的默认配置轮廓尺寸
块In2
,In3
,In4
.为三机一体
,重写默认配置,通过将存储类设置为ImportFromFile
和头文件exInDataMem.h
.另外,为导入配置代码标识符,以便在生成的代码中表示导入的全局变量与外部定义文件中的变量名匹配。在每次调用setInport
,指定返回的对象coder.mapping.api.get
,轮廓尺寸
块名称,以及存储类和属性设置的名值对参数。
setInport(厘米,“三机”,“StorageClass”,“ImportFromFile”,“HeaderFile”,“exInDataMem.h”,...“标识符”,“Input1”);setInport(厘米,“In2”,“StorageClass”,“模型默认”,“标识符”,“Input2”);setInport(厘米,“In3”,“StorageClass”,“模型默认”,“标识符”,“Input3”);setInport(厘米,“In4”,“StorageClass”,“模型默认”,“标识符”,“Input4”);
4.为Outport块配置单独的数据元素设置着干活
用一个电话setOutport
.为了避免优化,应用默认配置。另外,为输出端口配置代码标识符。在对setOutport
,指定返回的对象coder.mapping.api.get
、Outport块名称,以及存储类和代码标识符属性设置的名值对参数。
setOutport(厘米,着干活的,“StorageClass”,“模型默认”,“标识符”,“输出”);
5.通过调用来配置各个模型参数setModelParameter
.为了避免优化,应用默认配置。另外,为参数配置代码标识符。在每次调用setModelParameter
,指定返回的对象coder.mapping.api.get
、参数名以及存储类和代码标识符属性设置的名-值对参数。
setModelParameter(厘米,“K1”,“StorageClass”,“模型默认”,“标识符”,“mp_K1”);setModelParameter(厘米,“表1”,“StorageClass”,“模型默认”,“标识符”,“mp_Table1”);setModelParameter(厘米,“表”,“StorageClass”,“模型默认”,“标识符”,“mp_Table2”);
6.为本地数据存储配置各个数据元素设置模式
用一个电话setDataStore
.为了避免优化,应用默认配置。另外,为数据存储配置代码标识符。在对setDataStore
,指定返回的对象coder.mapping.api.get
、数据存储名称以及存储类和代码标识符属性设置的名值对参数。
setDataStore(厘米,“模式”,“StorageClass”,“模型默认”,“标识符”,“ds_mode”);
7.为状态配置各个数据元素设置X
用一个电话设置状态
.为了避免优化,应用默认配置。另外,为状态配置代码标识符。在对设置状态
,指定返回的对象coder.mapping.api.get
、使用状态的块的路径,以及存储类和代码标识符属性设置的名值对参数。
设置状态(厘米,rtwdemo_configinterface /延迟的,“StorageClass”,“模型默认”,...“标识符”,“dstate_X”);
8.向代码映射添加信号,并使用调用来配置它们setSignal
添加端口句柄,将信号数据添加到调用的模型代码映射中get_param
.然后,在调用中指定块句柄addSignals
.要避免优化,请对信号应用默认配置。另外,为信号配置代码标识符。在每次调用setSignal
,指定返回的对象coder.mapping.api.get
、信号源的路径或块句柄,以及存储类和代码标识符属性设置的名称-值对参数。
lut1D_ports = get_param(“rtwdemo_configinterface / Table1”,“PortHandles”);lut2D_ports = get_param(“rtwdemo_configinterface /表”,“PortHandles”);lut1D_outPort = lut1D_ports.Outport;lut2D_outPort = lut2D_ports.Outport;addSignal(厘米,[lut1D_outPort lut2D_outPort]);lut1D_outPort setSignal (cm,“StorageClass”,“模型默认”,“标识符”,“dout_Table1”);lut2D_outPort setSignal (cm,“StorageClass”,“模型默认”,“标识符”,“dout_Table2”);
生成和查看代码
1.生成的代码。
rtwbuild(模型)
###开始构建过程:rtwdemo_configinterface成功完成代码生成:rtwdemo_configinterface构建摘要顶层模型目标构建:模型动作重建原因=========================================================================================== rtwdemo_configinterface代码生成的代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 44.138s
2.查看代码。例如,在rtwdemo_configinterface.c中,找到这些变量在步骤入口点函数中使用的位置:input1
,input2
,input3
,input4
,输出
,mp_K1
,ds_mode
,dstate_X
,dout_Table1
,dout_Table2
.