重复使用具有不同属性的相同变量
什么时候可以重用具有不同属性的相同变量
如果代码生成器能够在C/ c++代码生成过程中明确地确定该变量每次出现的属性,那么您可以重用(重新分配)具有不同类、大小或复杂性的输入、输出或局部变量。如果有,MATLAB®在生成的代码中创建单独的惟一命名的局部变量。您可以在代码生成报告中查看这些重命名的变量。
变量重用的一个常见示例是inif-elseif-else
或切换实例
语句。例如,下面的函数例二
首先使用变量t在一个如果
语句,其中它保存标量double,然后重用t外的如果
语句保存一个具有双精度对象的向量。
函数y = example1(u) %#codegen if all(all(u>0)) %首先,t用于保存标量双值t = mean(mean(u)) / numel(u);U = U - t;End % t被重用用于保存一个双精度向量t = find(u > 0);Y = sum(u(t(2:end-1));
当你不能重用变量
如果在代码生成期间不能明确地确定变量的类、大小和复杂性,则不能重用(重新分配)变量。在这种情况下,变量不能重命名,并发生编译错误。
例如example2
函数将一个定点值赋给x在如果
语句和重用x数组中存储一个双精度矩阵其他的
条款。然后它使用x后if - else
声明。方法之后,此函数将生成编译错误if - else
声明变量x可以有不同的属性if - else
条款执行。
函数y = example2(use_fixpoint, data) %#codegen如果use_fixpoint % x是fixed-point x = fi(data, 1,12,3);Else % x是一个双精度矩阵x = data;当x在这里被重用时,不可能确定它的%类、大小和复杂度t = sum(sum(x));Y = t > 0;结束
以了解MATLAB如何重命名重用变量t
:
创建MATLAB文件
example1.m
包含以下代码。函数y = example1(u) %#codegen if all(all(u>0)) %首先,t用于保存标量双值t = mean(mean(u)) / numel(u);U = U - t;End % t被重用用于保存一个双精度向量t = find(u > 0);Y = sum(u(t(2:end-1));结束
生成的MEX函数
例二
并生成代码生成报告。Codegen -o example1x -report example1。M -args {ones(5,5)}
打开代码生成报告。
在变量选项卡,您将看到两个唯一命名的局部变量
t > 1
和t > 2
.在变量列表中,单击
t > 1
.该报告突出显示了变量的实例t
在里面如果
声明。这些例子t
都是标量倍。点击
t > 2
.的实例,代码生成报告突出显示t
在外面如果
声明。这些例子t
变长列向量的上界是25
.
变量重用的局限性
以下变量不能在生成的代码中重命名:
持续的变量。
全局变量。
变量传递给C代码使用
coder.ref
,coder.rref
,coder.wref
.使用来设置大小的变量
coder.varsize
.变量的名称由
coder.cstructname
.a的下标变量
为
当它在循环体内使用时,使用-loop。的块输出MATLAB函数块在Simulink中金宝app®模型。
状态流中MATLAB函数的图表所有变量®图表。