主要内容

通过指定数据类型生成高效的代码块的参数

生成更高效的代码,匹配块参数的数据类型(如获得参数的获得块)与信号数据类型。或者,您可以存储参数较小的数据类型。

消除不必要的类型转换和变化匹配的数据类型

这些例子展示了如何生成高效的代码通过配置一块参数使用相同的数据类型作为一个块操作的信号。

数据类型信息存储在模型中

打开示例模型rtwdemo_configrpinterface和配置它来显示生成的块的名字。

open_system (“rtwdemo_configrpinterface”)set_param (“rtwdemo_configrpinterface”,“HideAutomaticNames”,“关闭”)

建模选项卡上,单击模型数据编辑器

在模型数据编辑器中,选择参数选项卡。

在模型中,选择获得块。在模型数据编辑器中,数据类型列显示的数据类型获得块的参数设置继承:同样作为输入。有了这个设置,获得参数的块使用相同的数据类型作为输入信号。

在代码映射编辑器中,参数,K1设置存储类ExportedGlobal

在模型数据编辑器中,集改变观点设计

在数据表中,行表示K1,在数据类型列,选择汽车。这个设置,获得其数据类型的参数对象的块参数(在本例中,使用对象获得块参数)。

另外,创建和配置对象,使用这些命令在命令提示符:

厘米= coder.mapping.api.get (“rtwdemo_configrpinterface”);setModelParameter(厘米,“K1”,“StorageClass”,“ExportedGlobal”);探测= get_param (bdroot,“modelworkspace”);hws.setVariablePart (“K1.DataType”,“汽车”);

从模型中生成代码。

slbuild (“rtwdemo_configrpinterface”)
# # #开始构建过程:rtwdemo_configrpinterface # # #成功完成代码生成:rtwdemo_configrpinterface模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_configrpinterface代码生成的代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米18.715秒

生成的文件rtwdemo_configrpinterface。c定义全局变量K1通过使用数据类型real_T。

文件= fullfile (“rtwdemo_configrpinterface_grt_rtw”,“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,“/ *导出块参数* /”,“real_T K1 = 2.0;”,1,1)
* / / *导出块参数real_T K1 = 2.0;/ *变量:K1

生成的代码的算法模型一步函数使用K1直接没有世俗偏见。

rtwdemodbtype(文件,“输出= ',“10 u ',1,1)
输出= K1 * look1_binlc ((* input2), rtCP_Table1_bp01Data rtCP_Table1_tableData 10 u);

在代码映射编辑器中,参数,您可以选择设置K1的存储类继承:继承通过内部规则(默认)。

在这种情况下,块参数选择相同的数据类型作为输入信号,翻倍。然而,当您使用继承:继承通过内部规则在其他情况下(例如,当您使用定点数据类型),块参数可能会选择一个不同的数据类型。

在参数对象存储数据类型信息

当你使用金宝appSimulink.Parameter对象导出或导入参数数据从外部代码生成的代码,例如通过应用存储类ImportedExtern,您可以指定数据类型的参数对象的信息。匹配的数据类型与信号数据类型参数对象,创建一个金宝appSimulink.NumericType金宝appSimulink.AliasType对象。你可以严格控制参数对象的数据类型使用在生成的代码中,消除的风险模型选择一个不同的数据类型,当你修改模型。金宝app

在命令提示符处,创建一个金宝appSimulink.NumericType对象代表了数据类型的两倍。

myType = 金宝appSimulink.NumericType;myType。DataTypeMode =“双”;

使用模型数据编辑器数据类型列设置这些数据类型myType:

  • 参数对象。使用参数选项卡。

  • 尺寸的块命名In2。使用港口/外港选项卡。由于数据类型传播,输入信号的增益也使用myType

使用模型数据编辑器参数选项卡设置的数据类型获得块参数继承:继承“增益”

使用这个数据类型对象作为参数的数据类型对象。

另外,配置对象和块,使用这些命令在命令提示符:

K1。数据类型=“myType”;set_param (“rtwdemo_configrpinterface / In2”,“OutDataTypeStr”,“myType”)set_param (“rtwdemo_configrpinterface /增益”,“ParamDataTypeStr”,继承:继承“增益”)

从模型中生成代码。

slbuild (“rtwdemo_configrpinterface”)
# # #开始构建过程:rtwdemo_configrpinterface # # #成功完成代码生成:rtwdemo_configrpinterface模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_configrpinterface生成的代码生成的代码是过时了。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米16.713秒

全局变量K1real_T继续使用的数据类型。

文件= fullfile (“rtwdemo_configrpinterface_grt_rtw”,“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,“/ *导出块参数* /”,“real_T K1 = 2.0;”,1,1)
* / / *导出块参数real_T K1 = 2.0;/ *变量:K1

关闭代码生成报告。

rtwdemoclean;

减少内存消耗小的数据类型存储参数值

当你使用一个参数对象(例如,金宝appSimulink.Parameter)设置参数值,您可以配置对象出现在生成的代码作为一个可调的全局变量。默认情况下,参数对象和相应的全局变量通常使用相同的数据类型的信号或信号阻塞操作。例如,如果输入信号的增益块使用的数据类型int16,参数对象通常使用相同的数据类型。减少这个变量的内存消耗,指定该变量使用一个较小的整数数据类型等int8

在整数数据类型存储参数值

打开模型rtwdemo_configrpinterface并设置模型的属性。

open_system (“rtwdemo_configrpinterface”)set_param (“rtwdemo_configrpinterface”,“HideAutomaticNames”,“关闭”)set_param (“rtwdemo_configrpinterface”,“ShowPortDataTypes”,“上”)set_param (“rtwdemo_configrpinterface”,“SimulationCommand”,“更新”)

许多信号模型中使用的数据类型

建模选项卡上,单击模型数据编辑器

在模型数据编辑器,检查参数选项卡。

单击显示/刷新的额外信息按钮。

旁边的内容过滤框,激活过滤器使用选择按钮。

在模型中,单击获得块。模型数据编辑器显示了对应的一行获得参数块和一行对应MATLAB变量K1,设置参数值2K1驻留在模型空间。

在C代码选项卡中,选择代码接口>默认代码映射。在代码映射编辑器中,参数,K1设置存储类ExportedGlobal

厘米= coder.mapping.api.get (“rtwdemo_configrpinterface”);setModelParameter(厘米,“K1”,“StorageClass”,“ExportedGlobal”);

在C代码选项卡中,选择代码接口>默认映射代码。在模型数据编辑器中,集改变观点设计并确保数据类型K1int8

探测= get_param (bdroot,“modelworkspace”);hws.setVariablePart (“K1.DataType”,“int8”);

行表示获得块参数,数据类型列,设置下拉列表继承:继承“增益”。有了这个设置,获得参数块继承的int8数据类型的参数对象。

set_param (“rtwdemo_configrpinterface /增益”,“ParamDataTypeStr”,继承:继承“增益”)

从模型中生成代码。

slbuild (“rtwdemo_configrpinterface”)
# # #开始构建过程:rtwdemo_configrpinterface # # #成功完成代码生成:rtwdemo_configrpinterface模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_configrpinterface代码生成的代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米14.769秒

生成的文件rtwdemo_configrpinterface.c定义全局变量K1通过使用数据类型int8_T对应的数据类型int8在仿真金宝app软件。

文件= fullfile (“rtwdemo_configrpinterface_grt_rtw”,“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,“/ *导出块参数* /”,“int8_T K1 = 2;”,1,1)
* / / *导出块参数int8_T K1 = 2;/ *变量:K1

在模型中代码的算法一步函数使用K1计算得到的输出块。该算法将K1的数据类型real_T(),因为涉及的信号计算使用的数据类型real_T

rtwdemodbtype(文件,“输出= ',“10 u ',1,1)
输出= (real_T) K1 * look1_binlc ((* input2), rtCP_Table1_bp01Data rtCP_Table1_tableData 10 u);

定点参数值存储在较小整数数据类型

假设你配置信号模型中使用定点数据类型。你想要一个增益参数出现在生成的代码作为一个可调的全局变量。你知道真实的范围值,你期望的参数假设(例如,0到4)。如果你能满足您的应用程序需求尽管精度降低,可以减少内存消耗通过配置参数来使用不同的数据类型的输入和输出信号。

打开示例模型fxpdemo_direct_form2并配置它来显示生成的块的名字。

load_system (“fxpdemo_direct_form2”)set_param (“fxpdemo_direct_form2”,“HideAutomaticNames”,“关闭”)open_system (“fxpdemo_direct_form2”)

更新框图。信号在该模型中使用签署了定点数据类型的字长16和binary-point-only缩放。

打开Gain5块对话框。的获得参数设置为1.85。假设你想配置该参数。

获得myGainParam并点击应用

点击操作按钮(三个垂直点)旁边的参数值。选择创建

在创建新的数据对话框中,设置价值金宝appSimulink.Parameter (1.85)并点击创建。的金宝appSimulink.Parameter对象myGainParam出现在基地工作空间。

打开金宝app仿真软件编码器应用。在C代码选项卡中,选择代码接口>默认代码映射。在代码映射编辑器中,参数,设置存储类myGainParamExportedGlobal。这个设置,myGainParam出现在生成的代码作为一个全局变量。

在块对话框,参数属性选项卡,设置参数最小0参数的最大4

参数的数据类型fixdt (0, 8)并点击应用

单击显示数据类型的助理按钮。数据类型助理显示表达式fixdt (0, 8)指定一个无符号定点数据类型的字长8和best-precision缩放。模拟或生成代码时,块参数选择一小部分长度(缩放),使参数之间的数据类型来表示值最小和最大(0和4)最好的精度。

数据类型的助理,集扩展二点。点击计算Best-Precision扩展,定点的细节,刷新的细节。下的信息定点的细节显示长度5可以代表一小部分参数值精度为0.03125。

扩展最好的精度并点击好吧。在这个例子中,模拟或生成代码时,块参数选择一小部分的长度5。

或者,您可以使用这些命令在命令提示符来创建对象和配置块:

myGainParam = 金宝appSimulink.Parameter (1.85);myGainParam.CoderInfo。StorageClass =“ExportedGlobal”;set_param (“fxpdemo_direct_form2 / Gain5”,“获得”,“myGainParam”)set_param (“fxpdemo_direct_form2 / Gain5”,“ParamMin”,' 0 ',“ParamMax”,“4”)set_param (“fxpdemo_direct_form2 / Gain5”,“ParamDataTypeStr”,“fixdt (0, 8)”)

配置模型来产生一个代码生成报告。减少杂波在命令窗口中,明确的配置参数详细的构建

set_param (“fxpdemo_direct_form2”,“GenerateReport”,“上”,“LaunchReport”,“上”,“RTWVerbose”,“关闭”)

从模型中生成代码。

evalc (“slbuild (“fxpdemo_direct_form2”)”);

生成的文件fxpdemo_direct_form2.c定义全局变量myGainParam通过使用数据类型uint8_T对应于指定的字长,8。变量初始化的代码通过使用一个整数值,考虑到部分的长度5,表示现实世界中的参数值1.85。

文件= fullfile (“fxpdemo_direct_form2_grt_rtw”,“fxpdemo_direct_form2.c”);rtwdemodbtype(文件,“/ *导出块参数* /”,“uint8_T myGainParam = 59 u;”,1,1)
* / / *导出块参数uint8_T myGainParam = 59 u;/ *变量:myGainParam

算法使用的代码myGainParam计算Gain5块的输出。该算法使用一个C转向规模计算的结果。

rtwdemodbtype(文件,/ *获得:“< Root > / Gain5”了:“,/ *获得:“< Root > /增益”了:“,1,0)
/ *获取:“< Root > / Gain5”包含:* UnitDelay:“< Root > /单位Delay1”* / fxpdemo_direct_form2_B。Gain5 = (int16_T) ((myGainParam * fxpdemo_direct_form2_B.UnitDelay1) > > 5);
rtwdemoclean;

相关的话题