Сгенерируйте Код С с одной точностью в командной строке

В этом примере показов, как сгенерировать Код С с одной точностью из MATLAB с двойной точностью® код в командной строке.

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

Чтобы завершить этот пример, установите следующие продукты:

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

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

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

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

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

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

    Скрипт MATLAB, который тестирует ex_2ndOrder_filter.m

     Функция ex_2ndOrder_filter

     Скрипт ex_2ndOrder_filter_test

Определите тип Входного параметра

Чтобы определить тип входного параметра x, использование coder.getArgTypes чтобы запустить тестовый файл ex_2ndOrder_filter_test.m

types = coder.getArgTypes('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter');

Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов. coder.getArgTypes определяет, что входной тип x 1x256 double.

Сгенерируйте и запустите MEX с одной точностью, чтобы проверить численное поведение

  1. Прежде чем вы сгенерируете код C с одной точностью, сгенерируйте MEX-функцию с одной точностью, которую можно использовать, чтобы проверить поведение сгенерированного кода с одной точностью. Чтобы указать, что вам нужен код MEX с одной точностью, используйте -singleC опция.

    codegen -singleC ex_2ndOrder_filter -args types -report

    Во время генерации MEX генератор кода обнаруживает проблемы преобразования с одной точностью. Прежде чем вы сгенерируете код C/C + +, исправьте эти проблемы. Этот пример не имеет проблем преобразования с одной точностью.

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

  2. Запустите тестовый файл ex_2ndOrder_filter_test.m. Этот файл вызывает функцию MATLAB двойной точности ex_2ndOrder_filter.m.

    ex_2ndOrder_filter_test

  3. Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов.

  4. Запустите тестовый файл ex_2ndOrder_filter_test, замена вызовов на ex_2ndOrder_filter двойной точности функция с вызовами одноточной ex_2ndOrder_filter_mex функция.

    coder.runTest('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter')
  5. Тестовый файл запускается и отображает выходы фильтра для каждого из входных сигналов. Одноточная MEX-функция дает те же результаты, что и функция MATLAB двойной точности.

Сгенерируйте одноточные Коды С

  1. Создайте объект строения кода для генерации статической библиотеки на C, динамической библиотеки или исполняемого файла.

    cfg = coder.config('lib');
    

  2. Чтобы сгенерировать Код С с одной точностью, вызовите 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. Отсутствие операций двойной точности указывает, что никаких операций двойной точности не остается.

См. также

| | |

Похожие примеры

Подробнее о