单元格数组的代码生成
当你从MATLAB中生成代码时®包含单元格数组的代码,代码生成器将单元格数组分类为均匀或异构.这种分类决定了如何在生成的代码中表示单元格数组。它还决定了如何在生成代码的MATLAB代码中使用单元格数组。
当您在用于代码生成的MATLAB代码中使用单元格数组时,您必须遵守某些限制。看到代码生成的单元格数组限制.
同构单元格阵列与异构单元格阵列
均匀单元格阵列具有以下特征:
单元格数组在生成的代码中表示为一个数组。
所有元素都具有相同的属性。与单元格数组关联的类型指定所有元素的属性,而不是单个元素的属性。
单元阵列可以是可变大小的。
可以使用在运行时确定值的索引索引到单元格数组中。
异构单元阵列具有以下特征:
单元格数组在生成的代码中表示为一个结构。每个元素都表示为结构的一个字段。
元素可以具有不同的属性。与单元格数组关联的类型分别指定每个元素的属性。
单元格数组不能是可变大小的。
必须用常量下标或用
为
-具有常数界的循环。
代码生成器使用启发式来确定单元格数组是同构还是异构。它考虑元素的属性(类、大小、复杂性)和其他因素,比如如何在程序中使用单元格数组。根据使用单元格数组的方式,代码生成器可以将单元格数组在一种情况下划分为同构,在另一种情况下划分为异构。例如,考虑单元格数组(2 3) {1}
.代码生成器可以将该单元格数组分类为异构的1 × 2单元格数组。第一个元素是双标量。第二个元素是一个1 × 2的双精度数组。但是,如果您使用在运行时确定值的索引对该单元格数组进行索引,则代码生成器将其分类为同构单元格数组。元素是上限为2的可变大小的double数组。
控制单元格阵列是同构还是异构
对于具有某些特征的单元格数组,不能将分类控制为同构或异构:
如果元素具有不同的类,则单元格数组必须是异构的。
如果单元格数组是可变大小的,那么它必须是均匀的。
如果使用在运行时确定值的索引向单元格数组进行索引,则单元格数组必须是同构的。
对于其他单元格数组,可以将分类控制为同构或异构。
控制作为入口点函数输入的单元格数组的分类:
在命令行上,使用
编码器。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}
显示第二个元素的属性。
另请参阅
编码器。CellType
|coder.varsize
|coder.cstructname