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

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

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

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

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

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

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

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

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

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

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

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

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

  • Несоответствующая область значений испытательного стенда

  • Сворачивание констант

Обнаружьте мертвый код

Этот пример показывает, как обнаружить мертвый код в вашем алгоритме при помощи приложения MATLAB Coder.

  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. Из галереи приложений откройте приложение MATLAB Coder.

  4. Установите Numeric Conversion на Convert to fixed point.

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

  6. Нажмите Next. На странице Define Input Types просмотрите, чтобы выбрать тестовый файл, который вы создали, myFunction_tb. Нажмите Autodefine Input Types.

  7. Нажмите Next. На странице Check for Run-Time Issues нажмите Check for Issues.

    Выполнение приложения тестовый файл myFunction_tb и не обнаруживает проблем.

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

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

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

    Приложение MATLAB Coder генерирует функцию фиксированной точки, myFunction_fixpt. Сгенерированная фиксированная точка содержит комментарии вокруг частей кода, идентифицированного как мертвый код. Панель Validation Results предлагает, чтобы вы использовали более полный испытательный стенд.

    Когда приложение MATLAB Coder обнаруживает мертвый код, рассмотрите редактирование вашего тестового файла так, чтобы ваш алгоритм был осуществлен по его полному спектру. Если ваш тестовый файл уже отражает полный спектр входных переменных, полагайте, что редактирование вашего алгоритма устраняет мертвый код.

  10. Закройте приложение MATLAB Coder.

Зафиксируйте мертвый код

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

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

  2. Вновь откройте приложение MATLAB Coder.

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

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

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