当处理调用一个函数喷火
MATLAB中®代码,代码生成器的定义喷火
为它的身体并生成代码。在某些情况下,您可能想要绕过代码生成,而是使用MATLAB引擎执行调用。使用coder.extrinsic (“foo”)
宣布调用喷火
不生成代码,而是使用MATLAB引擎执行。在这种背景下,喷火
被称为一个外部函数。此功能只有当可用MATLAB引擎在执行期间是可用的。这种情况的例子包括墨西哥人的执行功能,仿真软件金宝app®模拟或函数调用的代码生成(也称为编译时)。
如果你为一个函数,调用生成独立的代码喷火
,包括coder.extrinsic (“foo”)
代码生成器,试图确定喷火
影响输出。如果喷火
不影响输出,与代码生成代码生成器收入,但不包括喷火
从生成的代码。否则,代码生成器产生编译错误。
包括coder.extrinsic (“foo”)
指令在某些声明所有调用MATLAB函数喷火
在MATLAB函数作为外在。或者,您可能希望外在声明的范围缩小到一个调用喷火
。看到使用函数宏指令调用MATLAB函数(MATLAB编码器)。
这些都是一些常见的情况下,你可以考虑将MATLAB函数声明为外部:
函数执行显示或记录的行为。这种功能主要是有用的在嵌入式系统仿真和不习惯。
在墨西哥人执行或仿真软件模拟,您想要使用一个不支持金宝app的MATLAB函数代码生成。金宝app此工作流不适用于non-simulation目标。
你指示代码生成器常数折叠函数调用使用coder.const
。在这种情况下,函数被调用MATLAB引擎时只在代码生成可供执行的调用。
coder.extrinsic
构造声明一个函数喷火
外在,这句话包含在您的MATLAB代码。
coder.extrinsic (“foo”)
当声明函数作为代码生成的外在,遵守这些规则:
你叫它之前声明函数作为外在。
不使用外在条件语句中声明。
一个外部函数的返回值分配给一个已知类型。看到使用mxArrays(MATLAB编码器)。
额外的信息和示例,请参阅coder.extrinsic
。
代码生成器自动治疗很多常见MATLAB可视化功能,如情节
,disp
,图
外在。你不需要显式地声明他们是通过使用外部函数coder.extrinsic
。例如,您可能想要的电话情节
在MATLAB环境中可视化结果。如果你生成一个墨西哥人从一个函数,函数调用情节
,然后运行生成的墨西哥人功能,代码生成器将调用情节
MATLAB引擎功能。如果您生成一个库或者可执行文件,生成的代码不包含调用情节
函数。
如果您生成墨西哥人或独立使用C / c++代码MATLAB编码器™代码生成报告,强调从MATLAB代码调用外部函数。通过检查报告,您可以确定哪些功能只支持在MATLAB环境中。金宝app
的coder.extrinsic
构造函数的范围。例如,考虑下面的代码:
函数y = foo% # codegencoder.extrinsic (“老鼠”,“最小值”);[N D] =鼠(π);y = 0;y = min (N、D);
在这个例子中,老鼠
和最小值
外在一样对待每次他们被称为主要功能喷火
。有两种方法可以缩小范围的外在声明内的主要功能:
申报的MATLAB函数外在在当地的一个函数,在这个例子中:
函数y = foo% # codegencoder.extrinsic (“老鼠”);[N D] =鼠(π);y = 0;y = mymin (N、D);函数y = mymin (a, b) coder.extrinsic (“最小值”);y = min (a, b);
在这里,这个函数老鼠
每次都是外在叫做内部主要功能吗喷火
,但这个函数最小值
外在只有当被称为内部本地函数mymin
。
而不是使用coder.extrinsic
构造,使用调用MATLAB函数函数宏指令
。这种方法将在下一节中描述。
假设您定义一个类myClass
这有一个非静态的方法喷火
,然后创建一个实例obj
这个类的。如果你想声明的方法obj.foo
外在的MATLAB代码,你打算让代码生成,遵循以下规则:
写电话喷火
作为一个函数调用。不写电话使用点符号。
声明喷火
外在的使用语法coder.extrinsic (“foo”)
。
例如,定义myClass
为:
classdefmyClass属性支持= 1结束方法函数y = foo (obj, x) y = obj。道具+ x;结束结束结束
这里有一个例子MATLAB函数声明喷火
外在。
函数y = myFunction (x)% # codegencoder.extrinsic (“foo”);obj = myClass;y = foo (obj, x);结束
非静态的方法也被称为普通方法。看到定义类方法和功能。
使用coder.extrinsic
构造:
期间不产生输出调用MATLAB函数模拟,不产生不必要的代码。
使代码可读性,更容易调试。你可以扫描的源代码coder.extrinsic
语句隔离调用MATLAB函数,它可以创建和传播mxArrays
。看到使用mxArrays(MATLAB编码器)。
函数宏指令
缩小的范围外在声明一个函数调用,使用函数函数宏指令
。函数宏指令
自动解释为一个非本征函数在代码生成。因此,您可以使用函数宏指令
方便地调用函数,你想在MATLAB环境中执行,而不是编译生成的代码。
考虑下面的例子:
函数y = foo coder.extrinsic (“老鼠”);[N D] =鼠(π);y = 0;y =函数宏指令(“最小值”、N、D);
因为函数宏指令
是外在,声明函数宏指令(“分钟”,N, D)
评估通过MATLAB -不是编译和声明的函数相同的结果吗最小值
外在的这个电话。相比之下,函数老鼠
是外在整个函数喷火
。
代码生成器不支持使用金宝app函数宏指令
调用本地函数或函数位于私人文件夹。
一个外部函数的输出是一个mxArray
,也被称为一个MATLAB数组。唯一有效的操作mxArrays
是:
存储一个mxArray
在一个变量中。
传递一个mxArray
一个函数。
返回一个mxArray
从一个回MATLAB函数。
转换一个mxArray
到一个已知类型在运行时。执行此操作,分配mxArray
一个变量,其类型已经由之前的任务。请参见下面的例子。
使用一个mxArray
由一个外部函数返回在其他操作(例如,从一个回来MATLAB函数块模型执行),您必金宝app须首先将其转换为一个已知的类型。
如果一个函数的输入参数mxArrays
,代码生成器自动将函数视为外在。
将一个mxArray
到一个已知类型、分配mxArray
定义一个变量,其类型。在运行时,mxArray
转化为变量的类型分配给。然而,如果数据mxArray
不一致的变量的类型,你会获得一个运行时错误。
例如,考虑这样的代码:
函数y = foo% # codegencoder.extrinsic (“老鼠”);[N D] =鼠(π);y = min (N、D);
在这里,顶级的功能喷火
调用外部MATLAB函数老鼠
,返回两个mxArrays
代表分子N
和分母D
的有理分式近似π
。你可以通过这些mxArrays
另一个MATLAB函数——在这种情况下,最小值
。因为输入传递给最小值
是mxArrays
,代码生成器自动处理最小值
作为一个非本征函数。作为一个结果,最小值
返回一个mxArray
。
同时生成一个墨西哥人通过使用函数MATLAB编码器,您可以直接分配mxArray
返回的最小值
到输出y
因为墨西哥人MATLAB函数返回它的输出。
但如果你把喷火
在一个MATLAB函数块在仿真软件模型,然后金宝app更新或运行模型,得到这个错误:
函数输出y不能一个mxArray在这个上下文。考虑preinitializing输出变量与一个已知的类型。
这是因为返回一个错误mxArray
不支持动态仿真模金宝app块。金宝app为了解决这个问题,定义y
的类型和尺寸您期望的价值最小值
返回——在这种情况下,一个标量双,如下:
函数y = foo% # codegencoder.extrinsic (“老鼠”);[N D] =鼠(π);y = 0;% y定义为一个标量类型的翻倍y = min (N、D);
完整的MATLAB运行时环境不支持在代码生成。金宝app因此,调用MATLAB函数外在时以下限制: