使用 MATLAB 引擎在生成的代码中执行函数调用 您所在的位置:网站首页 html如何在控制台输出 使用 MATLAB 引擎在生成的代码中执行函数调用

使用 MATLAB 引擎在生成的代码中执行函数调用

2023-05-30 21:00| 来源: 网络整理| 查看: 265

将 mxArray 转换为已知类型

要将 mxArray 转换为已知类型,请将 mxArray 指定给已定义类型的变量。在运行时,mxArray 将被转换为其指定给的变量的类型。如果 mxArray 中的数据与该变量的类型不一致,将会发生运行时错误。

以如下代码为例:

function y = foo %#codegen coder.extrinsic('rat'); [N D] = rat(pi); y = min(N,D);

这里,顶层函数 foo 调用外部 MATLAB 函数 rat,后者返回两个 mxArrays,分别代表 pi 的有理分式逼近式的分子 N 和分母 D。您可以将这些 mxArrays 传递给另一个 MATLAB 函数,在本例中为 min。由于传递给 min 的输入是 mxArrays,代码生成器会自动将 min 视为外部函数。因此,min 返回 mxArray。

使用 MATLAB Coder 生成 MEX 函数时,您可以将 min 返回的此 mxArray 直接赋给输出 y,因为 MEX 函数将其输出返回到 MATLAB。

codegen fooCode generation successful.

但是,如果您将 foo 放在 Simulink 模型的 MATLAB Function 模块中,然后更新或运行该模型,则会出现以下错误:

Function output 'y' cannot be an mxArray in this context. Consider preinitializing the output variable with a known type.

发生此错误是因为不支持将 mxArray 返回到 Simulink。要解决此问题,请将 y 定义为您希望 min 返回的值的类型和大小,本例中为双精度标量值:

function y = foo %#codegen coder.extrinsic('rat'); [N D] = rat(pi); y = 0; % Define y as a scalar of type double y = min(N,D);

在此示例中,外部函数 min 的输出会影响您为其生成代码的入口函数 foo 的输出 y。如果您尝试为 foo 生成独立代码(例如静态库),代码生成器将无法忽略外部函数调用,并产生代码生成错误。

codegen -config:lib foo??? The extrinsic function 'min' is not available for standalone code generation. It must be eliminated for stand-alone code to be generated. It could not be eliminated because its outputs appear to influence the calling function. Fix this error by not using 'min' or by ensuring that its outputs are unused. Error in ==> foo Line: 4 Column: 5 Code generation failed: View Error Report Error using codegen


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有