文档

编码器

指示仅写入数据以通过参考

描述

例子

coder.wref(arg表示这arg是一个仅写的表达式或可以通过引用外部C/C ++函数传递的变量。利用编码器仅在a内CODER.CEVAL称呼。此功能使代码生成器能够通过忽略以前的作业来优化生成的代码arg在你的matlab中®代码,因为假定外部功能未从数据中读取。写信给所有元素arg在您的外部代码中以完全初始化内存。

笔记

C/C ++功能必须完全初始化由coder.wref(arg)。通过将值分配给每个元素的每个元素来初始化内存arg在您的C/C ++代码中。如果生成的代码试图从非初始化的内存中读取,则可能导致不确定的运行时间行为。

也可以看看编码器Coder.RREF

例子

通过参考将数组作为仅写的

假设您有C函数init_array

void init_array(double* array,int numel){for(int i = 0; i 
             

C函数定义输入变量大批作为双重指针。

调用C功能init_array初始化所有元素y到42:

...y =零(5,10);CODER.CEVAL('init_array',coder.wref(y),int32(numel(y)));...

将多个参数作为仅写作参考

...u =零(5,10);v =零(5,10);CODER.CEVAL('my_fcn',coder.wref(u),int32(numel(u)),coder.wref(v),int32(numel(v)));...

将类属性作为仅写作参考

...x = myclass;X.Prop = 1;CODER.CEVAL('foo',coder.wref(x.prop));...

将结构作为仅写作参考

要指示结构类型是在C标头文件中定义的,请使用Coder.cstructname

假设您有C函数init_struct。此函数将输入参数写入,但没有从中读取。

#include“ myStruct.h” void init_struct(struct mystruct *my_struct){my_struct-> f1 = 1;my_struct-> f2 = 2;}

C标头文件,mystruct.h,定义一个名称的结构类型mystruct

#ifndef mystruct #define mystruct typedef struct mystruct {double f1;双F2;} mystruct;void init_struct(struct mystruct *my_struct);#万一

在您的MATLAB功能中,将结构作为仅写的引用传递给init_struct。利用Coder.cstructname指示结构类型s有名字mystruct在C标题文件中定义mystruct.h

功能y = foo%#codegeny = 0;coder.updatebuildinfo('添加SourceFiles',,,,'init_struct.c');s = struct('f1',1,'f2',2);coder.cstructname(s,“ mystruct',,,,“外部”,,,,“ headerfile',,,,'mystruct.h');CODER.CEVAL('init_struct',coder.wref(s));

要生成独立库代码,请输入:

代码根-config:libfoo-报告

将结构字段作为仅写入参考

...s = struct('S1',struct(struct('一个',[0 1]));CODER.CEVAL('foo',coder.wref(s.s1.a));...

您还可以传递一系列结构的元素:

...c = repmat(struct(struct('U',魔术(2)),1,10);b = repmat(struct(struct('C',c),3,6);a = struct('b',b);CODER.CEVAL('foo',coder.wref(a.b(3,4).c(2).U));...

输入参数

全部收缩

参考参考外部C/C ++功能的参数。该参数不能是一个类,系统对象™,单元格数组或索引中的一个类。

数据类型:单身的|双倍的|int8|INT16|INT32|INT64|UINT8|UINT16|UINT32|Uint64|逻辑|char|结构
复杂的数字支持:金宝app是的

限制

  • 您不能通过参考传递这些数据类型:

    • 类或系统对象

    • 单元阵列或索引到单元格数组

  • 如果属性具有GET方法,设置方法或验证器,或者是具有某些属性的System Object属性,则您无法通过引用外部函数传递该属性。看通过不支持某些属性的参考文献传递金宝app

提示

  • 如果arg是一个数组,然后coder.wref(arg)提供数组的第一个元素的地址。这coder.wref(arg)功能不包含有关数组大小的信息。如果C函数必须知道数据的元素数量,请将该信息作为单独的参数传递。例如:

    CODER.CEVAL('myfun',coder.wref(arg),int32(numel(arg));
  • 当您通过参考外部C/C ++功能传递结构时,请使用Coder.cstructname提供在C标头文件中定义的C结构类型的名称。

  • 在Matlab,编码器导致错误。要参数MATLAB代码,以便它可以在MATLAB和生成的代码中运行,请使用coder.target

  • 您可以使用编码器要声明您传递到外部C/C ++函数的变量。

在R2011a中引入