【问题标题】:Can MATLAB Coder generate a function that takes a pointer as input?MATLAB Coder 可以生成一个将指针作为输入的函数吗?
【发布时间】:2021-02-24 22:55:47
【问题描述】:

我想使用MATLAB Coder 生成一个可执行文件(或目标文件中的函数),它接受指向数组的指针作为输入。

我用libpointer创建了一个指针对象,然后尝试用下面的codegen命令编译:

codegen -config:lib foo -args {coder.typeof(pointer_object_name)}

生成的错误信息报告coder.typeof不支持lipointer类型。

我的最终目标是创建一个可以在没有 MATLAB 的情况下从另一个 C 函数调用的东西,并接收指向数组的指针作为输入。 MATLAB Coder 可以生成类似的东西吗?


@ryan-livingston 询问我希望 MATLAB Coder 生成的函数的签名。

假设samples 是一个指向浮点数组的指针。我想我希望 MATLAB Coder 创建一个 void foo(float *samples) 来对这些浮点数执行各种计算,并可能将结果写入文件或套接字。

现在我得到了@ryan-livingston 的关注,我想我应该问以下问题。

  • Coder 能否使 resample 等函数与指针一起使用?
  • 指针是否已经在后台使用,让我不必担心?

【问题讨论】:

  • 您能否发布您正在寻找的精确 C 签名的示例?这将有助于为讨论提供信息。
  • @RyanLivingston:感谢您的回复。我已为我的问题添加了签名。
  • 添加了一些信息。您能否详细说明一下您为什么希望指针显示在接口上或在内部使用的用例?动机是什么:测试、效率等?

标签: matlab matlab-coder codegen


【解决方案1】:

如果您只是生成具有固定大小数组输入的代码,则生成的代码将能够接受指针。例如:

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 通过引用 foo 传递 x。使用与输入和输出相同的变量声明的函数通常在调用时也使用与输入和输出相同的变量调用时产生引用传递。

【讨论】:

  • 谢谢。我想到了另一种情况,我想将 C 指针传递给 m 文件中定义的函数:将 argv 直接传递给 m 文件中定义的函数会很方便。有没有办法做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2021-12-08
  • 2018-08-08
  • 2016-10-12
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多