问题描述
我想使用MATLAB Coder生成可执行文件(或目标文件中的函数),该可执行文件接受指向数组的指针作为输入。
我使用libpointer
创建了一个指针对象,然后尝试使用以下codegen
命令进行编译:
codegen -config:lib foo -args {coder.typeof(pointer_object_name)}
结果错误消息报告coder.typeof
不支持lipointer
类型。
我的最终目标是创建可以从另一个C函数调用的东西,而看不到MATLAB,并接收指向数组的指针作为输入。 MATLAB Coder可以生成类似的东西吗?
@ ryan-livingston要求提供我希望MATLAB Coder生成的函数的签名。
假设samples
是指向浮点数数组的指针。我想我想让MATLAB Coder创建一个void foo(float *samples)
来对这些浮点数进行各种计算,并可能将结果写入文件或套接字。
现在,我引起了@ ryan-livingston的注意,我想我应该问以下问题。
- 编码器能否使
resample
之类的函数与指针一起使用? - 引擎盖下是否已经使用了指针,让我不必担心?
解决方法
如果仅使用固定大小的数组输入生成代码,则生成的代码将能够接受指针。例如:
function x = foo(x)
x = 2*x;
% You can use MATLAB fopen,fprintf,fwrite here to write x to a file
>> codegen foo -args zeros(10,20) -config:lib -report
产生界面:
void foo(double x[200]);
与:
相同void foo(double *x);
由于数组在C中的调用会导致指针衰减。
请注意,我已经使用x = foo(x)
syntax来使Coder通过引用x
来传递foo
。当在调用站点上也使用与输入和输出相同的变量来调用时,用与输入和输出相同的变量声明的函数通常会产生按引用传递。