主要内容

coder.extrinsic

将一个函数声明为外部函数并在内部执行它MATLAB

描述

例子

coder.extrinsic (函数声明函数作为一个外部函数。代码生成器不为外部函数体生成代码,而是使用MATLAB®引擎来执行调用。只有当MATLAB引擎在执行过程中可用时,此功能才可用。MATLAB引擎可用的例子包括MEX函数的执行,Simulink金宝app®模拟,或代码生成时的函数调用(也称为编译时).

在独立的代码生成过程中,代码生成器试图确定一个外部函数是否影响调用它的函数的输出—例如通过返回mxArrays转换为输出变量。如果输出没有变化,代码生成器将继续进行代码生成,但从生成的代码中排除外部函数。否则,代码生成器将产生编译错误。

你不能使用coder.ceval在通过使用声明为外部的函数上coder.extrinsic

coder.extrinsic在代码生成之外被忽略。

请注意

代码生成器自动处理许多常见的MATLAB可视化函数,如情节disp,数字外在。你不需要使用显式声明它们为外部函数coder.extrinsic

coder.extrinsic (function1,...functionN)声明function1通过functionN非本征函数。

coder.extrinsic (的同步:, function1,…functionN)在调用外部函数之前和之后,使MATLAB执行和生成的代码执行或Simulink仿真之间的全局数据同步金宝appfunction1通过functionN.如果只有少数外部调用使用或修改全局数据,则通过将全局同步模式设置为,在所有外部函数调用之前和之后关闭同步在mex功能入口和出口.使用的同步:选项为只修改全局数据的外部调用打开同步。

如果你使用MATLAB编码器™生成MEX函数,在调用外部函数后,可以验证MATLAB和MEX函数之间常量全局数据的一致性。

看到为全局数据生成代码

coder.extrinsic (“同步:掉”, function1,…functionN)在调用外部函数之前和之后,禁止MATLAB执行和生成代码执行之间的全局数据同步function1通过functionN.如果大多数外部调用使用或修改全局数据,但有少数不使用,则使用“同步:掉”选项关闭不修改全局数据的外部调用的同步。

如果你使用MATLAB编码器为了生成MEX函数,在调用外部函数后,禁止验证MATLAB和MEX函数之间常量全局数据的一致性。

看到为全局数据生成代码

例子

全部折叠

MATLAB函数补丁不支持代码生成金宝app。这个示例展示了仍然可以使用的功能补丁在生成的MEX函数中声明补丁作为MATLAB函数的外部变量。

这个MATLAB代码声明补丁作为局部函数的外部变量create_plot.通过声明补丁作为外在的,您指示代码生成器不要为补丁.相反,代码生成器进行分派补丁到MATLAB中执行。

代码生成器自动处理许多常见的MATLAB可视化函数,如函数外在。

函数毕达哥拉斯(a, b, c =颜色)% # codegen计算直角三角形的斜边%,并将三角形显示为补丁对象。C =√(a^2 + b^2)create_plot (a, b,颜色);结束函数create_plot (a, b,颜色)%声明补丁为外部的coder.extrinsic (“补丁”);x = [0;;];y = (0, 0; b);补丁(x, y,颜色);轴(“平等”);结束

为生成一个MEX函数毕达哥拉斯.另外,生成代码生成报告。

codegen报告毕达哥拉斯arg游戏{1 1(。3。3。3)}

在报告中,查看MATLAB代码create_plot

报告强调了补丁函数,表示它们被视为外部函数。

运行MEX函数。

Pythagoras_mex (3,4, [1.0 0.0 0.0]);

MATLAB将直角三角形的图形显示为一个红色的补丁对象。

请注意

方法生成MEX文件codegen命令,您还可以放置该函数毕达哥拉斯在一个MATLAB函数块在Simulink模金宝app型中。当你模拟模型时MATLAB函数块具有类似的行为pythagoras_mex

某些用于图形和网络算法的MATLAB函数不支持代码生成。金宝app这个示例展示了如何在生成的MEX代码中仍然使用这些函数,方法是将它们声明为外部函数。

定义MATLAB函数喷火它接受有向图的源节点和目标节点索引作为输入,并确定该图是否为非循环图。这个函数喷火也绘制有向图。

这个函数喷火包含对函数的调用情节hascycles,isdag代码生成不支持的。金宝app属性显式声明这三个函数是外部的coder.extrnisic构造。

函数[hasCycles,isDAG] = foo(source,target)“hascycles”“isdag”“阴谋”);断言(numel(source) == numel(target))) G = diggraph (source,target);plot(G) hasCycles = hasCycles (G);isDAG = isDAG (G);结束

生成MEX代码喷火.指定输入为double类型的无界向量。

codegen喷火arg游戏{coder.typeof(0,正),coder.typeof(0,正)}

调用生成的MEX函数foo_mex与合适的输入:

[out1,out2] = foo_mex([1 2 4 4],[2 3 3 1])
Out1 =逻辑0 out2 =逻辑1

MATLAB还显示了图:

有四个顶点和四条边的有向无环图。

输入参数

全部折叠

声明为外部的MATLAB函数的名称。

例子:coder.extrinsic(“补丁”)

数据类型:字符

限制

  • 外部函数调用有一些可能影响性能的开销。外部函数调用中传递的输入数据必须提供给MATLAB,这需要对数据进行复制。如果函数有任何输出数据,则必须将这些数据传输回MEX函数环境,这也需要一个副本。

  • 代码生成器不支持使用金宝appcoder.extrinsic调用位于私有文件夹中的函数。

  • 代码生成器不支持使用金宝appcoder.extrinsic调用局部函数。

提示

  • 代码生成器自动处理许多常见的MATLAB可视化函数,如情节disp,数字外在。你不需要使用显式声明它们为外部函数coder.extrinsic

  • 使用coder.screener函数来检测哪些函数必须声明为外部函数。此函数运行代码生成准备工具,该工具将筛选MATLAB代码中不支持代码生成的特性和函数。金宝app

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

GPU的代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。

介绍了R2011a