В этом примере показано, как обнаружить переполнения с помощью приложения Fixed-Point Converter. На этапе численной проверки в процессе преобразования вы принимаете решение симулировать код с фиксированной точкой с помощью масштабированных двойных чисел. Затем приложение сообщает, какие выражения в сгенерированном коде приводят к значениям, которые переполняют тип данных с фиксированной точкой.
Этот пример требует следующих продуктов:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. «Поддерживаемые компиляторы».
Можно использовать mex -setup для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
Создайте локальную рабочую папку, например c:\overflow.
Измените на docroot\toolbox\fixpoint\examples папка. В командной строке MATLAB введите:
cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
Скопируйте overflow.m и overflow_test.m файлы в локальную рабочую папку.
Это лучшая практика, чтобы создать отдельный тестовый скрипт для предварительной и постобработки, такой как:
Загрузка входов.
Настройка входных значений.
Вывод результатов тестирования.
Для получения дополнительной информации см. Раздел «Создание тестового файла»
| Напечатать | Имя | Описание |
|---|---|---|
| Код функции | overflow.m | Функция MATLAB точки входа |
| Тестовый файл | overflow_test.m | Скрипт MATLAB, который тестирует overflow.m |
Перейдите к рабочей папке, содержащей файл для этого примера.
На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения.

Чтобы добавить функцию точки входа overflow в проект перейдите к файлу overflow.m, а затем нажмите Open. По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем overflow.prj.
Щелкните Next, чтобы перейти к Define Input Types шагу.
Окно приложения overflow.m для нарушений кода и проблем готовности преобразования с фиксированной точкой. Приложение не находит проблемы в overflow.m.
На странице Define Input Types, чтобы добавить overflow_test в качестве тестового файла просмотрите overflow_test.m, а затем нажмите Open.
Нажмите Autodefine Input Types.
Тестовый файл запускается. Приложение определяет из тестового файла, что входной тип b является double(1x12), x является double(256x1), и reset является logical(1x1).

Щелкните Next, чтобы перейти к Convert to Fixed Point шагу.
Приложение генерирует инструментальную MEX-функцию для вашей функции MATLAB точки входа. Приложение отображает скомпилированную информацию - тип, размер и сложность - для переменных в вашем коде. Дополнительные сведения см. в разделе Просмотр и изменение информации о переменной.

На вкладке Function Replacements приложение отображает функции, которые не поддерживаются для преобразования с фиксированной точкой. См. «Выполнение симуляции».
Чтобы просмотреть настройки fimath, щелкните стрелу Settings.
Установите значения Product mode и Sum mode fimath KeepLSB. Эти настройки моделируют поведение целочисленных операций в языке C.

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

Чтобы преобразовать алгоритм с плавающей точкой в фиксированную точку, нажмите Convert.
Программа проверяет предлагаемые типы и генерирует версию функции точки входа с фиксированной точкой.
Если ошибки и предупреждения возникают во время валидации, приложение отображает их на вкладке Output. См. «Проверка типов».
Щелкните стрелку Test.
Проверьте, что тестовый файл overflow_test.m. Выберите Use scaled doubles to detect overflows и нажмите Test.
Приложение запускает тестовый файл, который вы использовали, чтобы задать входные типы для тестирования кода MATLAB с фиксированной точкой. Поскольку вы выбрали для обнаружения переполнений, он также запускает симуляцию с использованием масштабированных двойных версий предлагаемых фиксированных точек. Масштабированные двойки хранят свои данные в двойной точности с плавающей точностью, поэтому они проводят арифметику в полной области значений. Поскольку они сохраняют свои настройки фиксированной точки, они могут сообщать, когда расчеты выходят из области значений типа фиксированной точки.
Симуляция выполняется. Приложение обнаруживает переполнение. Приложение сообщает о переполнении на вкладке Overflow. Чтобы выделить переполненное выражение, щелкните переполнение.

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