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

В этом примере показано, как обнаружить переполнение с помощью приложения 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. На вкладке MATLAB Toolstrip Apps, под Code Generation, кликают по значку приложения.

Выберите Source Files

Добавить функцию точки входа 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. Установите fimath Product mode и Sum mode к KeepLSB. Эти настройки моделируют поведение целочисленных операций на языке C.

  3. Нажмите Analyze.

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

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

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

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

Протестируйте численные данные и проверку на переполнение

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

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

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

  2. Определите, было ли это суммой или умножением, которое переполнилось.

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

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