指定入口点函数输入的属性
为什么你必须指定输入属性
定点设计师™必须确定所有变量的属性在MATLAB®文件在编译时。在MATLAB文件来推断变量属性,定点设计师必须能够识别输入的属性主函数,也称为顶级或入口点函数。因此,如果您的主函数输入,您必须指定这些输入的属性定点设计师。如果您的主要功能没有输入参数,定点设计师可以编译MATLAB文件没有修改。你不需要指定的属性输入本地函数或外部函数调用的主要功能。
请注意
你的主要功能不能在一个包中。创建一个包装器函数外的主要功能包。新函数内调用所需的函数作为主要功能。
属性来指定
如果你的主要功能有输入,您必须为每个输入指定以下属性。
为 | 指定的属性 | ||||
---|---|---|---|---|---|
类 | 大小 | 复杂性 | numerictype | fimath | |
定点输入 |
|
|
|
|
|
结构中的每个字段输入 | |||||
其他投入 |
|
|
|
默认的属性值
定点设计师分配以下主要功能的属性的默认值输入。
财产 | 默认的 |
---|---|
类 | 双 |
大小 | 标量 |
复杂性 | 真正的 |
numerictype |
没有默认的 |
fimath |
MATLAB违约fimath 对象 |
金宝app支持类
下表给出了支持的类名金宝app定点设计师。
类名 | 描述 |
---|---|
逻辑 |
逻辑真假值的数组 |
字符 |
字符数组 |
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文件中,您不能使用这种方法 |
|
|
定义输入属性以编程方式在MATLAB文件中(MATLAB编码器) |
|
|
在命令行定义输入属性的例子
命令行选项参数
的fiaccel
函数提供了一个命令行选项arg游戏
主要用于指定的属性(入口点)函数的输入值或类型单元阵列的例子。单元阵列可以是变量或字面常量值的数组。使用这个选项,您指定的属性输入的同时生成代码的MATLAB函数fiaccel
。
您还可以创建coder.Type
通过使用编码器类型编辑器对象交互。看到创建和编辑输入类型使用编码器类型编辑器(MATLAB编码器)。
规则使用arg游戏选项
当使用arg游戏
命令行选项来定义属性的示例中,遵循以下规则:
细胞数组中元素的顺序必须对应于输入的顺序出现在主函数签名。例如,细胞数组中的第一个元素定义了第一个主函数输入的属性。
生成参数少于那些发生在MATLAB函数的参数,指定属性参数的数量你想要在生成的功能。
如果MATLAB函数输入参数,生成一个函数,它没有输入参数,通过一个空单元阵列
arg游戏
。为每个输入的类主要功能是固定的点(
fi
),指定输入numerictype
和fimath
属性。为每个输入类的主要功能
结构体
,指定每个字段的属性的顺序出现在结构的定义。
指定属性的主要输入的例子
考虑一个函数,它增加了它的两个输入:
函数y = emcf (u, v) % # % # codegen %该指令codegen表明你打算为该算法生成的代码y = u + v;
下面的例子显示了如何指定不同属性的主要输入u
和v
通过在命令行例子:
使用文字的常量指定单元阵列输入都是真实的,标量,定点值:
fiaccel - o emcfx emcf……args {fi(0, 1, 16日15),fi(0, 1, 16日15)}
使用文字的常量指定单元阵列的输入
u
是一个无符号16位,1-by-4向量和输入v
是一个标量,定点值:fiaccel - o emcfx emcf……args {0 (1, 4, uint16) fi(0, 1, 16日15)}
将样本值分配给一个细胞数组变量来指定这两个输入都是真实的,unsigned 8位整数向量:
= fi ((1; 2; 3; 4), 0, 0) b = fi ((5, 6, 7, 8), 0, 0) = {a、b} fiaccel交货- o emcfx emcf args交货
指定的属性主要定点输入
考虑一个函数,计算平方根的定点数:
函数y = sqrtfi (x) % # codegen y = sqrt (x);
指定的属性主要定点输入x
通过MATLAB命令行上,遵循这些步骤:
定义
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
使用fiaccel
命令,通过变量myeg
作为参数arg游戏
选择,在这个例子中:fiaccel sqrtfi args myeg;
在命令行中指定常数输入
如果你知道你的主要输入不改变在运行时,可以减少开销在生成的代码中指定的主要输入常量值。常数输入通常用于控制一个算法执行的旗帜和价值观指定大小或类型的数据。
使用指定的输入是常数arg游戏
命令行选项的coder.Constant
对象。指定一个输入是一个常数的大小,类,复杂性,和价值的constant_input
使用下面的语法:
args {coder.Constant (constant_input
)}
调用函数和常数输入
fiaccel
编译常数函数生成的代码的输入。因此,墨西哥人签名不同于MATLAB函数签名。在运行时,您提供的常数参数MATLAB函数,而不是墨西哥人的功能。
例如,考虑下面的函数身份
其输入输出副本:
函数y =身份(u) % # codegen y = u;
生成一个墨西哥人的功能identity_mex
与一个常数输入,在MATLAB提示符下输入以下命令:
fiaccel - o identity_mex身份……args {coder.Constant (fi(15) 0.1、1、16日)}
MATLAB函数运行,提供恒定的参数如下:
身份(fi(15) 0.1、1、16日)
得到以下结果:
ans = 0.1000
现在,尝试运行这个命令的墨西哥人函数:
identity_mex
你应该得到相同的答案。
指定结构作为一个常数输入
假设您定义一个结构tmp
在MATLAB工作区中指定的尺寸一个矩阵,如下:
tmp =结构(“行”2“关口”,3);
以下的MATLAB函数rowcol
接受一个结构输入p
定义矩阵y
:
函数y = rowcol (u, p) % # codegen y = fi (0 (p.rows p.cols), 1, 16日15)+ u;
下面的例子显示了如何指定主要输入u
是一个双标量变量,主要输入p
是一个常数结构:
fiaccel rowcol……args {fi(0, 1, 16日15),coder.Constant (tmp)}
运行这段代码,使用
u = fi(15) 0.5、1、16日y_m = rowcol (u, tmp) y_mex = rowcol_mex (u)
在命令行中指定适应输入
适应可变数据在运行时数据的大小可能会改变。MATLAB支金宝app持代码生成的有界和无界适应可变数据。有界适应数据有固定的上界。这些数据可以在堆上分配栈上的静态或动态。无界适应数据没有固定的上界。这个数据必须分配在堆上。您可以定义有一个或多个输入适应维度使用——并指定它们的上界arg游戏
选项,coder.typeof
功能:
args {coder.typeof (example_value,size_vector,variable_dims)}
同一个类和复杂性
example_value
相同的大小和上界
size_vector
变量所指定的尺寸
variable_dims
启用动态内存分配时,您可以指定正
向量的大小尺寸和在编译时未知上界。
当variable_dims
是一个标量,它适用于所有的维度,以下异常:
如果尺寸是1或0,这是固定的。
如果维无界,这始终是变量的大小。
指定一个适应可变向量输入
写一个函数,这个函数计算每一个的总和
n
一个向量的元素一个
并将它们存储在一个向量B
:函数B = nway (n) % # codegen %计算每n个元素的总量,并把它们放在B coder.extrinsic('错误');32岁的结核病= numerictype (1 24);如果((mod(元素个数(A), n) = = 0) & &……n (n > = 1 & & < =元素个数(A))) B = fi(0(1,元素个数(A) / n),结核);k = 1;i = 1:元素个数(A) / n B (i) =总和((k + (0: n - 1)));k = k + n;结束其他B = fi(0(1,0),结核);错误(' n < = 0或不匀的);结束
指定第一个输入
一个
作为一个fi
对象。第一个维度保持固定的大小和其第二维度可以长到100年的一个上界。指定第二个输入n
作为一个双标量。fiaccel nway……args {coder.typeof (fi(0, 1, 16日,15日,‘SumMode’,‘KeepLSB’), [100], 1), 0}…报告
作为替代方案,分配
coder.typeof
表达一个MATLAB变量,然后通过变量作为参数arg游戏
:vareg = coder.typeof (fi(0, 1, 16日,15日,“SumMode”、“KeepLSB”), [100], 1) fiaccel nway args {vareg、双(0)}的报告
输入类型规范和参数
块
使用函数参数验证(参数
块)来指定输入不支持类型的入口点函数。金宝app即使你的入口点函数包含参数
块验证输入参数,您必须指定这些输入参数使用的属性中列出的三种方法之一方法定义属性的主要输入(MATLAB编码器)。
在生成的代码入口点函数的默认值输入
的参数
块允许您指定一个或多个位置输入参数的默认值。指定一个默认值的参数声明使一个位置参数可选因为MATLAB可以使用默认值,当你不通过函数调用中的值。当你通过使用生成代码codegen
(MATLAB编码器)通过使用命令或加速定点代码fiaccel
命令,您可以选择不指定属性的一个或多个可选的位置参数恒定的默认值。在这种情况下,这些可选参数的默认值是硬编码在生成的代码中,这些参数没有出现在生成的代码接口。有关示例,请参见下表。
MATLAB代码 |
生成的代码 |
---|---|
函数= useDefaults_1 (a, b, c)参数一个(1,1)的两倍b = 3(1,1)的两倍c = 5(1,1)的两倍= 7结束= a + b + c;结束 |
codegen配置:自由- cuseDefaults_1arg游戏{}报告 生成的代码: 双useDefaults_1 (void){返回15.0;} |
函数= useDefaults_2 (a, b, c)参数一个(1,1)的两倍b(1,1)的两倍c = 5(1,1)的两倍= 7结束= a + b + c;结束 |
codegen配置:自由- cuseDefaults_2arg游戏0报告 生成的代码: 双useDefaults_2 (aa){返回(+ 5.0)+ 7.0;} |
codegen配置:自由- cuseDefaults_2arg游戏{0}报告 生成的代码: 双useDefaults_2(双,双b){返回(a + b) + 7.0;} |