把代码从可调参数表达式,饱和对整数溢出
优化生成的代码通过删除代码保护参数表达式从整数溢出整数和定点数据。如果你确信你不会调整的条款可调参数表达式来让他们评估值低于或高于可表示的值的数据类型,使这种优化。这种优化可以提高执行速度和结果在较小的代码,减少罗消费。
风险
当您选择EfficientTunableParamExpr
表达式的参数,调整条款,遇到一个整数溢出,结果将环绕在生成的代码。这种行为会导致应用程序在运行时意外行为。
注意:如果你启用这个优化,仿真结果和可能的结果生成的代码没有出现协议。这个例子需要嵌入式程序员®。
示例模型
在模型中matlab: mEfficientParamExpr输入信号的类型int8
提要成块。
模型=“mEfficientParamExpr”;open_system(模型);
生成代码
在你的系统临时文件夹,创建另一个临时文件夹的构建和检验过程。
currentDir = pwd;[~,cgDir] = rtwdemodir ();
构建的模型。
set_param(模型,“EfficientTunableParamExpr”,“关闭”);evalc (“slbuild(模型));
查看生成的代码没有优化。这是一部分mEfficientParamExpr.c
。
用= fullfile (cgDir,“mEfficientParamExpr_ert_rtw”,“mEfficientParamExpr.c”);rtwdemodbtype(用“/ *模型阶跃函数”,/ *模型初始化函数的,1,1);
/ *模型阶跃函数* /空白mEfficientParamExpr_step (void) {int32_T tmp;/ *获取:“< Root > /增益”* / tmp = P + Q;如果(tmp > 127) {tmp = 127;}如果(tmp < -128) {tmp = -128;}/ *外港:“< Root > /着干活”包含:*获得:“< Root > /增益”*尺寸:“< Root > / In1”* /而无。着干活= (int8_T) (tmp * rtU.In1);}
启用优化
打开配置参数对话框。
在优化窗格中,选择把代码从可调参数表达式,浸透超出范围的值。
另外,使用命令行API启用优化:
set_param(模型,“EfficientTunableParamExpr”,“上”);
生成代码的优化
优化代码不包含代码检查的范围的可表示的值的数据类型。
构建的模型。
evalc (“slbuild(模型));
下面是一部分mEfficientParamExpr.c
。防止表达式溢出的代码生成的代码。
rtwdemodbtype(用“/ *模型阶跃函数”,/ *模型初始化函数的,1,1);
/ *模型阶跃函数* /空白mEfficientParamExpr_step (void){/ *外港:“< Root > /着干活”包含:*获得:“< Root > /增益”*尺寸:“< Root > / In1”* /而无。着干活= (int8_T) ((int8_T) (P + Q * rtU.In1);}
关闭模型和代码生成报告。
bdclose rtwdemoclean(模型);cd (currentDir)