Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

使用 MATLAB Function 模块集成 C 代码

从 Simulink 模型中调用 C 代码

您可以使用 MATLAB Function 模块从 Simulink® 模型中调用外部 C 代码。请执行下列简要步骤:

  1. 首先找到包含源 (.c) 和头 (.h) 文件的现有 C 代码。

  2. MATLAB Function 模块中,输入调用 C 代码的 MATLAB® 代码。使用函数 coder.ceval。要通过引用传递数据,请使用 coder.refcoder.rrefcoder.wref

  3. Model Configuration Parameters 对话框的 Simulation Target 窗格中,指定用于仿真的 C 源文件和头文件。使用双引号引起头文件,例如 #include "program.h"。如果需要访问位于工作文件夹之外的 C 源文件和头文件,请在 Simulation Target 窗格的 Include Directories 文本框中列出文件的路径。

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

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

  5. 如果您拥有 Simulink Coder™ 许可证,则可以使用此方法为目标生成代码。要使用相同的源文件和头文件进行代码生成,请在 Code Generation > Custom Code 窗格中点击 Use the same custom code settings as Simulation Target。还可以指定不同的源文件和头文件。

    要条件化您的代码以执行仿真的不同命令和代码生成,可以使用 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. Library BrowserUser-Defined Functions 中,将 MATLAB Function 模块添加到模型中,然后双击该模块打开编辑器。

  5. 输入调用 doubleIt 程序的代码:

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

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

  8. Model Configuration Parameters 对话框中,打开 Simulation Target 窗格。

  9. Insert custom C code in generated 部分,从列表中选择 Header file,然后在 Header file 文本框中输入 #include "doubleIt.h"

  10. Additional build information 部分中,从列表中选择 Source files,在 Source files 文本框中输入 doubleIt.c,然后点击 OK

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

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

此过程仅适用于仿真。

Simulink 会为 MATLAB Function 模块和 Stateflow® 生成代码以进行模型仿真。使用 MATLAB Function 模块或 Stateflow 调用外部 C 代码时,您可以控制在模型仿真中导入的总线和枚举的类型定义。

Simulink 可以生成类型定义,您也可以提供包含类型定义的头文件。您可以使用 Model Configuration Parameters 对话框中的 Generate typedefs for imported bus and enumeration types 复选框来控制此行为。

要提供定义枚举和总线类型的自定义头文件,请执行以下操作:

  1. 清除 Generate typedefs for imported bus and enumeration types 复选框。

  2. Simulation Target 窗格上的 Header file 文本框中列出头文件。

要配置 Simulink 自动生成类型定义,请执行以下操作:

  1. 选中 Generate typedefs for imported bus and enumeration types 复选框。

  2. 不要列出与总线或枚举对应的头文件。

另请参阅

| | | | | | | |

相关示例

详细信息