在 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')
当将函数声明为代码生成的外部函数时,请遵守以下规则:
-
在调用函数之前将其声明为外部函数。
-
不要在条件语句中使用外部声明。
-
将外部函数的返回值赋给已知类型。请参阅
本文介绍了如何在MATLAB代码生成的上下文中使用MATLAB引擎执行函数调用,特别是通过`coder.extrinsic`声明外部函数的情况。文章详细阐述了外部函数的使用场景、构造方法、限制以及与`feval`的区别,还探讨了如何处理`mxArray`和对外部函数的调用限制。
最低0.47元/天 解锁文章
410

被折叠的 条评论
为什么被折叠?



