Преобразуйте код, содержащий глобальные переменные к фиксированной точке

Этот пример показывает, как преобразовать алгоритм MATLAB®, содержащий глобальные переменные к фиксированной точке с помощью приложения Fixed-Point Converter.

  1. В локальной перезаписываемой папке создайте функциональный 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;

  2. В той же папке создайте тестовый файл, use_globals_tb.m, который вызывает функцию.

    u = 55;
    global AR B;
    AR = ones(4);
    B=[1 2 3];
    y = use_globals(u);

  3. На панели инструментов MATLAB, во вкладке Apps, под Code Generation, кликают по значку приложения Fixed-Point Converter.

  4. Чтобы добавить функцию точки входа, use_globals.m к проекту, на странице Select Source Files, просматривает к файлу, и нажать Open. Нажмите Next.

  5. На странице Define Input Types добавьте use_globals_tb.m как тестовый файл. Нажмите Autodefine Input Types.

    Приложение решает от тестового файла, что входным типом входа u является double(1x1).

  6. Выберите Yes next to Does this code use global variables. По умолчанию приложение Fixed-Point Converter называет первую глобальную переменную в проекте g.

  7. Введите на имена глобальных переменных в вашем коде. В поле справа от глобальной переменной AR задайте его тип как double(4x4).

  8. Глобальная переменная B не присвоена в функции use_globals. Задайте эту переменную как глобальную константу путем нажатия на поле справа от константы и выбора Define Constant Value. Введите в значении B, когда это задано в тестовом файле, [1 2 3]. Приложение указывает, что B имеет value[1 2 3]. Приложение указывает, что AR не инициализируется.

  9. Нажмите Next. Приложение генерирует оснащенную MEX-функцию для вашей функции MATLAB точки входа. На странице Convert to Fixed-Point нажмите Simulate, чтобы моделировать функцию, собрать информацию области значений и получить предложенные типы данных.

  10. Нажмите Convert, чтобы принять предложенные типы данных и преобразовать функцию в фиксированную точку.

    В сгенерированной фиксированной точке глобальная переменная AR является теперь AR_g.

    Функция обертки содержит три глобальных переменные: AR, AR_g и B, где AR_g установлен равный fi-casted 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
    

Похожие темы