文档

在外部调用代码和生成代码之间交换数据

要将生成的代码导出到外部代码中,需要配置生成的代码以匹配外部代码的数据接口。例如,如果您的外部代码定义了一个用于存储输出数据的全局变量,并且您需要生成的代码将该数据读取为输入,那么您可以配置相应的轮廓尺寸块,以便生成的代码与现有变量交互。

  • 您可以从模型生成可重入代码。生成的入口点函数通常通过参数接受数据。调用代码通过这些参数传递数据。您可以在单个应用程序中多次调用这些函数——应用程序可以维护模型的多个实例。看到可重入生成代码的数据交换(金宝app仿真软件编码器)。

  • 当您生成不可重入代码时,默认情况下,入口点函数通过全局变量在生成的代码和您的代码之间交换数据。您可以为代码生成要使用的变量定义,也可以共享和重用代码已经定义的现有变量。看到不可重入生成代码的数据交换(金宝app仿真软件编码器)。

    或者,您可以配置入口点函数来交换系统输入和输出(根级)轮廓尺寸外港块)通过参数而不是全局变量。对模型应用函数原型控制,这需要嵌入式编码器®.有关函数原型控制的更多信息,请参见定制生成的C函数接口

有关在生成的代码和外部代码之间交换数据的一般信息,包括如何匹配特定的C代码模式,请参见在外部C/ c++代码和Simulink模型或生成代码之间交换数据金宝app(金宝app仿真软件编码器)。

可重入生成代码的数据交换

当您生成可重入代码时,模型入口点函数通过参数交换数据。你可以控制参数的一些特征。有关更多信息,请参见生成代码中的控制数据和函数接口(金宝app仿真软件编码器)。

有关在外部代码中为每个调用站点创建独立数据集的信息,请参见修改Static Main为分配和访问模型实例数据

不可重入生成代码的数据交换

要使生成的代码作为全局变量读取或写入信号、状态或参数数据项,需要对模型中的数据应用存储类。存储类还确定生成的代码是将变量定义导出到外部代码,还是从代码中导入定义。有关控制配置为生成不可重入代码的模型的数据接口的一般信息,请参见不可重入代码的控制数据接口(金宝app仿真软件编码器)。有关示例,请参见通过配置导入和输出块来设计数据接口(金宝app仿真软件编码器)和集成外部应用程序代码与PID控制器生成的代码

当您生成定义(为全局数据分配内存)的代码时,生成的代码将导出该数据。当外部代码定义数据时,生成的代码将导入该数据。通常,导入数据的存储类都有这个词进口在存储类名中,例如,ImportedExternPointer

导出全局数据的控制文件放置(嵌入式编码器

当您使用存储类从生成的代码导出数据时,代码生成器将创建走读生声明。默认情况下,该声明通常出现在生成的头文件中模型.h.你可以包括(# include)这个头文件在您的外部代码。

默认情况下,导出数据的定义(内存分配)通常出现在模型.c

你可以控制声明和定义的文件位置:

  • 创建单独的对象文件,仅存储全局参数数据。

  • 通过将声明组织到单独的文件中来模块化生成的代码。

有关控制声明和定义的文件位置的详细信息,请参见控制全局数据定义和声明在生成文件中的位置.例如,请参见参数数据的定义、初始化和声明

防止全局变量的初始化代码重复

当外部代码定义全局变量时,可以生成与这些变量交互的代码。例如,使用存储类ImportFromFile(见选择存储类以控制生成代码中的数据表示(金宝app仿真软件编码器))。

对于表示信号或状态数据的导入变量,代码生成器可以生成如下所述的初始化代码在生成的代码中初始化信号、状态和参数数据(金宝app仿真软件编码器)。如果您的代码已经初始化了一个变量,请考虑防止生成重复的初始化代码。创建您自己的存储类,并为该存储类设置数据初始化没有一个.有关创建和应用自己的存储类的信息,请参见为软件架构定义存储类、内存段和函数模板

用关键字保护全局数据常量挥发性

当外部代码和生成的代码通过全局变量交换数据时,您可以生成使用C类型限定符的代码常量挥发性保护数据完整性,提高应用程序的安全性。例如:

  • 应用常量到一个校准参数。

  • 应用挥发性转换为一个全局变量,该变量存储异步操作的硬件设备的输出。

  • 应用常量挥发性转换为表示由外部代码定义的数据的信号、状态和参数。然后,生成的代码使用相应的存储类型限定符声明外部数据并与之交互。

你必须有嵌入式编码器。有关更多信息,请参见使用const和volatile类型限定符保护全局数据

相关的话题