使用 MATLAB Function 模块集成 C 代码
如果您有要在您的 Simulink® 模型中使用的 C 代码,您可以使用 MATLAB Function 模块在模型中调用外部 C 代码。MATLAB Function 模块使用 MATLAB® 命令调用 C 代码。您也可以从具有调用外部 C 代码的 MATLAB Function 模块的模型中生成代码。
从 Simulink 模型调用 C 代码
要在 Simulink 模型中调用外部 C 代码,请执行以下步骤:
确定包含要在模型中使用的 C 代码的源文件 (
.c
) 和头文件 (.h
)。在模型中插入一个 MATLAB Function 模块。
在 MATLAB Function 模块中,使用
coder.ceval
函数调用 C 代码。要按引用传递数据,请使用coder.ref
、coder.rref
或coder.wref
。在“配置参数”窗口的仿真目标窗格中指定 C 源文件和头文件。使用双引号引起头文件,例如
#include "program.h"
。如果需要访问位于工作文件夹之外的 C 源文件和头文件,请在仿真目标窗格的包含目录文本框中列出文件的路径。或者,使用
coder.cinclude
和coder.updateBuildInfo
函数在 MATLAB 代码中指定源文件和头文件。要开发与外部代码的接口,您可以使用coder.ExternalDependency
类。要查看支持的工作流,请参阅Import custom code。测试 Simulink 模型并确保它正常工作。
如果您拥有 Simulink Coder™ 许可证,则可以为目标生成代码。要使用相同的源文件和头文件进行代码生成,请打开“配置参数”,导航到代码生成 > 自定义代码窗格,并启用使用与仿真目标相同的自定义代码设置。还可以指定不同的源文件和头文件。
要条件化您的代码以执行仿真的不同命令和代码生成,可以使用
coder.target
函数。
在示例 MATLAB Function 模块中使用 coder.ceval
此示例说明如何从 MATLAB Function 模块中调用简单的 C 程序 doubleIt
。
在当前工作文件夹中创建源文件
doubleIt.c
。#include "doubleIt.h" double doubleIt(double u) { return(u*2.0); }
在当前工作文件夹中创建头文件
doubleIt.h
。#ifndef MYFN #define MYFN double doubleIt(double u); #endif
新建一个 Simulink 模型。将其保存为
myModel
。在库浏览器中,导航到 Simulink > User-Defined Functions 库,并将 MATLAB Function 模块添加到模型中。
双击模块以打开 MATLAB Function 模块编辑器。输入调用
doubleIt
程序的代码:function y = callingDoubleIt(u) y = 0.0; y = coder.ceval("doubleIt",u);
将值为
3.5
的 Constant 模块连接到 MATLAB Function 模块的输入端口。将 Display 模块连接到输出端口。
打开“配置参数”窗口,导航到仿真目标窗格。
在代码信息选项卡中,点击包含头文件,然后输入
#include "doubleIt.h"
。点击源文件选项卡,然后输入
doubleIt.c
。点击确定。运行仿真。值
7
出现在 Display 模块中。
控制导入的总线和枚举类型定义
使用 MATLAB Function 模块调用外部 C 代码时,您可以控制模型中导入的总线和枚举的类型定义。Simulink 可以为您生成类型定义,您也可以提供包含类型定义的头文件。您可以通过切换为导入的总线和枚举类型生成 typedef 参数来控制此行为。要找到此参数,请打开“配置参数”窗口,导航到仿真目标窗格,并展开高级参数部分。
要将 Simulink 配置为自动生成类型定义,请启用为导入的总线和枚举类型生成 typedef。要包含定义枚举和总线类型的自定义头文件,请清除为导入的总线和枚举类型生成 typedef 并在头文件文本框中列出该头文件。
另请参阅
类
函数
coder.ceval
|coder.target
|coder.cinclude
|coder.updateBuildInfo
|coder.ref
|coder.rref
|coder.wref