MATLAB Coder可以生成将指针作为输入的函数吗?

问题描述

我想使用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。当在调用站点上也使用与输入和输出相同的变量来调用时,用与输入和输出相同的变量声明的函数通常会产生按引用传递。