主要内容

指定入口点函数输入的属性

为什么你必须指定输入属性

定点设计师™必须确定所有变量的属性在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),指定输入numerictypefimath属性。

  • 为每个输入类的主要功能结构体,指定每个字段的属性的顺序出现在结构的定义。

方法定义属性的主要输入

方法 优势 缺点
  • 如果你是在一个项目工作,容易使用

  • 不改变原来的MATLAB代码

  • 保存项目文件的定义

  • 不是有效的用于指定内存密集型等投入大结构和数组

在命令行定义输入属性的例子

请注意

如果您定义输入属性以编程方式在MATLAB文件中,您不能使用这种方法

  • 易于使用的

  • 不改变原来的MATLAB代码

  • 为原型设计的一个函数,它有几个主要的输入

  • 必须在命令行指定每次您调用吗fiaccel(除非你使用一个脚本)

  • 不是有效的用于指定内存密集型等投入大结构和数组

定义输入属性以编程方式在MATLAB文件中(MATLAB编码器)

  • 结合MATLAB代码;每次调用时不需要重新定义属性

  • 提供文档属性规范的MATLAB代码

  • 有效的用于指定内存密集型等投入大的结构

  • 使用复杂的语法

  • 目前项目文件不识别属性定义的编程方式。如果您使用的是一个项目,你必须重新输入类型的项目。

在命令行定义输入属性的例子

命令行选项参数

fiaccel函数提供了一个命令行选项arg游戏主要用于指定的属性(入口点)函数的输入值或类型单元阵列的例子。单元阵列可以是变量或字面常量值的数组。使用这个选项,您指定的属性输入的同时生成代码的MATLAB函数fiaccel

您还可以创建coder.Type通过使用编码器类型编辑器对象交互。看到创建和编辑输入类型使用编码器类型编辑器(MATLAB编码器)

规则使用arg游戏选项

当使用arg游戏命令行选项来定义属性的示例中,遵循以下规则:

  • 细胞数组中元素的顺序必须对应于输入的顺序出现在主函数签名。例如,细胞数组中的第一个元素定义了第一个主函数输入的属性。

  • 生成参数少于那些发生在MATLAB函数的参数,指定属性参数的数量你想要在生成的功能。

  • 如果MATLAB函数输入参数,生成一个函数,它没有输入参数,通过一个空单元阵列arg游戏

  • 为每个输入的类主要功能是固定的点(fi),指定输入numerictypefimath属性。

  • 为每个输入类的主要功能结构体,指定每个字段的属性的顺序出现在结构的定义。

指定属性的主要输入的例子

考虑一个函数,它增加了它的两个输入:

函数y = emcf (u, v) % # % # codegen %该指令codegen表明你打算为该算法生成的代码y = u + v;

下面的例子显示了如何指定不同属性的主要输入uv通过在命令行例子:

  • 使用文字的常量指定单元阵列输入都是真实的,标量,定点值:

    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命令行上,遵循这些步骤:

  1. 定义numerictype属性x,就像这个例子:

    T = numerictype(“字”,32岁的…“签署”“FractionLength”, 23日,真正的);

  2. 定义fimath属性x,就像这个例子:

    F = fimath (‘SumMode’,‘SpecifyPrecision’,……“SumWordLength”, 32岁的“SumFractionLength”, 23岁……“ProductMode”、“SpecifyPrecision’,……ProductWordLength”, 32岁的“ProductFractionLength”、23);
  3. 创建一个定点的变量numerictypefimath属性定义,就像这个例子:

    myeg = {fi (4.0、T、F)};

  4. 编译函数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,这是固定的。

  • 如果维无界,这始终是变量的大小。

指定一个适应可变向量输入

  1. 写一个函数,这个函数计算每一个的总和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或不匀的);结束

  2. 指定第一个输入一个作为一个fi对象。第一个维度保持固定的大小和其第二维度可以长到100年的一个上界。指定第二个输入n作为一个双标量。

    fiaccel nway……args {coder.typeof (fi(0, 1, 16日,15日,‘SumMode’,‘KeepLSB’), [100], 1), 0}…报告
  3. 作为替代方案,分配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命令:

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命令:

codegen配置:自由- cuseDefaults_2arg游戏0报告

生成的代码:

双useDefaults_2 (aa){返回(+ 5.0)+ 7.0;}

codegen命令:

codegen配置:自由- cuseDefaults_2arg游戏{0}报告

生成的代码:

双useDefaults_2(双,双b){返回(a + b) + 7.0;}

相关的话题