指定入口点函数输入的属性
为什么你必须指定输入属性
因为C和c++静态类型语言,MATLAB®编码器™必须确定所有变量的属性在MATLAB文件在编译时。在MATLAB文件来推断变量属性,MATLAB编码器必须能够识别输入的属性主函数,也称为顶级或入口点函数。因此,如果您的主函数输入,您必须指定这些输入的属性MATLAB编码器。如果您的主要功能没有输入参数,MATLAB编码器可以编译MATLAB文件没有修改。你不需要指定的属性输入本地函数或外部函数调用的主要功能。
请注意
你的主要功能不能在一个包中。创建一个包装器函数外的主要功能包。新函数内调用所需的函数作为主要功能。
如果你使用波浪号(~)字符指定输入未使用的功能:
在MATLAB编码器项目,如果你想要一个不同的类型出现在生成的代码中,指定类型。否则,输入默认为真实,标量双打。
当生成代码
codegen
,您必须指定这些输入使用的类型arg游戏
选择。
属性来指定
如果你的主要功能有输入,您必须为每个输入指定以下属性。
为 | 指定的属性 | ||||
---|---|---|---|---|---|
类 | 大小 | 复杂性 | numerictype | fimath | |
定点输入 |
|
|
|
|
|
结构中的每个字段输入 | |||||
其他投入 |
|
|
|
默认的属性值
MATLAB编码器分配以下主要功能的属性的默认值输入。
财产 | 默认的 |
---|---|
类 | 双 |
大小 | 标量 |
复杂性 | 真正的 |
numerictype |
没有默认的 |
fimath |
MATLAB违约fimath 对象 |
指定结构字段的默认值。在大多数情况下,当你不显式地指定属性的值,MATLAB编码器使用默认值,除了结构字段。名称字段在一个结构的唯一方法是设置至少一个属性。因此,您可能需要指定结构的属性字段的默认值。有关示例,请参见指定类和标量结构的大小和指定类和结构数组的大小。
指定默认为墨西哥人fimath值函数。墨西哥人功能生成的MATLAB编码器使用默认的fimath
值在编译时生效。如果你不指定一个默认的fimath
值,MATLAB编码器使用MATLAB默认fimath
。MATLAB出厂默认值有以下属性:
RoundingMethod:最近的OverflowAction:饱和ProductMode: FullPrecision SumMode: FullPrecision CastBeforeSum:真的
墨西哥人运行时函数依赖于默认fimath
值,不改变这个值在MATLAB会话。否则,你收到一个运行时警告,提醒你编译时和运行时之间的不匹配fimath
值。
例如,假设您定义下面的MATLAB函数测试
:
测试函数y = % # codegen y = fi (0);
这个函数测试
构造一个fi
没有显式地指定一个对象fimath
对象。因此,测试
依赖于默认fimath
对象实际上是在编译时。在MATLAB提示,生成墨西哥人的功能text_mex
使用工厂的设置MATLAB默认的fimath
:
codegen测试% codegen生成一个墨西哥人功能,test_mex, %在当前文件夹
接下来,运行test_mex
来显示MATLAB默认的fimath
值:
test_mex ans = 0 DataTypeMode:定点:二进制扩展Signedness:签了字:16 FractionLength: 15
现在创建一个本地MATLABfimath
价值。所以你不再使用默认设置:
F = fimath (“RoundingMethod”,“地板”);
最后,明确的墨西哥人从记忆功能并重新运行:
明确test_mex test_mex
检测到的不匹配,导致一个错误:
? ? ?这个函数是用不同的默认生成fimath比当前违约。= = > test_mex误差
为墨西哥人指定多个签名的功能。生成一个多重签名墨西哥人函数从一个入口点函数,提供多个arg游戏
规格相同的入口点函数。墨西哥人函数生成使用您提供的多个签名在代码生成。多重签名墨西哥人的更多信息,请参阅生成一个墨西哥人函数多个签名。
金宝app支持类
下表给出了支持的类名金宝appMATLAB编码器。
类名 | 描述 |
---|---|
逻辑 |
逻辑真假值的数组 |
字符 |
字符数组 |
int8 |
8位带符号整数数组 |
uint8 |
8位无符号整数数组 |
int16 |
16位带符号整数数组 |
uint16 |
16位无符号整数数组 |
int32 |
32位带符号整数数组 |
uint32 |
32位无符号整数数组 |
int64 |
64位带符号整数数组 |
uint64 |
64位无符号整数数组 |
单 |
单精度浮点和定点数的数组 |
双 |
双精度浮点和定点数的数组 |
结构体 |
结构数组 |
embedded.fi |
定点数的数组 |
规则用于指定属性的主要输入
当指定的属性主要输入,遵循以下规则:
细胞数组中元素的顺序必须对应于输入的顺序出现在主函数签名。例如,细胞数组中的第一个元素定义了第一个主函数输入的属性。
生成参数少于那些发生在MATLAB函数的参数,指定属性参数的数量你想要在生成的功能。
如果MATLAB函数输入参数,生成一个函数,它没有输入参数,通过一个空单元阵列
arg游戏
。为每个输入的类主要功能是固定的点(
fi
),指定输入numerictype
和fimath
属性。为每个输入类的主要功能
结构体
,指定每个字段的属性的顺序出现在结构的定义。
方法定义属性的主要输入
方法 | 优势 | 缺点 |
---|---|---|
|
|
|
请注意 如果您定义输入属性以编程方式在MATLAB文件中,您不能使用这种方法 |
|
|
|
|
在命令行定义输入属性的例子
命令行选项参数
的codegen
函数提供了一个命令行选项arg游戏
主要用于指定的属性(入口点)函数的输入值或类型单元阵列的例子。单元阵列可以是变量或字面常量值的数组。使用这个选项,您指定的属性输入的同时生成代码的MATLAB函数codegen
。
您可以通过从一个入口点函数作为输入输出类型到另一个地方。看到通过一个入口点函数的输出作为输入。指定单元阵列的输入信息,请参阅在命令行中指定单元阵列的输入。
如果你有一个测试函数或脚本,该脚本调用MATLAB函数入口点所需的类型,您可以使用coder.getArgTypes
确定函数的输入类型。coder.getArgTypes
返回一个单元阵列coder.Type
你可以通过对象codegen
使用arg游戏
选择。看到指定一般性质的主要输入为codegen
。
您还可以创建coder.Type
通过使用编码器类型编辑器对象交互。看到创建和编辑输入类型使用编码器类型编辑器。
规则使用arg游戏选项
当使用arg游戏
命令行选项来定义属性的示例中,遵循以下规则:
细胞数组中元素的顺序必须对应于输入的顺序出现在主函数签名。例如,细胞数组中的第一个元素定义了第一个主函数输入的属性。
生成参数少于那些发生在MATLAB函数的参数,指定属性参数的数量你想要在生成的功能。
如果MATLAB函数输入参数,生成一个函数,它没有输入参数,通过一个空单元阵列
arg游戏
。为每个输入的类主要功能是固定的点(
fi
),指定输入numerictype
和fimath
属性。为每个输入类的主要功能
结构体
,指定每个字段的属性的顺序出现在结构的定义。
指定的属性主要在命令行输入的例子
考虑一个MATLAB函数增加了它的两个输入:
函数y = mcf (u, v) % # codegen y = u + v;
下面的例子显示了如何指定不同属性的主要输入u
和v
通过在命令行例子:
使用文字的常量指定单元阵列的输入都是真正的标量双打:
codegen mcf args {0}
使用文字的常量指定单元阵列的输入
u
是一个无符号16位,1-by-4向量和输入v
是一个标量双:codegen mcf args {0 (1, 4,“uint16”), 0}
将样本值分配给一个细胞数组变量来指定这两个输入都是真实的,unsigned 8位整数向量:
= uint8 ([1; 2; 3; 4]) b = uint8 ([5, 6, 7, 8)) = {a、b} codegen mcf args交货交货
指定的属性主要定点在命令行输入的例子
生成一个墨西哥人函数或C / c++代码定点MATLAB代码,您必须安装定点设计师™软件。
考虑一个MATLAB函数计算平方根的定点数:
% # codegen函数y = sqrtfi x y =√(x);
指定的属性主要定点输入x
通过示例,请执行以下步骤:
定义
numerictype
属性x
,例如:T = numerictype(“字”,32岁的…“FractionLength”, 23岁……“签署”,真正的);
定义
fimath
属性x
,例如:F = fimath (‘SumMode’,‘SpecifyPrecision’,……“SumWordLength”, 32岁的……“SumFractionLength”, 23岁……“ProductMode”、“SpecifyPrecision’,……“ProductWordLength”, 32岁的……“ProductFractionLength”, 23);
创建一个定点的变量
numerictype
和fimath
你定义的属性,例如:myeg = {fi (4.0、T、F)};
编译函数
sqrtfi
使用codegen
命令,通过变量myeg
作为参数arg游戏
选项,例如:codegen sqrtfi args myeg;
在命令行中指定常数输入
如果你知道你的主要输入不改变在运行时,可以减少开销在生成的代码中指定的主要输入常量值。常数输入通常用于控制一个算法执行的旗帜和价值观指定大小或类型的数据。
使用指定的输入是常数arg游戏
命令行选项的coder.Constant
对象。指定一个输入是一个常数的大小,类,复杂性,和价值的constant_input
使用下面的语法:
args {coder.Constant (constant_input
)}
调用函数和常数输入
代码生成器编译常数函数生成的代码的输入。在生成的C或c++代码中,函数签名不包含常数输入。默认情况下,墨西哥人函数签名包含常数输入。当你调用一个墨西哥人函数时,你必须提供编译时的值匹配的值。你可以控制一个墨西哥人是否函数签名包括常数输入和墨西哥人是否函数检查您提供恒定的值输入。看到在墨西哥人函数常数输入检查。
指定结构作为一个常数输入
假设您定义一个结构tmp
在MATLAB工作区中指定一个矩阵的维度:
tmp =结构(“行”2“关口”,3);
以下的MATLAB函数rowcol
接受一个结构输入p
定义矩阵y
:
函数y = rowcol (u, p) % # codegen y = 0 (p.rows p.cols) + u;
下面的例子显示了如何指定主要输入u
是一个双标量变量,主要输入p
是一个常数结构:
codegen rowcol args {0, coder.Constant (tmp)}
在命令行中指定适应输入
适应可变数据在运行时数据的大小可能会改变。MATLAB支金宝app持代码生成的有界和无界适应可变数据。有界适应数据有固定的上界。这些数据可以在堆上分配栈上的静态或动态。无界适应数据没有固定的上界。这个数据必须分配在堆上。您可以定义有一个或多个输入适应维度使用——并指定它们的上界arg游戏
选项,coder.typeof
功能:
args {coder.typeof (example_value,size_vector,variable_dims)}
同一个类和复杂性
example_value
相同的大小和上界
size_vector
变量所指定的尺寸
variable_dims
启用动态内存分配时,您可以指定正
向量的大小尺寸和在编译时未知上界。
当variable_dims
是一个标量,它适用于所有的维度,以下异常:
如果尺寸是1或0,这是固定的。
如果维无界,这始终是变量的大小。
有关更多信息,请参见coder.typeof
和为适应可变数据生成代码。
指定一个适应可变向量输入
写一个函数,这个函数计算每一个的平均值
n
一个向量的元素一个
并将它们存储在一个向量B
:函数B = nway (n) % # codegen %计算平均每n个元素,把它们放在B coder.extrinsic('错误');如果((mod(元素个数(A), n) = = 0) & & (n > = 1 & & n < =元素个数的B (A))) =(1,元素个数(A) / n);k = 1;i = 1:元素个数(A) / n B (i) =意味着((k + (0: n - 1)));k = k + n;结束其他B = 0 (1,0);错误(' n < = 0或不分裂的元素数量均匀的);结束
指定第一个输入
一个
作为一个向量的值的两倍。第一个维度保持固定的大小和其第二维度可以长到100年的一个上界。指定第二个输入n
作为一个双标量。codegen报告nway args{编码器。typeof (0, [100], 1), 1}
作为替代方案,分配
coder.typeof
表达一个MATLAB变量,然后通过变量作为参数arg游戏
:vareg =编码器。typeof (0, [100], 1) codegen报告nway args {vareg, 0}