В этом примере показано, как обнаружить переполнения с помощью fiaccel функция. На этапе численной проверки в процессе преобразования инструмент моделирует код с фиксированной точкой с помощью масштабированных двойных чисел. Затем он сообщает, какие выражения в сгенерированном коде приводят к значениям, которые переполнят тип данных с фиксированной точкой.
Чтобы завершить этот пример, необходимо установить следующие продукты:
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 |
Создайте coder.FixptConfig объект, fixptcfg, с настройками по умолчанию.
fixptcfg = coder.config('fixpt');Установите имя испытательного стенда. В этом примере имя функции испытательного стенда overflow_test.
fixptcfg.TestBenchName = 'overflow_test';Установите размер слова по умолчанию равную 16.
fixptcfg.DefaultWordLength = 16;
fixptcfg.TestNumerics = true; fixptcfg.DetectFixptOverflows = true;
Установите fimath Product mode и Sum mode на KeepLSB. Эти настройки моделируют поведение целочисленных операций в языке C.
fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''KeepLSB'', ''SumMode'', ''KeepLSB'')';Преобразуйте функцию MATLAB с плавающей точкой, overflow, к коду MATLAB с фиксированной точкой. Вам не нужно задавать типы входа для fiaccel команда, поскольку выводит типы из тестового файла.
fiaccel -float2fixed fixptcfg overflow
Фаза тестирования цифр сообщает о переполнении.
Overflow error in expression 'acc + b( j )*z( k )'. Percentage of Current Range = 104%.
Определите, переполнено ли сложение или умножение в этом выражении. Установите fimath ProductMode для FullPrecision чтобы умножение не переполнено, а затем запустить fiaccel снова команда.
fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''FullPrecision'', ''SumMode'', ''KeepLSB'')'; fiaccel -float2fixed fixptcfg overflow
Фаза тестирования цифр все еще сообщает о переполнении, что указывает на то, что это сложение в выражении, которое переполнено.