主要内容

外部编码器

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

说明

例子

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

在独立代码生成期间,代码生成器尝试确定外部函数是否影响调用它的函数的输出—例如,通过返回MX阵列输出变量。如果输出没有变化,代码生成器继续生成代码,但从生成的代码中排除外部函数。否则,代码生成器将产生编译错误。

你不能使用编码器.ceval通过使用外部编码器.

外部编码器在代码生成之外被忽略。

注意

代码生成器自动处理许多常用的MATLAB可视化函数,例如情节,显示,和图形,作为外在的。您不必使用外部编码器.

编码器。外部(函数1,函数n)声明功能1通过函数n作为外部函数。

外部编码器('-sync:开',函数1,函数n)在调用外部函数之前和之后,在MATLAB执行和生成的代码执行或Simulink模拟之间实现全局数据的同步金宝app功能1通过函数n. 如果只有少数外部调用使用或修改全局数据,请通过将全局同步模式设置为,在所有外部函数调用之前和之后关闭同步在MEX功能入口和出口. 使用'-sync:开'选项仅对修改全局数据的外部调用启用同步。

看到了吗为全局数据生成代码(MATLAB编码器).

外部编码器('-sync:关闭',函数1,函数n)在调用外部函数之前和之后,禁用MATLAB执行和生成代码执行之间的全局数据同步功能1通过函数n. 如果大多数外部调用使用或修改全局数据,但少数调用不使用,请使用'-sync:关闭'选项关闭不修改全局数据的外部调用的同步。

看到了吗为全局数据生成代码(MATLAB编码器).

示例

全部折叠

MATLAB函数补丁不支持生成代码金宝app。此示例演示如何仍然使用的功能补丁在生成的MEX函数中补丁作为MATLAB函数的外部函数。

这个MATLAB代码声明补丁作为局部函数中的外部函数创建\u绘图. 宣布补丁作为外部的,您指示代码生成器不要为生成代码补丁. 相反,代码生成器调度补丁到MATLAB执行。

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

功能c=毕达哥拉斯(a、b、颜色)%#编码基因%计算直角三角形的斜边%并将三角形显示为面片对象。c=sqrt(a^2+b^2);创建图形(a、b、颜色);结束功能创建打印(a、b、颜色)%将修补程序声明为外部修补程序外部编码器('补丁'); x=[0;A.a] ;y=[0;0;b] ;补丁(x,y,颜色);轴线('相等');结束

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

编码基因-报告毕达哥拉斯-参数{1, 1, [.3 .3 .3]}

在报告中,查看创建\u绘图.

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

运行MEX函数。

毕达哥拉斯(3,4,[1.0.0.0]);

MATLAB将直角三角形的绘图显示为红色面片对象。

注意

而不是使用编码基因命令,也可以放置函数毕达哥拉斯内部MATLAB函数Simulink模型中金宝app的块。当您模拟模型时MATLAB函数块的行为与毕达哥拉斯.

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

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

函数调用代码生成不支持的函数:金宝app

  • 情节:代码生成器会自动将此函数视为外部函数。

  • 有向图isdag公司:这两个函数通过使用外向型编码器构造。

功能isDAG=foo(源,目标)编码器.外部('有向图','isdag'公司); 断言(numel(source)==numel(target))G=有向图(source,target);图(G)isDAG=isDAG(G);结束

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

编码基因-参数{coder.typeof(0,Inf),coder.typeof(0,Inf)}

调用生成的MEX函数fooïu mex公司通过适当的输入:

foo\u mex([1 2 4 4],[2 3 3 1])
ans=逻辑1

MATLAB还显示以下图形:

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

输入参数

全部折叠

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

例子:coder.extrinsic('补丁')

数据类型:烧焦

局限性

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

  • 代码生成器不支持使用金宝app外部编码器调用位于专用文件夹中的函数。

  • 代码生成器不支持使用金宝app外部编码器调用本地函数。

提示

  • 代码生成器自动处理许多常用的MATLAB可视化函数,例如情节,显示,和图形,作为外在的。您不必使用外部编码器.

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

R2011a引入