В этом примере показов, как сгенерировать Код С с одной точностью из MATLAB с двойной точностью® код в командной строке.
Чтобы завершить этот пример, установите следующие продукты:
MATLAB
MATLAB Coder™
Fixed-Point Designer™
Компилятор C
См. «Поддерживаемые компиляторы».
Можно использовать mex -setup
для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
Создайте локальную рабочую папку, например c:\ex_2ndOrder_filter
.
Измените на docroot\toolbox\fixpoint\examples
папка. В командной строке MATLAB введите:
cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
Скопируйте ex_2ndOrder_filter.m
и ex_2ndOrder_filter_test.m
файлы в локальную рабочую папку.
Напечатать | Имя | Описание |
---|---|---|
Код функции | ex_2ndOrder_filter.m | Функция MATLAB точки входа |
Тестовый файл | ex_2ndOrder_filter_test.m | Скрипт MATLAB, который тестирует |
Чтобы определить тип входного параметра x
, использование coder.getArgTypes
чтобы запустить тестовый файл ex_2ndOrder_filter_test.m
types = coder.getArgTypes('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter');
Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов. coder.getArgTypes
определяет, что входной тип x
1x256 double.
Прежде чем вы сгенерируете код C с одной точностью, сгенерируйте MEX-функцию с одной точностью, которую можно использовать, чтобы проверить поведение сгенерированного кода с одной точностью. Чтобы указать, что вам нужен код MEX с одной точностью, используйте -singleC
опция.
codegen -singleC ex_2ndOrder_filter -args types -report
Во время генерации MEX генератор кода обнаруживает проблемы преобразования с одной точностью. Прежде чем вы сгенерируете код C/C + +, исправьте эти проблемы. Этот пример не имеет проблем преобразования с одной точностью.
Сгенерированный MEX принимает входные входы с одной точностью и с двойной точностью. Можно использовать тот же тестовый файл, чтобы запустить функцию MATLAB двойной точности и MEX-функцию с одной точностью. Вы не должны изменять тестовый файл, чтобы вызвать MEX-функцию с одной точностью.
Запустите тестовый файл ex_2ndOrder_filter_test.m
. Этот файл вызывает функцию MATLAB двойной точности ex_2ndOrder_filter.m
.
ex_2ndOrder_filter_test
Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов.
Запустите тестовый файл ex_2ndOrder_filter_test
, замена вызовов на ex_2ndOrder_filter двойной точности
функция с вызовами одноточной ex_2ndOrder_filter_mex
функция.
coder.runTest('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter')
Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов. Одноточная MEX-функция дает те же результаты, что и функция MATLAB двойной точности.
Создайте объект строения кода для генерации статической библиотеки на C, динамической библиотеки или исполняемого файла.
cfg = coder.config('lib');
Чтобы сгенерировать Код С с одной точностью, вызовите codegen
с -singleC
опция. Включите генерацию отчета генерации кода.
codegen -config cfg -singleC ex_2ndOrder_filter -args {types{1}} -report
Чтобы просмотреть отчет генерации кода для генерации кода C, щелкните ссылку View Report.
На панели Generated Code нажмите ex_2ndOrder_filter.c
.
Переменные двойной точности имеют тип float
в коде С
Область индекса i
- целое число.
Когда вы генерируете код с одной точностью, codegen
позволяет выделять потенциальные проблемы типа данных в отчете генерации кода. Если codegen
невозможно удалить операцию двойной точности, в отчете подсвечивается выражение MATLAB, которое приводит к операции.
Перейдите на вкладку Code Insights. Разверните Potential data type issues. Отсутствие операций двойной точности указывает, что никаких операций двойной точности не остается.
codegen
| coder.config
| coder.getArgTypes
| coder.runTest