管理编译过程文件
要应用从编译过程生成的代码源和头文件,了解编译过程生成的文件以及控制文件生成的条件会很有帮助。这些信息提供对生成的代码资源的访问,例如:
模型入口点的公共接口
与内置数据类型对应的枚举类型
描述模型信号、状态和参数的数据结构体
代码生成器会在代码生成和编译过程中创建
文件。您可以自定义生成的头文件、源文件和数据文件的文件名。有关详细信息,请参阅Customize Generated File Names (Embedded Coder)。代码生成器还会创建其他文件夹和依赖项文件以支持共享实用工具和模型引用。有关编译过程创建的文件夹的详细信息,请参阅管理编译过程文件夹。有关说明如何使用工程来管理编译过程文件夹的示例,请参阅在工程中生成代码并进行模型仿真。model
.*
根据模型架构和代码生成选项,在基于 GRT 的系统目标文件的编译过程中,可能会生成一些在基于 ERT 的系统目标文件的编译过程中不会生成的文件。此外,对于基于 ERT 的系统目标文件,编译过程对生成的文件的打包方式也与基于 GRT 的系统目标文件不同。请参阅Manage File Packaging of Generated Code Modules (Embedded Coder)。
注意
默认情况下,编译过程会删除编译文件夹中的外部(非生成的)源文件。可以按照在编译文件夹中保留外部代码文件中的规范在编译文件夹中保留外部源文件。
下表描述了生成的主要文件。在表中显示的生成的文件名中,model
表示要为其生成代码的模型的名称。subsystem
表示模型中子系统的名称。选择 Create code generation report 参数时,代码生成器会生成一组 HTML 文件。对于每个源文件以及编译文件夹内 html
子文件夹中的 model
_contents.html
索引文件,都有一个对应的 HTML 文件。表中的源文件和头文件具有依存关系。有关其他文件依存关系的描述,请参阅Manage Build Process File Dependencies和Add Build Process Dependencies。
文件 | 描述 |
---|---|
| 定义与内置数据类型对应的枚举类型。 当满足下列一个或多个条件时,模型编译会生成此文件:
|
| 包含 Windows® 批处理文件命令,用于设置编译器环境和调用 有关使用此文件的详细信息,请参阅 model.bat。 |
| 对应于模型文件。 Target Language Compiler 生成此 C 或 C++ 源代码文件。该文件包含:
|
| 可执行程序文件。 模型编译生成此文件,除非您显式指定代码生成器仅生成代码。编译会在开发系统的 |
| 定义模型数据结构体和对接模型入口点和数据结构体的公共接口。通过访问宏提供与实时模型数据结构体 ( 模型中的子系统
有关详细信息,请参阅 model.h。 |
| 生成的联编文件,它通过开发系统的 如果设置 |
| 表示已编译的模型。 默认情况下,编译过程完成时,会删除此 ASCII 文件。您可以选择保留该文件以供检查。 |
| (可选文件)包含描述模型信号、状态和参数的数据结构体(不使用外部模式)。 有关详细信息,请参阅使用 C API 在生成的代码和外部代码之间交换数据。 |
| 包含参数数据结构体和常量模块 I/O 数据结构体的声明(在满足条件时生成),以及模型使用的结构体数据类型的零表示形式。 当模型使用这些数据结构体时,模型编译便会生成此文件。结构体的
|
| (可选文件)声明包含生成的模型数据结构体的数据类型和数据类型转换信息的结构体,以支持外部模式。 |
| 包含模型和子系统的局部 模型编译中生成的源文件包含此文件。将外部代码与从模型生成的代码集成时,请包含
有关详细信息,请参阅Manage Build Process File Dependencies。 |
| 包含计时桥的类型定义。 模型编译为引用模型或包含模型引用模块的模型生成此文件。 |
| (可选文件)包含外部模式用于初始化外部模式连接的 MATLAB® 语言命令。 |
| 提供实时模型数据结构体和参数数据结构体的前向声明。 从模型编译中生成的头文件包含此文件。可重用函数的函数声明可以使用这些结构体。 |
| 包含多字宽数据类型及其字长块的类型定义。如果您的代码使用多字数据类型,请包含此头文件。 当满足下列一个或多个条件时,模型编译会生成此文件:
|
| 为 当满足下列一个或多个条件时,模型编译会生成这些文件:
|
| 包含静态主程序模块(如 编译过程不会在代码生成时创建这些模块。模块包括 |
| 提供基本的类型定义、 对于不生成 GRT 接口且没有非内联 S-Function 的基于 ERT 的系统目标文件, 有关详细信息,请参阅rtwtypes.h和Manage Build Process File Dependencies。 |
| 标记文件。 编译过程会生成这些文件以帮助 |
| 包含特殊数学常量(例如 π 和 e)的类型定义并定义 当生成的代码需要数学常量定义或函数体不访问所需的模型函数参数时,模型编译会生成此文件。 |
| (可选文件)提供非内联 S-Function 在模型中使用的函数。 非内联 S-Function 使用函数 |
| (可选文件)包含每个非内联非虚拟子系统的 C 源代码,或者在子系统配置为将代码放在单独的文件中时复制代码。 |
| (可选文件)包含非内联非虚拟子系统的导出符号。 |
model
.bat
此文件包含 Windows 批处理文件命令,这些命令用于设置编译器环境和调用 make
实用工具。
如果您在编译过程中使用工具链方法,则还可以使用此批处理文件从生成的联编文件
中提取信息。该信息包括出现在联编文件中的宏定义和值、例如 model
.mkCFLAGS
(C 编译器标志)和 CPP_FLAGS
(C++ 编译器标志)。选择包含
的文件夹作为当前工作文件夹,并在命令行窗口中键入:model
.bat
>> system('model.bat info')
在 UNIX 和 Macintosh 平台上,代码生成器不会创建
文件。要从在这些系统上生成的联编文件中提取工具链方法编译的信息,请在命令行窗口中键入:model
.bat
>> system('gmake -f model.mk info')
model
.h
头文件
声明模型数据结构体和对接模型入口点和数据结构体的公共接口。此头文件还通过使用访问宏提供与实时模型数据结构体 (model
.h
) 的接口。如果您的代码要与模型函数或模型数据结构体对接,请包含 model
_M
:model
.h
导出的全局信号
extern int32_T INPUT; /* '<Root>/In' */
全局结构体定义
/* Block parameters (auto storage) */ extern Parameters_mymodel mymodel_P;
实时模型 (RTM) 宏定义
#ifndef rtmGetSampleTime # define rtmGetSampleTime(rtm, idx) ((rtm)->Timing.sampleTimes[idx]) #endif
模型入口函数(ERT 示例)
extern void mymodel_initialize(void); extern void mymodel_step(void); extern void mymodel_terminate(void);
main.c
(或 .cpp
)文件包含
。如果模型编译从 TLC 脚本生成 model
.hmain.c
(或 .cpp
)文件,则 TLC 源可以包括
。model
.h
#include "%<CompiledModel.Name>.h"
如果 main.c
是静态源文件,则可以使用固定的头文件名 rtmodel.h
。该文件包含
头文件:model
.h
#include "model.h" /* If main.c is generated */
或
#include "rtmodel.h" /* If static main.c is used */
其他外部源文件可能要求包含
以对接模型数据,例如导出的全局参数或信号。由于生成的代码的要求,model
.h
文件本身可能具有其他头文件依存关系。请参阅System Header Files和Code Generator Header Files。 model
.h
要减少依存关系并减少包含的头文件的数目,请参阅Manage Build Process File Dependencies。
rtwtypes.h
头文件 rtwtypes.h
定义生成的代码所需的数据类型、结构体和宏。对于 GRT 和 ERT 系统目标文件,需要包含 rtwtypes.h
,而不是包含 tmwtypes.h
。
通常,生成的代码要求整数运算在特定值上溢或下溢。例如,当代码需要 16 位整数时,代码不接受 8 位或 32 位整数类型。C 语言没有为 char
、int
等类型中的位数设置标准。因此,C 语言中没有普遍接受的可表示特定字长整数的数据类型。
为了适应 C 语言的这一特性,生成的代码使用具有特定大小的整数类型,例如 int8_T
、uint32_T
等,它们不是标准的 C 类型。在 rtwtypes.h
中,生成的代码使用配置参数的 Hardware Implementation 窗格中的信息将这些具有特定大小的整数类型映射到对应的 C 关键字基类型。
当满足以下条件时,代码生成器会为基于 ERT 的系统目标文件生成 rtwtypes.h
的优化版本:
未选择 Configuration Parameters > Code Generation > Interface > Advanced parameters > Classic call interface。
模型不包含非内联 S-Function。
包括 rtwtypes.h
。例如,如果针对 GRT 系统目标文件包含该文件,则可以更轻松地将代码用于基于 ERT 的系统目标文件。
对于 GRT 和 ERT 系统目标文件,rtwtypes.h
的位置取决于编译过程是否使用共享实用工具位置。如果它使用共享位置,则代码生成器将 rtwtypes.h
放在 slprj/target/_sharedutils
中;否则,它将 rtwtypes.h
放在编译文件夹 (
) 中。请参阅Specify Generated Code Interfaces。model
_target
_rtw
在源文件使用代码生成器类型名称或其他代码生成器定义时,源文件包括 rtwtypes.h
头文件。典型示例是使用代码生成器数据类型声明变量的文件,例如 uint32_T myvar
。
代码生成器和 S-Function 使用的源文件可以使用预处理器宏 MATLAB_MEX_FILE
。宏定义来自 mex
函数:
#ifdef MATLAB_MEX_FILE #include "tmwtypes.h" #else #include "rtwtypes.h" #endif
代码生成器 main.c
(或 .cpp
)文件的源文件包含 rtwtypes.h
,但不进行预处理器检查。
#include "rtwtypes.h"
Target Language Compiler 生成的自定义源文件还可以将这些 include
语句发送到其生成的文件中。