从 Simulink 模型生成 C 代码
Simulink® Coder™ 从 Simulink 模型生成独立的 C 和 C++ 代码以在各种应用中部署。有关 Simulink Coder 支持的 DSP System Toolbox™ 功能的列表,请参阅 C 代码生成支持的模块。
此示例从 ex_codegen_dsp 模型生成 C 代码,并从生成的代码编译一个可执行文件。您可以在 MATLAB® 环境内运行该可执行文件。此外,您也可以将代码打包并转移到另一个未安装 MATLAB 和 Simulink 产品的开发环境。
打开模型
打开 ex_codegen_dsp 模型。该模型实现一个简单的自适应滤波器,以从信号中去除噪声,同时标识一个表征噪声频率成分的滤波器。

为代码生成配置模型
您也可以使用 DSP 系统模板创建模型。有关详细信息,请参阅针对信号处理模型配置 Simulink 环境。
通过在配置参数对话框中指定代码生成设置来准备模型以进行代码生成。选择合适的求解器和代码生成目标,并检查模型配置的执行效率。有关上述每个步骤的详细信息,请参阅为模型生成 C 代码 (Simulink Coder)。
对模型进行仿真
对模型进行仿真。Time Scope 显示输入和滤波后信号的特征。

Array Plot 显示 LMS 滤波器已为其有效调整并从信号中滤除噪声的最后 32 个滤波器权重。

也可以使用以下命令访问这些系数:
filter_wts(:,:,1201)
从模型生成代码
在从模型生成代码之前,您必须首先确保对当前文件夹有写入权限。
要生成代码,您必须进行以下更改:
在模型工具条的建模选项卡中,点击模型设置。配置参数对话框打开。导航到代码生成选项卡,选择仅生成代码参数,并点击应用。
在模型工具条的 App 选项卡中,点击下拉箭头。在代码生成下,点击 Simulink Coder。C 代码选项卡出现在模型窗口中。在 C 代码选项卡中,点击生成代码图标 (
)。
在模型完成生成代码后,代码生成报告出现,允许您检查生成的代码。请注意,编译过程在当前 MATLAB 工作文件夹中创建一个名为 ex_codegen_dsp_grt_rtw 的新子文件夹。此子文件夹包含代码生成过程创建的所有文件,包括包含生成的 C 源代码的文件。有关查看生成代码的详细信息,请参阅为模型生成 C 代码 (Simulink Coder)。
编译并运行生成的代码
设置 C/C++ 编译器
要编译可执行文件,您必须设置受支持的 C 编译器。有关当前版本中支持的编译器的列表,请参阅支持和兼容的编译器。
要设置编译器,请在 MATLAB 命令提示符下运行以下命令:
mex –setup编译生成的代码
在设置编译器后,您可以编译并运行编译的代码。ex_codegen_dsp 模型当前配置为仅生成代码。要编译生成的代码,您必须首先进行以下更改:
在模型工具条的建模选项卡中,点击模型设置。配置参数对话框打开。导航到代码生成选项卡,清除仅生成代码参数,并点击应用。
在模型工具条的 C 代码选项卡中,点击编译图标 (
)。
代码生成器编译可执行文件并生成代码生成报告。代码生成器将可执行文件放置在工作文件夹中。在 Windows 上,可执行文件为 ex_codegen_dsp.exe。在 Linux 上,可执行文件为 ex_codegen_dsp。
运行生成的代码
要运行生成的代码,请在 MATLAB 命令提示符下输入以下命令:
!ex_codegen_dsp运行生成的代码会创建一个 MAT 文件,其中包含与模型仿真生成的变量相同的变量。MAT 文件中的变量以 rt_ 为前缀命名。在运行生成的代码后,您可以通过在 MATLAB 提示符下键入以下命令从 MAT 文件加载变量:
load ex_codegen_dsp.mat现在,您可以比较来自生成代码的变量与来自模型仿真的变量。要访问生成代码的最后一组系数,请在 MATLAB 提示符下输入:
rt_filter_wts(:,:,1201)
请注意,filter_wts(:,:,1201) 和 rt_filter_wts(:,:,1201) 中的系数匹配。
有关编译和运行可执行文件的详细信息,请参阅为模型生成 C 代码 (Simulink Coder)。
将代码转移到另一个开发环境
一旦从您的 Simulink 模型生成了代码,您就可以使用 pack-and-go 实用工具将代码转移到另一个开发环境。当开发环境没有 MATLAB 和 Simulink 产品时,请使用此实用工具。
pack-and-go 实用工具在代码生成后使用工具自定义编译过程,并使用 packNGo (Simulink Coder) 函数查找和打包用于编译可执行镜像的文件。这些文件打包在一个压缩文件中,您可以使用标准 zip 实用工具转移该压缩文件并进行解包。
您可以通过使用用户界面或使用命令行界面对代码进行打包。命令行界面能够更好地控制代码打包细节。有关每种方法的详细信息,请参阅转移或共享生成的代码 (Simulink Coder)。
有关如何打包从此示例生成的 C 代码和可执行文件的示例,请参阅Relocate Code Generated from a Simulink Model to Another Development Environment。
另请参阅
主题
- 为模型生成 C 代码 (Simulink Coder)
- Relocate Code Generated from a Simulink Model to Another Development Environment
- 转移或共享生成的代码 (Simulink Coder)
- Generate C Code from MATLAB Code
- How To Run a Generated Executable Outside MATLAB