编码器
指示仅写入数据以通过参考
描述
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));...
输入参数
限制
您不能通过参考传递这些数据类型:
类或系统对象
单元阵列或索引到单元格数组
如果属性具有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 ++函数的变量。