В этом примере показано, как преобразовать MATLAB® алгоритм, содержащий глобальные переменные в фиксированную точку с помощью приложения Fixed-Point Converter.
В локальной папке с возможностью записи создайте функцию 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;
В той же папке создайте тестовый файл, use_globals_tb.m
который вызывает функцию.
u = 55;
global AR B;
AR = ones(4);
B=[1 2 3];
y = use_globals(u);
На панели инструментов MATLAB, на вкладке Apps, в разделе Code Generation, щелкните значок приложения Fixed-Point Converter.
Чтобы добавить функцию точки входа, use_globals.m
в проект, на странице Select Source Files, перейдите к файлу и нажмите Open. Нажмите Next.
На странице Define Input Types добавьте use_globals_tb.m
в качестве тестового файла. Нажмите Autodefine Input Types.
Приложение определяет из тестового файла, что тип входа входа u
является double(1x1)
.
Выберите Yes рядом с Does this code use global variables. По умолчанию приложение Fixed-Point Converter называет первую глобальную переменную в проекте g
.
Введите имена глобальных переменных в коде. В поле справа от глобальной переменной AR
, задайте его тип следующим double(4x4)
.
Глобальная переменная B
не назначается в use_globals
функция. Определите эту переменную как глобальную константу, нажав на поле справа от константы и выбрав Define Constant Value
. Введите значение B
как это определено в тестовом файле, [1 2 3]
. Приложение указывает, что B
имеет значение [1 2 3]
. Приложение указывает, что AR
не инициализирован.
Нажмите Next. Приложение генерирует инструментальную MEX-функцию для вашей функции MATLAB точки входа. На странице Convert to Fixed-Point нажмите Simulate, чтобы симулировать функцию, собрать информацию о области значений и получить предложенные типы данных.
Щелкните Convert, чтобы принять предложенные типы данных и преобразовать функцию в фиксированную точку.
В сгенерированном коде с фиксированной точкой глобальная переменная AR
теперь AR_g
.
Функция обертки содержит три глобальные переменные: AR
, AR_g
, и B
, где AR_g
задается равным fi-приведенному AR
, и AR
задается равным двойному литью AR_g
. Глобальная переменная B
не имеет отдельной переменной в коде с фиксированной точкой, поскольку она является константой.
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