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

Во время симуляции вашего тестового файла, 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. Из галереи Apps откройте приложение 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.