Main Content

使用 MATLAB Function 模块集成 C 代码

如果您有要在您的 Simulink® 模型中使用的 C 代码,您可以使用 MATLAB Function 模块在模型中调用外部 C 代码。MATLAB Function 模块使用 MATLAB® 命令调用 C 代码。您也可以从具有调用外部 C 代码的 MATLAB Function 模块的模型中生成代码。

Simulink 模型调用 C 代码

要在 Simulink 模型中调用外部 C 代码,请执行以下步骤:

  1. 确定包含要在模型中使用的 C 代码的源文件 (.c) 和头文件 (.h)。

  2. 在模型中插入一个 MATLAB Function 模块。

  3. MATLAB Function 模块中,使用 coder.ceval 函数调用 C 代码。要按引用传递数据,请使用 coder.refcoder.rrefcoder.wref

  4. 在“配置参数”窗口的仿真目标窗格中指定 C 源文件和头文件。使用双引号引起头文件,例如 #include "program.h"。如果需要访问位于工作文件夹之外的 C 源文件和头文件,请在仿真目标窗格的包含目录文本框中列出文件的路径。

    或者,使用 coder.cincludecoder.updateBuildInfo 函数在 MATLAB 代码中指定源文件和头文件。要开发与外部代码的接口,您可以使用 coder.ExternalDependency 类。要查看支持的工作流,请参阅Import custom code

  5. 测试 Simulink 模型并确保它正常工作。

  6. 如果您拥有 Simulink Coder™ 许可证,则可以为目标生成代码。要使用相同的源文件和头文件进行代码生成,请打开“配置参数”,导航到代码生成 > 自定义代码窗格,并启用使用与仿真目标相同的自定义代码设置。还可以指定不同的源文件和头文件。

    要条件化您的代码以执行仿真的不同命令和代码生成,可以使用 coder.target 函数。

在示例 MATLAB Function 模块中使用 coder.ceval

此示例说明如何从 MATLAB Function 模块中调用简单的 C 程序 doubleIt

  1. 在当前工作文件夹中创建源文件 doubleIt.c

    #include "doubleIt.h"
    
    double doubleIt(double u)
    {
         return(u*2.0);
    }
    
  2. 在当前工作文件夹中创建头文件 doubleIt.h

    #ifndef MYFN
    #define MYFN
    
    double doubleIt(double u);
    
    #endif
    
  3. 新建一个 Simulink 模型。将其保存为 myModel

  4. 在库浏览器中,导航到 Simulink > User-Defined Functions 库,并将 MATLAB Function 模块添加到模型中。

  5. 双击模块以打开 MATLAB Function 模块编辑器。输入调用 doubleIt 程序的代码:

    function y = callingDoubleIt(u)
    
    y = 0.0;
    y = coder.ceval("doubleIt",u);
    
  6. 将值为 3.5Constant 模块连接到 MATLAB Function 模块的输入端口。

  7. Display 模块连接到输出端口。

    This image shows a MATLAB Function block set to output to a Display block. The MATLAB Function uses a constant block with a value of 3.5 as an input.

  8. 打开“配置参数”窗口,导航到仿真目标窗格。

  9. 代码信息选项卡中,点击包含头文件,然后输入 #include "doubleIt.h"

    This image shows the Simulation Target pane. The text #include "doubleIt.h" has been included in the Include headers section.

  10. 点击源文件选项卡,然后输入 doubleIt.c。点击确定

    This image shows the Simulation Target pane. The text #include doubleIt.c has been included in the Source file section.

  11. 运行仿真。值 7 出现在 Display 模块中。

控制导入的总线和枚举类型定义

使用 MATLAB Function 模块或 Stateflow® 调用外部 C 代码时,您可以控制模型中导入的总线和枚举的类型定义。Simulink 可以为您生成类型定义,您也可以提供包含类型定义的头文件。您可以通过切换为导入的总线和枚举类型生成 typedef 参数来控制此行为。要找到此参数,请打开“配置参数”窗口,导航到仿真目标窗格,并展开高级参数部分。

要将 Simulink 配置为自动生成类型定义,请启用为导入的总线和枚举类型生成 typedef。要包含定义枚举和总线类型的自定义头文件,请清除为导入的总线和枚举类型生成 typedef 并在头文件文本框中列出该头文件。

另请参阅

| | | | | | | |

相关主题