Обнаружение мертвого и постоянно складываемого кода

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

Приложение вставляет встроенные комментарии в код с фиксированной точкой, чтобы отметить мертвые и непереведенные области. Она включает информацию о покрытии кода в сгенерированный HTML преобразования с фиксированной точкой. Редактор приложений отображает маркированную цветом полосу слева от кода. В этой таблице описывается расцветка.

Цвет полосы покрытияУказывает
Зеленый

Одна из следующих ситуаций:

  • Функция точки входа выполняется несколько раз, и код выполняет более одного раза.

  • Функция точки входа выполняется один раз, а код - один раз.

Различные оттенки зеленого цвета указывают на различные области значений отсчётов выполнения линии. Самый темный оттенок зелёного цвета указывает на наивысшую область значений.

ОранжевыйФункция точки входа выполняется несколько раз, но код выполняет один раз.
КрасныйКод не выполняется.

Что такое Мертвый Код?

Мертвый код - это код, который не выполняется во время симуляции. Мертвый код может быть результатом следующих сценариев:

  • Защитный код, содержащий целевые угловые случаи, которые не достигнуты

  • Человеческая ошибка в коде, приводящая к коду, который не может быть достигнут каким-либо путем выполнения

  • Неадекватная область значений испытательных стендов

  • Постоянное складывание

Обнаружение мертвого кода

В этом примере показано, как обнаружить мертвый код в вашем алгоритме с помощью Fixed-Point Converter.

  1. В локальной папке с возможностью записи создайте функцию myFunction.m.

    function y = myFunction(u,v)
        %#codegen
        for i = 1:length(u)
            if u(i) > v(i)
                y=bar(u,v);
            else
                tmp = u;
                v = tmp;
                y = baz(u,v);
            end
        end
    end
    
    function y = bar(u,v)
        y = u+v;
    end
    
    function y = baz(u,v)
        y = u-v;
    end
    
  2. В той же папке создайте тестовый файл, myFunction_tb.

    u = 1:100;
    v = 101:200;
    
    myFunction(u,v);
    
  3. Из галереи Apps откройте Fixed-Point Converter.

  4. На странице Select Source Files перейдите к myFunction файл и нажатие кнопки Open.

  5. Нажмите Next. На странице Define Input Types выберите созданный тестовый файл myFunction_tb. Нажмите Autodefine Input Types.

  6. Нажмите Next. На странице Convert to Fixed-Point щелкните Analyze, чтобы симулировать функции точки входа, собрать информацию о области значений и получить предложенные типы данных.

    Строка цветового кодирования в левой части окна редактирования указывает, выполняется ли код. Код в первом условии оператора if не выполняется во время симуляции, потому что u никогда не больше v. The bar функция никогда не выполняется, потому что оператор if никогда не выполняется. Эти части алгоритма отмечены красной полосой, что указывает на то, что они являются мертвым кодом.

  7. Чтобы применить предложенные типы данных к функции, нажмите Convert.

    Этот Fixed-Point Converter генерирует функцию с фиксированной точкой, myFunction_fixpt. Сгенерированный код с фиксированной точкой содержит комментарии вокруг частей кода, идентифицированных как мертвый код. На панели Validation Results предлагается использовать более тщательный испытательный стенд.

    Когда Fixed-Point Converter обнаружит мертвый код, рассмотрите редактирование вашего тестового файла, чтобы ваш алгоритм выполнялся во всей его области значений. Если ваш тестовый файл уже отражает полную область значений входных переменных, рассмотрите редактирование вашего алгоритма, чтобы исключить мертвый код.

  8. Закройте Fixed-Point Converter.

Исправление мертвого кода

  1. Отредактируйте тестовый файл myFunction_tb.m включать более широкую область значений входов.

    u = 1:100;
    v = -50:2:149;
    
    myFunction(u,v);
    

  2. Откройте конвертер с фиксированной точкой.

  3. Используя ту же функцию и отредактированный тестовый файл, повторите процесс преобразования.

  4. После того, как вы нажмете Analyze, на этот раз строка покрытия кода показывает, что все части алгоритма выполняются с новыми диапазонами входных областей значений тестового файла.

    Чтобы завершить процесс преобразования и преобразовать функцию в фиксированную точку, нажмите Convert.