文档

重复使用具有不同属性的相同变量

什么时候可以重用具有不同属性的相同变量

如果代码生成器能够在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数组中存储一个双精度矩阵其他的条款。然后它使用xif - 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;结束

例3。if语句中的变量重用

以了解MATLAB如何重命名重用变量t

  1. 创建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));结束

  2. 生成的MEX函数例二并生成代码生成报告。

    Codegen -o example1x -report example1。M -args {ones(5,5)}

  3. 打开代码生成报告。

    变量选项卡,您将看到两个唯一命名的局部变量t > 1t > 2

  4. 在变量列表中,单击t > 1.该报告突出显示了变量的实例t在里面如果声明。这些例子t都是标量倍。

  5. 点击t > 2.的实例,代码生成报告突出显示t在外面如果声明。这些例子t变长列向量的上界是25

变量重用的局限性

以下变量不能在生成的代码中重命名:

  • 持续的变量。

  • 全局变量。

  • 变量传递给C代码使用coder.refcoder.rrefcoder.wref

  • 使用来设置大小的变量coder.varsize

  • 变量的名称由coder.cstructname

  • a的下标变量当它在循环体内使用时,使用-loop。

  • 的块输出MATLAB函数块在Simulink中金宝app®模型。

  • 状态流中MATLAB函数的图表所有变量®图表。