Обнаружение переполнений

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

Необходимые условия

Этот пример требует следующих продуктов:

Создайте новую папку и скопируйте соответствующие файлы

  1. Создайте локальную рабочую папку, например c:\overflow.

  2. Измените на docroot\toolbox\fixpoint\examples папка. В командной строке MATLAB введите:

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))

  3. Скопируйте overflow.m и overflow_test.m файлы в локальную рабочую папку.

    НапечататьИмяОписание
    Код функцииoverflow.mФункция MATLAB точки входа
    Тестовый файлoverflow_test.mСкрипт MATLAB, который тестирует overflow.m

 Функция переполнения

 Функция overflow_test

Откройте приложение MATLAB Coder

  1. Перейдите к рабочей папке, содержащей файл для этого примера.

  2. На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения.

Выбор исходных файлов

Чтобы добавить функцию точки входа overflow в проект перейдите к файлу overflow.m, а затем нажмите Open. По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем overflow.prj.

Включите преобразование с фиксированной точкой

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

  2. Щелкните Next, чтобы перейти к Define Input Types шагу.

    Окно приложения overflow.m по вопросам нарушений кода и готовности генерации кода. Приложение не находит проблемы в overflow.m.

Определите входные типы

  1. На странице Define Input Types, чтобы добавить overflow_test в качестве тестового файла просмотрите overflow_test.m, а затем нажмите Open.

  2. Нажмите Autodefine Input Types.

    Тестовый файл запускается. Приложение определяет из тестового файла, что входной тип b является double(1x12), x является double(256x1), и reset является logical(1x1).

  3. Щелкните Next, чтобы перейти к Check for Run-Time Issues шагу.

Проверяйте на наличие проблем во время выполнения

На Check for Run-Time Issues шаге генерируется MEX с инструментами. Он запускает тестовый файл overflow_test замена вызовов на overflow с вызовами сгенерированной MEX-функции. Если приложение находит проблемы, оно выдает предупреждения и сообщения об ошибке. Вы можете кликнуть сообщение, чтобы выделить проблемный код в панели, где можно отредактировать код.

  1. На странице Check for Run-Time Issues приложение заполняет поле тестового файла именем overflow_test, тестовый файл, который вы использовали для определения типов входа.

  2. Нажмите Check for Issues.

    Приложение не обнаруживает проблем.

  3. Щелкните Next, чтобы перейти к Convert to Fixed Point шагу.

Преобразуйте в фиксированную точку

  1. Приложение отображает скомпилированную информацию - тип, размер и сложность - для переменных в вашем коде. Дополнительные сведения см. в разделе Просмотр и изменение информации о переменной.

    На вкладке Function Replacements приложение отображает функции, которые не поддерживаются для преобразования с фиксированной точкой. См. «Выполнение симуляции».

  2. Чтобы просмотреть настройки fimath, щелкните стрелу Settings. Установите значения Product mode и Sum mode fimath KeepLSB. Эти настройки моделируют поведение целочисленных операций в языке C.

  3. Нажмите Analyze.

    Тестовый файл, overflow_test, бегает. Приложение отображает минимальные и максимальные области значений симуляции на вкладке Variables. Используя данные области значений симуляции, программное обеспечение предлагает фиксированные точки для каждой переменной на основе настроек предложения по типу по умолчанию и отображает их в столбце Proposed Type.

  4. Чтобы преобразовать алгоритм с плавающей точкой в фиксированную точку, нажмите Convert.

    Программа проверяет предлагаемые типы и генерирует версию функции точки входа с фиксированной точкой.

    Если ошибки и предупреждения возникают во время валидации, приложение отображает их на вкладке Output. См. «Проверка типов».

Тестовые числа и проверка на переполнение

  1. Щелкните стрелку Test. Проверьте, что тестовый файл overflow_test.m. Выберите Use scaled doubles to detect overflows и нажмите Test.

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

    Симуляция выполняется. Приложение обнаруживает переполнение. Приложение сообщает о переполнении на вкладке Overflow. Чтобы выделить переполненное выражение, щелкните переполнение.

  2. Определите, была ли переполнена сумма или умножение.

    В настройках fimath установите Product mode равным FullPrecision, а затем повторите преобразование и снова протестируйте код с фиксированной точкой.

    Переполнение все еще происходит, что указывает на то, что это сложение в выражении, которое переполнено.