%% Reuse Global Block Outputs in the Generated Code
% Reduce ROM and RAM consumption and data copies and increase execution speed of 
% generated code. Configure the code generator to reuse global variables by selecting 
% the model configuration parameter *Reuse global block outputs*.  
% 
% 
%% Example
% In the Command Window, type <matlab:rtwdemo_reuse_global rtwdemo_reuse_global>.
%
% <<../opt_signalsparams_reuse_block_outputs_model.png>>
%
%%
model='rtwdemo_reuse_global';
load_system('rtwdemo_reuse_global')
set_param(model,'GlobalBufferReuse', 'off'); 
%% Generate Code without Optimization
% 
% # On the Configuration Parameters dialog box, verify that *Signal storage reuse* is selected.
% # Clear *Reuse global block outputs* and click *Apply*.
% # On the *Code Generation > Report* pane, select *Static code metrics*.
% # In your system's temporary folder, create a folder for the build and
% inspection process.

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

%% 
% Press *Ctrl+B* to generate code.
rtwbuild(model);
%%
% View the generated code without the optimization. Here is a portion of
% |rtwdemo_reuse_global.c|.
cfile = fullfile(cgDir,'rtwdemo_reuse_global_ert_rtw','rtwdemo_reuse_global.c');
rtwdemodbtype(cfile,'/* Model step','/* Model initialize',1, 0);
%%
% The generated code contains a data copy to the global variable
% |rtDW.Delay_DSTATE|. Open the Static Code Metrics Report. The total
% number of reads and writes for global variables is 8. The total size is
% 32 bytes.
%% Enable Optimization and Generate Code
% 
% # On the Configuration Parameters dialog box, select *Reuse global block outputs* and click *Apply*.
% # Generate code.
% # View the generated code with the optimization. Here is a portion of
% |rtwdemo_reuse_global.c|.
%
set_param(model,'GlobalBufferReuse', 'on');
rtwbuild(model);
cfile = fullfile(cgDir,'rtwdemo_reuse_global_ert_rtw','rtwdemo_reuse_global.c');
rtwdemodbtype(cfile,'/* Model step','/* Model initialize',1, 0);
%%
% The code generator eliminates a data copy, reduces two statements to one
% statement and three global variables to two global variables.
% 
% Open the Static Code Metrics Report. For global variables, this optimization
% reduces the total number of reads and writes for global variables from 8 
% to 5 and the total size from 32 bytes to 24 bytes.
%%
bdclose(model)
rtwdemoclean;
cd(currentDir)

%% 
% Copyright 2012 The MathWorks, Inc.