主要内容

单元格数组的代码生成

当你从MATLAB中生成代码时®包含单元格数组的代码,代码生成器将单元格数组分类为均匀异构.这种分类决定了单元格数组在生成的代码中如何表示。它还决定如何在生成代码的MATLAB代码中使用单元格数组。

在MATLAB代码中使用用于代码生成的单元格数组时,必须遵守某些限制。看到代码生成的单元格数组限制

同构与异构单元阵列

齐次单元阵列具有以下特征:

  • 单元格数组在生成的代码中表示为数组。

  • 所有的元素都有相同的性质。与单元格数组关联的类型指定所有元素的属性,而不是单个元素的属性。

  • 单元格数组可以是可变大小的。

  • 可以使用在运行时确定值的索引对单元格数组进行索引。

异构单元阵列具有以下特征:

  • 单元格数组在生成的代码中表示为结构。每个元素都表示为结构的一个字段。

  • 元素可以有不同的属性。与单元格数组关联的类型分别指定每个元素的属性。

  • 单元格数组不能是可变大小的。

  • 必须使用常量索引或具有常量边界的-循环。

代码生成器使用启发式方法确定单元格数组的分类是同质的还是异构的。它考虑元素的属性(类、大小、复杂度)和其他因素,比如如何在程序中使用单元格数组。根据单元格数组的使用方式,代码生成器可以将单元格数组在一种情况下分类为同质的,在另一种情况下分类为异构的。例如,考虑单元格数组{1 [2 3]}.代码生成器可以将此单元格数组分类为异构的1 × 2单元格数组。第一个元素是双标量。第二个元素是一个1 × 2的双精度数组。但是,如果您使用在运行时确定值的索引对该单元格数组进行索引,则代码生成器将其归类为同构单元格数组。元素是可变大小的double数组,其上界为2。

控制单元格数组是同构还是异构

对于具有某些特征的单元格阵列,不能将分类控制为同质或异构:

  • 如果元素具有不同的类,则单元格数组必须是异构的。

  • 如果单元格数组是可变大小的,那么它必须是均匀的。

  • 如果使用在运行时确定值的索引索引到单元格数组,则单元格数组必须是同构的。

对于其他单元格阵列,可以将分类控制为同质或异构。

要控制作为入口点函数输入的单元格数组的分类:

  • 在命令行中,使用编码器。CellType方法makeHomogeneous而且makeHeterogeneous

  • MATLAB编码器™应用程序,选择电池(均匀)电池(不均匀)从类型菜单。看到使用App定义或编辑输入参数类型

要控制不是入口点函数输入的单元格数组的分类:

  • 如果单元格数组是固定大小的,则可以使用coder.cstructname.例如:

    函数Y = mycell()% # codegenC = {1 2 3};coder.cstructname (c,“名字”);Y = c;结束

  • 如果单元格数组元素具有相同的类,则可以使用coder.varsize.看到控制单元格数组是否为可变大小

在生成的代码中命名表示异构单元格数组的结构类型

代码生成器将异构单元格数组表示为生成代码中的结构。您可以命名生成的结构类型。不能为结构的字段命名。

如果单元格数组是入口点函数输入,请参见定义单元格数组输入.如果单元格数组不是入口点函数输入,请使用coder.cstructname在MATLAB函数中。例如:

函数Y = mycell()% # codegenC = {1“一个”};coder.cstructname (c,“名字”);Y = c;结束

报表中的单元格阵列

属性中的变量,可查看单元格数组是同构的还是异构的代码生成报告。

对于同构单元格数组,报告有一个条目指定所有元素的属性。的符号{:}指示单元格数组的所有元素具有相同的属性。

对于异构单元格数组,报告为每个元素都有一个条目。例如,对于异构单元数组c有两个元素,入口为c {1}显示第一个元素的属性。的条目c {2}显示第二个元素的属性。

另请参阅

||

相关的话题