主要内容

删除零初始化代码

删除根水平I / O零初始化删除内部数据零初始化参数控制生成的代码是否包含初始化代码内部数据(块和块输出)和外部数据(港口和外港根),其价值是零。消除零初始化代码加速模型初始化,减少罗消费,增加生成的代码的执行速度。

在启动期间,符合标准的C和c++编译器初始化全局数据为零消除需要包括零初始化代码数据在生成的代码。符合标准的编译器并不一定初始化动态分配数据和本地变量为零。在离开之前删除根水平I / O零初始化删除内部数据零初始化参数选择,确认以下:

  • 如果你的编译器不是标准兼容,确认它初始化全局数据为零。

  • 如果你设置代码接口包装可重用的功能c++类,确认数据是静态分配或动态分配数据被初始化为零。

如果你设置代码接口包装参数可重用的功能并选择使用动态内存分配模型初始化参数,删除根水平I / O零初始化删除内部数据零初始化复选框被清除命令行,ZeroExternalMemoryAtStartupZeroInternalMemoryAtStartup参数设置为“上”

对于一个模型中代码接口包装参数设置为c++类使用动态内存分配模型块实例化参数被选中时,删除内部数据零初始化清除复选框ZeroInternalMemoryAtStartup设置为“上”,是只读的。

为内部数据删除零初始化代码

这个例子展示了如何消除代码初始化内部数据为零。

示例模型

打开模型rtwdemo_internal_init。模型包含了一个启用了子系统的初始输出为零。子系统包含一个单位延迟块的初始条件0

模型=“rtwdemo_internal_init”;open_system(模型);

没有生成代码优化

构建模型通过使用嵌入式程序员®。

currentDir = pwd;[~,cgDir] = rtwdemodir ();evalc (“slbuild(模型));

这段代码rtwdemo_internal_init.c文件。

用= fullfile (cgDir,“rtwdemo_internal_init_ert_rtw”,“rtwdemo_internal_init.c”);rtwdemodbtype(用/ *初始化模型的,*文件拖车的1 0);
/ *模型初始化函数* /空白rtwdemo_internal_init_initialize (void){/ *注册码* / / *初始化错误状态* / rtmSetErrorStatus (rtM (NULL));/ *国家(dwork) * / (void) memset (&rtDWork (void *), 0, sizeof (D_Work));/ * SystemInitialize启用子系统:“< Root > /启用子系统”* / / * InitializeConditions UnitDelay: < S1 > /单元的延迟* / rtDWork。UnitDelay_DSTATE = 0.0;/ *月底SystemInitialize子系统:“< Root > /启用子系统”* /}/ *

启用优化

打开配置参数对话框。在优化窗格中,选择删除内部数据零初始化

或者,您可以使用命令提示符来实现优化。设置模型参数ZeroInternalMemoryAtStartup“关闭”

set_param(模型,“ZeroInternalMemoryAtStartup”,“关闭”);
set_param(模型,“ZeroInternalMemoryAtStartup”,“关闭”);

生成代码的优化

构建模型通过使用嵌入式编码器。

evalc (“slbuild(模型));

这段代码rtwdemo_internal_init.c文件。生成的代码不初始化内部数据赋值为零。

rtwdemodbtype(用/ *初始化模型的,*文件拖车的1 0);
/ *模型初始化函数* /空白rtwdemo_internal_init_initialize (void){/ *(不需要初始化代码)* /}/ *
bdclose rtwdemoclean(模型);cd (currentDir)

港口和外港除去根级初始化代码设置为零

这个例子展示了如何将初始化代码从港口和外港root设置为零。

示例模型

在模型中rtwdemo_rootlevel_zero_initialization,所有的输入和输出信号的数值为零。因为信号sig1sig2有数据类型int16布尔分别,所有输出信号的数据类型,这些信号也有初始值的逐位零。信号有一个整数的位模式0,这意味着所有位。信号sig1_bsig2_b定点数据类型有偏见,所以他们的初始值不位零。

模型=“rtwdemo_rootlevel_zero_initialization”;open_system(模型);

生成代码

在你的系统临时文件夹中,创建一个临时文件夹的建立和检验过程。

currentDir = pwd;[~,cgDir] = rtwdemodir ();

构建模型通过使用嵌入式编码器。

set_param(模型,“ZeroExternalMemoryAtStartup”,“上”);evalc (“slbuild(模型));

这些行rtwdemo_rootlevel_zero_initialization.c港口和外港的初始化代码显示根级没有优化。四个输入信号分别作为全局变量初始化。四个输出信号是全球结构的成员memset函数初始化位零。

用= fullfile (cgDir,“rtwdemo_rootlevel_zero_initialization_ert_rtw”,“rtwdemo_rootlevel_zero_initialization.c”);rtwdemodbtype(用“rtwdemo_rootlevel_zero_initialization_initialize”,的预告片生成的代码1 0);
空白rtwdemo_rootlevel_zero_initialization_initialize (void){/ *注册码* / / *外部输入* / sig1 = 0;sig1_b = 3;sig2 = false;sig2_b = 3;/ *外部输出* / (void) memset(而无0 sizeof (ExternalOutputs));}/ *

启用优化

  1. 打开配置参数对话框。

  2. 优化窗格中,选择删除根水平I / O零初始化

另外,使用命令行API启用优化:

set_param(模型,“ZeroExternalMemoryAtStartup”,“关闭”);

生成代码的优化

优化代码不包含初始化代码的输入信号sig1,sig2,四个输出信号,因为他们的初始值是位零。

构建的模型。

evalc (“slbuild(模型));

这是rtwdemo_rootlevel_zero_initialization.c优化代码初始化函数。

用= fullfile (cgDir,“rtwdemo_rootlevel_zero_initialization_ert_rtw”,“rtwdemo_rootlevel_zero_initialization.c”);rtwdemodbtype(用“rtwdemo_rootlevel_zero_initialization_initialize”,的预告片生成的代码1 0);
空白rtwdemo_rootlevel_zero_initialization_initialize (void){/ *注册码* / / *外部输入* / sig1_b = 3;sig2_b = 3;}/ *

关闭模型和代码生成报告。

bdclose rtwdemoclean(模型);cd (currentDir)

额外的信息

  • 您可以使用使用memset浮点数和双精度数进行初始化在初始化参数控制零的表示。看到0.0使用memset浮点数和双精度数进行初始化

  • 代码仍然初始化数据结构选择时其值不为零删除内部数据零初始化删除根水平I / O零初始化参数。

  • 的数据ImportedExternImportedExternPointer存储类不初始化,无论的设置删除内部数据零初始化删除根水平I / O零初始化参数。

相关的话题