主要内容

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

当您可以重用具有不同属性的相同变量时

如果代码生成器可以明确地确定C/ c++代码生成期间出现的每个变量的属性,那么您可以重用(重新分配)具有不同类、大小或复杂性的输入、输出或局部变量。如果是这样,MATLAB®在生成的代码中创建单独的唯一命名的局部变量。您可以在代码生成报告中查看这些重命名的变量。

变量重用的一个常见例子是if-elseif-else切换实例语句。例如,下面的函数例二首先使用变量t在一个如果语句,其中包含一个标量double,然后重用t外的如果语句保存双精度浮点数向量。

首先,t被用来保存一个标量双值t = mean(mean(u)) / numel(u);U = U - t;End % t被重用用于保存双精度t = find(u > 0)的向量;y =总和(u (t (2: end-1)));

当您不能重用变量时

如果在代码生成期间不能明确地确定变量出现的类、大小和复杂性,则不能重用(重新分配)变量。在这种情况下,不能重命名变量,并发生编译错误。

例如,下面example2函数赋定点值x如果语句和重用x将一个双精度矩阵存储在其他的条款。然后使用xif - else声明。此函数生成编译错误,因为if - else声明变量x可以有不同的属性if - else条款执行。

Function y = example2(use_fixpoint, data) %#codegen if use_fixpoint % x is fixed-point x = fi(data, 1,12,3);Else % x是一个双精度x = data的矩阵;当x在这里被重用时,不可能确定它的%类、大小和复杂度。Y = t > 0;结束

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

看看MATLAB如何重命名一个重用的变量t

  1. 创建一个MATLAB文件example1.m包含以下代码。

    首先,t被用来保存一个标量双值t = mean(mean(u)) / numel(u);U = U - t;End % t被重用用于保存双精度t = find(u > 0)的向量;y =总和(u (t (2: end-1)));结束

  2. 为生成一个MEX函数例二并生成代码生成报告。

    Codegen -o example1x -report example1。m参数{的(5,5)}

  3. 打开代码生成报告。

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

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

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

变量重用的局限性

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

  • 持续的变量。

  • 全局变量。

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

  • 使用coder.varsize

  • a的指标变量当它在循环体中使用时。

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

  • statflow中MATLAB函数的图表拥有变量®图表。