主要内容

coder.extrinsic

将函数声明为外部函数并在中执行MATLAB

描述

例子

外部编码器(作用宣布作用作为一个外部函数。代码生成器不为外部函数体生成代码,而是使用MATLAB®引擎来执行调用。仅当MATLAB引擎在执行期间可用时,此功能才可用。MATLAB引擎可用的情况示例包括执行MEX函数、Simulink金宝app®模拟或代码生成时的函数调用(也称为编译时).

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

你不能使用塞瓦尔编码员在通过使用声明为外部的函数上coder.extrinsic

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

请注意

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

外部编码器(function1,...functionN)宣布function1通过functionN作为外在功能。

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

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

看到为全局数据生成代码

外部编码器(“同步:掉”, 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,颜色);结束作用创建打印(a、b、颜色)%声明补丁为外部的外部编码器(“补丁”); x=[0;a;a];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函数。此示例说明如何通过将这些函数声明为外部函数,在生成的MEX代码中仍然使用这些金宝app函数。

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

功能喷火包含对函数的调用情节hascyclesisdag代码生成不支持的。金宝app属性显式声明这三个函数是外部的外向型编码员建筑

作用[hasCycles,isDAG] = foo(source,target)“hascycles”“isdag”“阴谋”); 断言(numel(源)==numel(目标))G=有向图(源,目标);图(G)hasCycles=hasCycles(G);isDAG=isDAG(G);结束

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

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

调用生成的MEX函数富美在适当的投入下:

[out1,out2]=foo_-mex([1 2 4 4],[2 3 3 1])
out1=逻辑0 out2=逻辑1

MATLAB还显示了图:

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

输入参数

全部崩溃

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

例子:编码器。外部('补丁')

数据类型:烧焦

局限性

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

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

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

提示

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

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

扩展功能

C/C++代码生成
使用Matlab®编码器生成C和C++代码™.

GPU的代码生成
使用GPU编码器为NVIDIA®GPU生成CUDA®代码™.

在R2011a中引入