Main Content

目标语言编译器基础知识

目标语言编译器概述

目标语言编译器 (TLC) 是代码生成器的重要组成部分。它使您能够自定义生成的代码。通过自定义,您可以生成特定于平台的代码,也可以融入您自己的算法更改,以改善性能、控制代码大小,或保证代码与现有方法的兼容性。

TLC 包含:

  • 对应于所提供的 Simulink® 模块的子集的文件。

  • 指定标题和参数信息的模型范围信息的文件。

TLC 文件是显式控制代码生成方式的 ASCII 文件。通过编辑 TLC 文件,您可以更改代码生成的方式。

目标语言编译器为生成 ANSI® C 或 C++ 代码提供了一整套现成的 TLC 文件。您可以查看这些 TLC 文件,并对其进行小范围或大范围的更改。这种开放的环境为自定义生成代码提供了极大的灵活性。

有关详细信息,请参阅Author Blocks Using C MEX S-Functions,其中描述了如何编写包装的和完全内联的 S-Function,重点介绍 mdlRTW() 函数。

注意

不要自定义文件夹 matlabroot/rtw/c/tlc 中的 TLC 文件,即使有此功能也尽量不要尝试。这种 TLC 自定义可能不会在代码生成过程中应用,并可能导致不可预测的结果。

TLC 过程概述

此顶层图显示目标语言编译器在代码生成过程中的作用。

目标语言编译器 (TLC) 旨在将模型描述文件 model.rtw(或类似的文件)转换为特定于目标的代码或文本。

目标语言编译器将名为 model.rtw 的 Simulink 模块图的表示形式变换为 C 或 C++ 代码。model.rtw 文件包含模型的部分表示。该表示用高级语言描述模块图的执行语义。有关详细信息,请参阅model.rtw File and Scopes

在读取 model.rtw 文件后,目标语言编译器根据目标文件(这些文件为每个模块指定特定代码)和模型范围文件(这些文件指定整体代码样式)生成其代码。TLC 使用目标文件和 model.rtw 文件来生成 ANSI C 或 C++ 代码。

要创建特定于目标的应用程序,代码生成器需要模板联编文件,该文件为编译过程指定 C 或 C++ 编译器和编译器选项。代码生成器通过执行特定于给定模型的标记扩展,将模板联编文件变换为目标联编文件 (model.mk)。目标联编文件是泛型 rt_main 文件(或 grt_main)的修改版本。您必须修改 grt_main 以符合目标的特定需求,例如中断服务例程。请参阅Template Makefiles and Make OptionsCustomize Template Makefiles

目标语言编译器与 HTML、Perl 和 MATLAB® 有相似之处。它具有类似于 HTML 的标记语法、Perl 和其他脚本语言的强大功能和灵活性,以及 MATLAB 的数据处理能力(TLC 可以调用 MATLAB 函数)。TLC 生成的代码经过高度优化和充分注释。使用 TLC,您可以从线性、非线性、连续、离散或混合 Simulink 模型中生成代码。模型可以包括自动转换为代码的 Simulink 模块。但不包括调用 MATLAB 文件的 MATLAB 函数模块和 S-Function 模块。目标语言编译器使用模块目标文件来变换 model.rtw 文件和模型范围目标文件中的每个模块,以便对代码进行全局自定义。

您可以将 C MEX S-Function 函数与生成的代码合并到程序可执行文件中。您可以为 C MEX S-Function 编写目标文件以内联 S-Function(请参阅Inline C MEX S-Functions),从而通过消除对 S-Function 本身的函数调用和 S-Function 的 SimStruct 的内存开销来提高性能。内联 S-Function 就是将 S-Function 模块的代码集成到为模型生成的代码中。当 S-Function 没有 TLC 目标文件时,其 C 或 C++ 代码文件通过函数调用来调用。请参阅Inline S-Functions。您也可以为 MATLAB 语言文件或 Fortran S-Function 编写目标文件。

代码生成过程概述

目标语言编译器使用其目标文件和代码生成器输出来生成代码。

当从 Simulink 模型生成代码时,自动化过程的第一步是生成 model.rtw 文件。model.rtw 文件包括从 Simulink 模型生成代码所需的特定于模型的信息。model.rtw 传递给目标语言编译器,目标语言编译器将它与一组包含的系统目标文件和模块目标文件结合使用来生成代码。

只有最终的可执行文件被直接写入当前文件夹。对于在代码生成期间创建的其他文件(包括 model.rtw 文件),将使用编译文件夹。该文件夹在当前文件夹中创建,并命名为 model_target_rtwtarget 是目标环境 grt 的缩写,它是一般实时目标。

放在编译文件夹中的文件包括:

  • 生成的 C 或 C++ 源代码的主体(model.cmodel.cpp

  • 头文件 (model.h)

  • 头文件 model_private.h(定义生成的代码专用的参数和数据结构体)

  • 联编文件 model.mk(用于编译应用程序)

  • 管理编译过程文件 中所述的其他文件

相关主题