主要内容GydF4y2Ba

使用生成的初始化和终止功能GydF4y2Ba

从MATLAB生成C/C ++代码时GydF4y2Ba®GydF4y2Ba代码,代码生成器会自动产生两个管家功能,并初始化和终止。初始化函数初始化生成的C/C ++入口点功能运行的状态。首次调用入口点功能之前,必须调用它。终止功能释放了分配的内存并执行其他清理操作。在您最后一次调用入口点功能后,必须调用它。GydF4y2Ba

初始化函数GydF4y2Ba

生成的初始化函数的名称是GydF4y2Baprimary_function_nameGydF4y2Ba_初始化GydF4y2Ba, 在哪里GydF4y2Baprimary_function_nameGydF4y2Ba是您在生成代码时指定的第一个MATLAB入口点功能的名称。初始化函数初始化生成的入口点功能运行的状态。初始化函数可以包括:GydF4y2Ba

  • 调用支持代码的非限金宝app时数据(GydF4y2BainfGydF4y2Ba和GydF4y2Ba南GydF4y2Ba)。如果您的MATLAB代码包含可以生成非精彩值的操作,则会生成这些调用。GydF4y2Ba

  • 初始化的代码GydF4y2Ba全球的GydF4y2Ba或者GydF4y2Ba执着的GydF4y2Ba变量。GydF4y2Ba

  • 定制代码用于创建您指定的初始状态。要在初始化函数中包含自定义代码,请执行以下操作之一:GydF4y2Ba

    • 在代码配置对象中,设置GydF4y2Ba定制器GydF4y2Ba到包含自定义代码的字符向量。GydF4y2Ba

    • 在里面GydF4y2BaMATLAB CODER™GydF4y2Ba应用程序,在GydF4y2Ba自定义代码GydF4y2Ba选项卡,为初始化函数指定自定义代码。GydF4y2Ba

在某些情况下,无需初始化代码,生成的初始化函数为空。GydF4y2Ba

调用初始化函数GydF4y2Ba

如果生成MEX函数,则生成的代码会自动包含对初始化函数的调用。如果您生成独立代码,则有两种可能的情况:GydF4y2Ba

  • 默认情况下,如果初始化函数是非发行的,则代码生成器在生成的C/C ++入口点函数的开头中包含对初始化函数的调用。生成的代码还包括检查,以确保初始化函数仅自动调用一次,即使有多个入口点函数。在这种情况下,您无需手动调用初始化函数。GydF4y2Ba

    如果初始化函数为空,则生成的C/C ++入口点功能不包括对初始化函数的调用。GydF4y2Ba

  • 您可以选择不在生成的入口点函数中包含对初始化函数的调用。做以下一个:GydF4y2Ba

    • 在一个GydF4y2BaCoder.CodeConfigGydF4y2Ba或者GydF4y2BaCoder.embeddedCodeConfigGydF4y2Ba对象,设置GydF4y2BaRunInitializeFCNGydF4y2Ba到GydF4y2Ba错误的GydF4y2Ba。GydF4y2Ba

    • 在里面GydF4y2BaMATLAB编码器GydF4y2Ba应用程序,在GydF4y2Ba所有设置GydF4y2Ba选项卡,设置GydF4y2Ba自动运行初始化函数GydF4y2Ba到GydF4y2Ba不GydF4y2Ba。GydF4y2Ba

    如果做出此选择,则必须在首次调用生成的入口点功能之前手动调用初始化功能。不调用初始化函数会导致生成的入口点函数在无效状态下操作。GydF4y2Ba

如果您使用类接口生成C ++代码,则代码生成器会生成类构造函数和驱动器,该类构造函数和驱动器执行初始化和终止操作。您无需手动致电GydF4y2Ba初始化GydF4y2Ba和GydF4y2Ba终止GydF4y2Ba职能。看GydF4y2Ba使用类接口生成C ++代码GydF4y2Ba。GydF4y2Ba

生成初始化函数的示例GydF4y2Ba

MATLAB代码模式和相应生成的初始化函数的示例:GydF4y2Ba

  • 您的MATLAB代码使用GydF4y2Ba全球的GydF4y2Ba或者GydF4y2Ba执着的GydF4y2Ba变量。例如,定义此MATLAB函数:GydF4y2Ba

    功能GydF4y2Bay = barGydF4y2Ba全球的GydF4y2Bag y = g;GydF4y2Ba结尾GydF4y2Ba

    生成一个静态库GydF4y2Ba酒吧GydF4y2Ba。指定初始值GydF4y2BaGGydF4y2Ba作为GydF4y2Ba1GydF4y2Ba。GydF4y2Ba

    代码根GydF4y2Ba-config:libGydF4y2Ba- 全球GydF4y2Ba{'g',1}GydF4y2Ba酒吧GydF4y2Ba

    代码生成器生成文件GydF4y2Babar_initialize.cGydF4y2Ba在GydF4y2Ba工作GydF4y2Ba\ codegen \ lib \ barGydF4y2Ba, 在哪里GydF4y2Ba工作GydF4y2Ba是包含的文件夹GydF4y2Babar.mGydF4y2Ba。功能GydF4y2Babar_initializeGydF4y2Ba初始化全局变量GydF4y2BaGGydF4y2Ba。GydF4y2Ba

    void bar_initialize(void){g = 1.0;isInitialized_bar = true;}GydF4y2Ba
    生成的C函数GydF4y2Ba酒吧GydF4y2Ba包括一个电话GydF4y2Babar_initializedGydF4y2Ba。它使用布尔值GydF4y2BaisInitialized_barGydF4y2Ba为了确保初始化函数仅自动称为一次。GydF4y2Ba

    double bar(void){if(!isInitialized_bar){bar_initialize();}返回g;}GydF4y2Ba
  • 您的MATLAB代码包含一个可以生成非限值值的操作(GydF4y2BainfGydF4y2Ba或者GydF4y2Ba南GydF4y2Ba)。例如,定义MATLAB函数GydF4y2BafooGydF4y2Ba打电话GydF4y2Ba阶乘GydF4y2Ba。这GydF4y2Ba阶乘GydF4y2Ba功能快速增长并返回GydF4y2BainfGydF4y2Ba对于大于一定阈值的输入。对于类型的输入GydF4y2Ba双倍的GydF4y2Ba,阈值是GydF4y2Ba170GydF4y2Ba。执行GydF4y2Ba阶乘(171)GydF4y2Ba在Matlab返回中GydF4y2BainfGydF4y2Ba。GydF4y2Ba

    功能GydF4y2Bay = foo(a)y =阶乘(a);GydF4y2Ba结尾GydF4y2Ba

    生成一个静态库GydF4y2BafooGydF4y2Ba。GydF4y2Ba

    代码根GydF4y2Ba-config:libGydF4y2BafooGydF4y2Ba-argsGydF4y2Ba{1}GydF4y2Ba

    代码生成器生成文件GydF4y2Bafoo_initialize.cGydF4y2Ba在GydF4y2Ba工作GydF4y2Ba\ codegen \ lib \ fooGydF4y2Ba, 在哪里GydF4y2Ba工作GydF4y2Ba是包含的文件夹GydF4y2Bafoo.mGydF4y2Ba。功能GydF4y2Bafoo_initializeGydF4y2Ba调用支持代码金宝app以获取无限数据,GydF4y2Bart_initinfandnanGydF4y2Ba,在另一个生成的文件中定义GydF4y2Bart_nonfinite.cGydF4y2Ba。GydF4y2Ba

    void foo_initialize(void){rt_initinfandnan();isInitialized_foo = true;}GydF4y2Ba

终止功能GydF4y2Ba

生成的终止函数的名称是GydF4y2Baprimary_function_nameGydF4y2Ba_端GydF4y2Ba, 在哪里GydF4y2Baprimary_function_nameGydF4y2Ba是您在生成代码时指定的第一个MATLAB入口点功能的名称。终止功能释放了分配的内存并执行其他清理操作。GydF4y2Ba

终止功能还可以包括您指定的自定义清理代码。要在终止函数中包括自定义代码,请执行以下操作之一:GydF4y2Ba

  • 在代码配置对象中,设置GydF4y2Ba定制者GydF4y2Ba到包含自定义代码的字符向量。GydF4y2Ba

  • 或者,在GydF4y2BaMATLAB编码器GydF4y2Ba应用程序,在GydF4y2Ba自定义代码GydF4y2Ba选项卡,为终止功能指定自定义代码。GydF4y2Ba

如果生成MEX函数,则生成的代码将自动包含端接函数的调用。GydF4y2Ba

如果您生成独立代码,则生成的代码不会自动包含对终止函数的调用。在这种情况下,您必须在最后一次调用生成的入口点功能后手动调用终止功能。GydF4y2Ba

终止功能还用于清除持续变量的状态。持久变量保留其状态,直到调用终止功能为止。有关更多信息,请参阅GydF4y2Ba生成持续变量的代码GydF4y2Ba。GydF4y2Ba

生成的终止功能的示例GydF4y2Ba

定义此MATLAB函数:GydF4y2Ba

功能GydF4y2Bay = barGydF4y2Ba全球的GydF4y2Bag y = g;GydF4y2Ba结尾GydF4y2Ba

生成一个静态库GydF4y2Ba酒吧GydF4y2Ba。指定初始值GydF4y2BaGGydF4y2Ba作为GydF4y2Ba1GydF4y2Ba。GydF4y2Ba

代码根GydF4y2Ba-config:libGydF4y2Ba- 全球GydF4y2Ba{'g',1}GydF4y2Ba酒吧GydF4y2Ba

代码生成器生成文件GydF4y2Babar_terminate.CGydF4y2Ba在GydF4y2Ba工作GydF4y2Ba\ codegen \ lib \ barGydF4y2Ba, 在哪里GydF4y2Ba工作GydF4y2Ba是包含的文件夹GydF4y2Babar.mGydF4y2Ba。功能GydF4y2Babar_terminateGydF4y2Ba设置布尔值GydF4y2BaisInitialized_barGydF4y2Ba(那是GydF4y2Ba真的GydF4y2Ba初始化函数调用之后)GydF4y2Ba错误的GydF4y2Ba。GydF4y2Ba

void bar_terminate(void){isinitialized_bar = false;}GydF4y2Ba

也可以看看GydF4y2Ba

|GydF4y2Ba|GydF4y2Ba

相关话题GydF4y2Ba