主要内容

外部调用代码与生成代码之间的数据交换

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

  • 您可以从模型生成可重入代码。生成的入口点函数通常通过参数接受数据。调用代码通过这些参数传递数据。您可以在一个应用程序中多次调用这些函数——应用程序可以维护模型的多个实例。看到可重入生成代码的数据交换

  • 当您生成不可重入代码时,默认情况下,入口点函数通过全局变量在生成的代码和您的代码之间交换数据。您可以为代码生成要使用的变量定义,或者您可以共享和重用代码已经定义的现有变量。看到不可重入生成代码的数据交换

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

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

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

生成可重入代码时,模型入口点函数通过参数交换数据。您可以控制参数的一些特征。有关更多信息,请参见生成代码中的控制数据和函数接口

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

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

要使生成的代码对信号、状态或参数数据项作为全局变量进行读写,请对模型中的数据应用存储类。存储类还确定生成的代码是将变量定义导出到外部代码还是从代码导入定义。有关控制配置为生成不可重入代码的模型的数据接口的一般信息,请参见不可重入代码的控制数据接口.有关示例,请参见通过配置输入和输出端口块设计数据接口而且集成外部应用程序代码和PID控制器生成的代码

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 应用常量到校准参数。

  • 应用挥发性到存储异步操作的硬件设备的输出的全局变量。

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

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

相关的话题