主要内容

生成代码外观的差异马铃薯代码

马铃薯®编码器™将动态类型的MATLAB代码转换为静态键入的C / C ++。静态类型的语言需要明确声明的可变类型,并且这些类型在编译时确定。代码生成器执行的某些更改和优化使得可以在生成的代码中使用MATLAB数据类型和功能。有关代码生成支持的数据类型和功能的更多信息,请参阅金宝app数据定义MATLAB语言功能支持C / C ++代码生成金宝app

这些更改和优化使生成的代码与MATLAB代码不同。由于以下任何一种,所生成的代码可能无法以一对一的方式使用MATLAB代码映射:

笔记

根据您的源代码,这些情况可能会略有不同地不同于它们在此显示的方式。

映射马铃薯函数到C / C ++函数

Matlab编码器从Matlab代码生成独立的C / C ++代码和MEX代码。MATLAB代码中的单个函数可能转换为生成的代码中的多个函数。MATLAB代码中的两个或多个功能也可能成为生成的代码中的一个功能主体。此过程称为功能内联。默认情况下,代码生成器使用内部启发式法确定是否终止您的功能。有关更多信息,请参阅编码程序控制与生成代码的微调性能和可读性的联系

功能输出的表示

MATLAB函数的输出可能会成为C中的返回值,也可能成为通过参考输入。。MATLAB代码中的一个标量输出被视为生成的代码中的返回值。

  • 功能adjone.有一个输入变量X和输出变量y。对于这个例子,X是类型双倍的

    功能y =附加(x)y = x + 1;结尾

    此处显示为片段生成的代码:

    双addone(双x){返回x + 1.0;}

    函数的输入adjone.X,被视为生成的代码中的逐个值变量。MATLAB函数的输出在生成的代码中按值返回。

  • 对于数组,可能会通过引用输出。这里显示的代码片段使用a双倍的输入X和阵列输出y

    功能y = addmat(x)z = [1:100];y = z + x;结尾

    输出变量y在此处显示的生成代码中被翻译成CASE-BY-CARITY数组变量:

    void addmat(双x,双y [100]){int i;for(i = 0; i <100; i ++){y [i] =((double)i + 1.0)+ x;}}
  • 对于具有多个输出变量的入学点函数,可以在生成的代码中通过逐个引用输出。这个代码片段有两个双倍的标量输出,yZ.,有A.双倍的标量输入X

    功能[z,y] = splitone(x)y = x + 1;z = x + 2;结尾

    输出变量yZ.被转换为生成的代码中的通过参考变量:

    void spertone(双x,双* z,双* y){* y = x + 1.0;* z = x + 2.0;}

有关生成代码中的参数传递行为的更多信息,请参阅部署生成的代码

生成的代码中删除的常量值

您的代码中的常量值可能不会保留在生成的代码中。这些值可能会删除以优化生成的代码。常量折叠删除了MATLAB代码中可能存在的计算,并替换计算结果。有关更多信息,请参阅恒定折叠

考虑此代码片段:

功能y = removeconst x = in(10);y = x + 1;结尾

代码生成器删除常量矩阵X要保存内存并根据结果分配常量值。生成的代码看起来像这样的代码:

void removeconst(双y [100]){int i;for(i = 0; i <100; i ++){y [i] = 2.0;}}

在MATLAB代码中的未使用输入或常量输入到生成的代码中的函数体中删除了MATLAB代码中的非环境函数。

代码生成器的功能专用可以将函数更改为可以为特定调用函数的特定调用来自定义输入类型,大小,复杂性或值的版本。这样做是为了以代码重复为代价生产高效的C代码。有关更多信息,请参阅专门的功能或课程

访问矩阵元素

在前面的实例中,访问矩阵需要C / C ++中的额外代码行。一种10.-经过-10.矩阵表示为100的数组双倍的生成的代码中的元素。一种为了循环用于在这种情况下访问所有数组元素。C / C ++不支持许多金宝app矩阵操作,因此代码生成器将矩阵和矩阵上的操作转换为阵列和方法为了循环访问这些数组。

数学运营和其他函数调用

生成的代码可能会使用标准C库进行Matlab代码中的数学操作或其他功能。有关支持的语言功能列表,请参金宝app阅MATLAB语言功能支持C / C ++代码生成金宝app

可变大小的阵列

对于代码生成,数组可以是固定大小或可变大小的。可变大小阵列可能在生成的代码中以不同的格式出现。如果代码生成器可以确定阵列的大小,则可以为固定大小的数组生成代码。代码生成对于具有上限的固定大小阵列也有效。在某些情况下也产生动态分配的数组。看可变大小阵列的代码生成

固定大小和变量大小阵列的代码可以在生成的代码中产生以下变量声明:

双X [10];//固定大小阵列双y_data [20];int y_size [2];// y_data和y_size表示一个上限阵列emxarrayreal_t * z;//动态分配的数组

生成代码中的局部变量

如果您的MATLAB代码包含占用大量内存的本地变量,则在生成的代码中,它们可能被声明为本地变量,静态局部变量,或作为变量塑造它在生成的代码中传递到您的入境点函数。您可以通过控制为生成的代码分配的内存来控制此转换。看控制堆栈空间使用

生成代码中的单元格阵列

要在生成的代码中实现单元格数组,代码生成器可能将它们转换为一个塑造,静态阵列或动态阵列。有关更多信息,请参阅单元格阵列的代码生成

初始化和终止功能

代码生成器可能会产生两个家务函数,初始化和终止,如果需要。您可以在其中找到这些功能生成的代码代码生成报告中的选项卡。初始化函数初始化所生成的C / C ++入口函数运行的状态。终止功能可分配内存并执行其他清理操作。有关更多信息,请参阅使用生成的初始化和终止功能

也可以看看

相关话题