提高代码可读性为MATLAB函数块
要求使用可读性优化
使用可读性优化你的代码,你必须有一个嵌入式编码器®许可证。这些优化仅出现在嵌入式实时代码生成(导
)目标。
请注意
这些优化不适用于MATLAB®文件,你的电话MATLAB函数块。
有关更多信息,请参见配置一个系统目标文件。
转换If-Elseif-Else代码切换实例语句
为嵌入式实时目标生成代码时,您可以选择转换if-elseif-else
决策逻辑,切换实例
语句。这种转换可以提高代码的可读性。
例如,当一个MATLAB函数块包含了一长串的条件切换实例
结构:
减少使用括号和大括号
最大限度地减少重复生成的代码
如何将If-Elseif-Else代码切换实例语句
以下步骤描述了如何转换生成的代码MATLAB函数块从if-elseif-else
来切换实例
语句。
转换规则
转换发生,必须持有以下规则。lh和RHS参考左边和右边的条件,分别。
构造 | 规则 |
---|---|
MATLAB函数块 | 必须有两个或两个以上的吗独特的条件,除了一个默认。 有关更多信息,请参见转换如何处理重复的条件。 |
每个条件 | 必须测试平等。 |
必须使用相同的变量或lh的表达式。 请注意 你可以扭转lh和RHS。 |
|
每一个韩 | 必须是一个变量或表达式,而不是一个复合语句。 |
不能一个常数。 |
|
必须有一个整型或枚举数据类型。 |
|
不能对模拟有副作用。 例如,lh可以读但不能写全局变量。 |
|
每一个园艺学会 | 必须是一个常数。 |
必须有一个整型或枚举数据类型。 |
转换如何处理重复的条件
如果一个MATLAB函数块复制条件,转换只保留第一个条件。生成的代码丢弃重复条件的其他实例。
删除重复后,必须存在两个或两个以上的独特条件。否则,不发生转换,生成的代码包含实例重复的条件。
下面的例子展示如何转换处理重复的条件。
生成的代码的例子 | 代码转换后 |
---|---|
if (x = = 1) {block1} else if (x = = 2) {block2} else if (x = = 1){/ /复制block3} else if (x = = 3) {block4} else if (x = = 1){/ /复制block5} {block6}其他 |
开关(x){案例1:block1;打破;案例2:block2;打破;案例3:block4;打破;默认值:block6;打破;} |
if (x = = 1) {block1} else if (x = = 1){/ /复制block2} {block3}其他 |
不会改变,因为只存在一个独特的条件吗 |
转换代码的例子If-Elseif-Else决策逻辑来切换实例语句
假设你有以下模式MATLAB函数块。假定输出数据类型双
和输入数据类型控制器
枚举类型定义。
块包含以下代码:
函数系统= fcn(类型)% # codegen如果系统(type = = Controller.P) = 0;elseif (type = = Controller.I)系统= 1;elseif (type = = Controller.PD)系统= 2;elseif (type = = Controller.PI)系统= 3;elseif (type = = Controller.PID)系统= 4;其他系统= 10;结束
枚举类型定义Controller.m
是:
classdef控制器<仿真软件。金宝appIntEnumType枚举P(0)我(1)PD(2)π(3)PID(4)未知(10)结束
如果你为嵌入式实时生成代码的目标使用默认设置,你看到的是这样的:
如果(if_to_switch_eml_blocks_U。In1 = = P) {/ * < S1 >: 1:4的* / / * < S1 >: 1:5的* / if_to_switch_eml_blocks_Y。着干活= 0.0;如果(if_to_switch_eml_blocks_U}其他。In1 = =我){/ * < S1 >: 1:6的* / / * < S1 >: 1:7的* / if_to_switch_eml_blocks_Y。着干活= 1.0;如果(if_to_switch_eml_blocks_U}其他。In1 = = PD) {/ * < S1 >: 1:8的* / / * < S1 >: 1:9的* / if_to_switch_eml_blocks_Y。着干活= 2.0;如果(if_to_switch_eml_blocks_U}其他。In1 = =π){/ * < S1 >: 1:10的* / / * < S1 >: 1:11的* / if_to_switch_eml_blocks_Y。着干活= 3.0;如果(if_to_switch_eml_blocks_U}其他。In1 = = PID) {/ * < S1 >: 1:12的* / / * < S1 >: 1:13的* / if_to_switch_eml_blocks_Y。着干活= 4.0; } else { /* ':1:15' */ if_to_switch_eml_blocks_Y.Out1 = 10.0; }
lh变量if_to_switch_eml_blocks_U.In1
在生成的代码中多次出现。
请注意
默认情况下,变量出现在块不保留他们的名字在生成的代码中。修改标识防止命名冲突。
每组之间的可追溯性的评论出现/ *
和* /
标记。了解更多关于可追溯性,明白了在MATLAB函数块使用的可追溯性。
验证的内容块
检查块遵循规则转换规则。
构造 | 如何构建遵循规则 |
---|---|
MATLAB函数块 | 五个独特的条件存在,除了默认值:
|
每个条件 | 每一个条件:
|
每一个韩 | 每个lh:
|
每一个园艺学会 | 每一个园艺学会:
|
使转换
打开配置参数对话框。
在代码生成窗格中,选择
ert.tlc
为系统目标文件。这一步中指定一个嵌入式实时目标模型。
在代码生成>代码风格窗格中,选择转换if-elseif-else模式切换实例语句复选框。
提示
这种转换在每个模型的基础上工作。如果您选中此复选框后,转换适用于:
MATLAB函数在一个模型
MATLAB函数Stateflow®图表的模型
流程图在Stateflow图表模型
有关更多信息,请参见增强代码的可读性流程图。
为您的模型生成代码
在模型窗口中,出版社Ctrl + B。
的代码MATLAB函数块使用切换实例
语句代替if-elseif-else
代码:
开关(if_to_switch_eml_blocks_U.In1){案例P: / * < S1 >: 1:4的* / / * < S1 >: 1:5的* / if_to_switch_eml_blocks_Y。着干活= 0.0;打破;我:/ * < S1 >: 1:6的* / / * < S1 >: 1:7的* / if_to_switch_eml_blocks_Y。着干活= 1.0;打破;例PD: / * < S1 >: 1:8的* / / * < S1 >: 1:9的* / if_to_switch_eml_blocks_Y。着干活= 2.0;打破;PI: / * < S1 >: 1:10的* / / * < S1 >: 1:11的* / if_to_switch_eml_blocks_Y。着干活= 3.0;打破;案例PID: / * < S1 >: 1:12的* / / * < S1 >: 1:13的* / if_to_switch_eml_blocks_Y。着干活= 4.0;打破; default: /* ':1:15' */ if_to_switch_eml_blocks_Y.Out1 = 10.0; break; }
的切换实例
语句增强可读性提供以下福利:
减少了使用括号及括号的代码。
lh变量
if_to_switch_eml_blocks_U.In1
只出现一次,减少重复的代码。