%% Integrate External C Code Into Generated Code By Using Custom Code Blocks and Model Configuration Parameters
% This example shows how to place external code in generated code by
% using custom code blocks and model configuration parameters.

%   Copyright 2007-2019 The MathWorks, Inc.

%% 
% 1. Open the model |rtwdemo_slcustcode|. 
open_system('rtwdemo_slcustcode')

%%
% 2. Open the *Simulink Coder* or *Embedded Coder* app.
%
% 3. Open the Model Configuration Parameters dialog box and navigate to
% the *Custom Code* pane. 
%%
% 4. Examine the settings for model configuration parameters *Source file* and *Initialize 
% function*. 
%
% * *Source file* specifies a comment and sets the variable |GLOBAL_INT2| to 
%  -1.
% * *Initialize function* initializes the  variable |GLOBAL_INT2| to 1.
%
%% 
% 5. Close the dialog box.
%
%%
% 6. Double-click the Model Source block. Block parameter *Top of Model Source* 
% specifies that the code generator declare the variable 
% |GLOBAL_INT1| and set it to 0 at the top of the generated file
% |rtwdemo_slcustcode.c|. 
%
%%
% 7. Open the triggered subsystem |Amplifier|. The subsystem includes the
% System Outputs block. The code generator places code that you specify in
% that block in the generated code for the nearest parent atomic subsystem.
% In this case, the code generator places the external code in the generated
% code for the |Amplifier| subsystem. The external code:
%
% * Declares the pointer variable |*intPtr| and initializes it with the  
% value of variable |GLOBAL_INT1|.
% * Sets the pointer variable to -1 during execution.
% * Resets the pointer variable to 0 before exiting.
%
%%
% 8. Generate code and a code generation report.
%
%%
% 9. Examine the code in the generated source file 
% |rtwdemo_slcustcode.c|. At the top of the file, after the |#include|
% statements, you find the following declaration code. The example
% specifies the first declaration with the *Source file* configuration
% parameter and the second declaration with the Model Source block.
%
% |int_T GLOBAL_INT2 = -1;|
%
% |int_T GLOBAL_INT1 = 0;|
%
% The Output function for the |Amplifier| subsystem includes the following
% code, which shows the external code integrated with generated code that 
% applies the gain. The example specifies the three lines of code for the 
% pointer variable with the System Outputs block in the |Amplifier|
% subsystem.
%
% |int_T *intPtr = &GLOBAL_INT1;|
%
% |*intPtr = -1;|
%
% |rtwdemo_slcustcode_Y.Output = rtwdemo_slcustcode_U.Input << 1;|
%
% |*intPtr = 0;|
%
% The following assignment appears in the model initialize entry-point
% function. The example specifies this assignment with the *Initialize
% function* configuration parameter.
%
% |GLOBAL_INT2 = 1;|
%