在 MATLAB® 代码中处理对函数 foo
的调用时,代码生成器会找到 foo
的定义并为其函数体生成代码。在某些情况下,您可能希望绕过代码生成,而是使用 MATLAB 引擎来执行调用。使用 coder.extrinsic('foo')
声明对 foo
的调用不生成代码,而是使用 MATLAB 引擎执行。在此上下文中,foo
称为外部函数。在执行期间,仅当 MATLAB 引擎可用时,此功能才可用。这种情况的示例包括 MEX 函数的执行、Simulink® 仿真或代码生成时的函数调用(也称为编译时)。
如果为调用 foo
并包含 coder.extrinsic('foo')
的函数生成独立代码,代码生成器将尝试确定 foo
是否影响输出。如果 foo
不影响输出,则代码生成器继续生成代码,但会从生成的代码中排除 foo
。否则,代码生成器会产生编译错误。
将 coder.extrinsic('foo')
指令包含在某特定 MATLAB 函数中会将该 MATLAB 函数中对 foo
的所有调用都声明为外部调用。或者,您可能希望将外部声明的范围缩小到仅对 foo
的一次调用。请参阅使用 feval 调用 MATLAB 函数。
将函数声明为外部函数的情形
以下是您可能会考虑将 MATLAB 函数声明为外部函数的一些常见情况:
-
函数执行显示或记录操作。此类函数主要在仿真期间有用,在嵌入式系统中不使用。
-
在您的 MEX 执行或 Simulink 仿真中,您要使用代码生成不支持的 MATLAB 函数。此工作流不适用于非仿真目标。
-
您使用 coder.const 指示代码生成器对函数调用进行常量折叠。在这种情况下,仅当 MATLAB 引擎可用于执行调用时,才会在代码生成期间调用该函数。
使用 coder.extrinsic
构造
要将函数 foo
声明为外部函数,请在您的 MATLAB 代码中包含以下语句。
coder.extrinsic('foo')
当将函数声明为代码生成的外部函数时,请遵守以下规则:
-
在调用函数之前将其声明为外部函数。
-
不要在条件语句中使用外部声明。
-
将外部函数的返回值赋给已知类型。请参阅