Convert Code Containing Global Variables to Fixed-Point
This example shows how to convert a MATLAB® algorithm containing global variables to fixed point using the Fixed-Point Converter app.
In a local writable folder, create the function
use_globals.m.function y = use_globals(u) %#codegen % Declare AR and B as global variables global AR; global B; AR(1) = u + B(1); y = AR * 2;
In the same folder, create a test file,
use_globals_tb.mthat calls the function.u = 55; global AR B; AR = ones(4); B=[1 2 3]; y = use_globals(u);On the MATLAB toolstrip, in the Apps tab, under Code Generation, click the Fixed-Point Converter app icon.
To add the entry-point function,
use_globals.mto the project, on the Select Source Files page, browse to the file, and click Open. Click Next.On the Define Input Types page, add
use_globals_tb.mas the test file. Click Autodefine Input Types.The app determines from the test file that the input type of the input
uisdouble(1x1).Select Yes next to Does this code use global variables. By default, the Fixed-Point Converter app names the first global variable in a project
g.Type in the names of the global variables in your code. In the field to the right of the global variable
AR, specify its type asdouble(4x4).The global variable
Bis not assigned in theuse_globalsfunction. Define this variable as a global constant by clicking the field to the right of the constant and selectingDefine Constant Value. Type in the value ofBas it is defined in the test file,[1 2 3]. The app indicates thatBhas the value[1 2 3]. The app indicates thatARis not initialized.
Click Next. The app generates an instrumented MEX function for your entry-point MATLAB function. On the Convert to Fixed-Point page, click Simulate to simulate the function, gather range information, and get proposed data types.
Click Convert to accept the proposed data types and convert the function to fixed-point.
In the generated fixed-point code, the global variable
ARis nowAR_g.The wrapper function contains three global variables:
AR,AR_g, andB, whereAR_gis set equal to a fi-castAR, andARis set equal to a double castAR_g. The global variableBdoes not have a separate variable in the fixed-point code because it is a constant.
function y = use_globals_fixpt(u) %#codegen % Declare AR and B as global variables fm = get_fimath(); global AR_g; global B; AR_g(1) = fi(u + B(1), 0, 6, 0, fm); y = fi(AR_g * fi(2, 0, 2, 0, fm), 0, 7, 0, fm); end function fm = get_fimath() fm = fimath('RoundingMethod', 'Floor',... 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision',... 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision',... 'MaxSumWordLength', 128); end