В этом примере показано, как разработать библиотеку замены кода, которая включает запись для генерации кода замены для математической функции sin
. Вы используете Code Replacement Tool.
Чтобы завершить этот пример, установите следующее программное обеспечение:
MATLAB®
Файлы MATLAB Coder™
Embedded Coder®
Компилятор C
Инструкции по установке MathWorks® продукты, см. Установка и лицензирование. Если вы установили MATLAB и хотите увидеть, какие другие продукты MathWorks установлены, в Командном окне, введите ver
.
Список поддерживаемых компиляторов см. в разделе https://www.mathworks.com/support/compilers/current_release/
.
Запуск нового сеанса работы с MATLAB.
Создайте или перемещайтесь (cd
) в пустую папку.
В командной строке введите crtool
команда. Откроется Code Replacement Tool окно.
В Code Replacement Tool окне выберите File > New table.
На правой панели назовите таблицу crl_table_sinfcn
и нажмите Apply. Позже, когда вы сохраняете таблицу, инструмент сохраняет ее с именем файла crl_table_sinfcn.m
.
Создайте запись таблицы, которая сопоставляет sin
функция со double
входные и double
выход в пользовательскую функцию реализации.
На левой панели выберите таблицу crl_table_sinfcn
. Затем выберите File > New entry > Function. Новая запись появится на средней панели, первоначально без имени.
На средней панели выберите новую запись.
На правой панели, на вкладке Mapping Information, в меню Function, выберите sin
.
Оставьте Algorithm установленным на Unspecified
и оставьте параметры в группе Conceptual function равными значениям по умолчанию.
В группе Replacement function назовите функцию замены sin_dbl
.
Оставьте оставшиеся параметры в группе Replacement function установленными на значения по умолчанию.
Нажмите Apply. Инструмент обновляет Function signature preview, чтобы отразить указанное имя функции замены.
Перейдите в нижнюю часть вкладки Mapping Information и нажмите Validate entry. Инструмент проверяет вашу запись.
На следующем рисунке показана полная информация о отображении.
На вкладке Build Information для параметра Implementation header file введите sin_dbl.h
.
Оставьте оставшиеся параметры равными значениям по умолчанию.
Нажмите Apply.
Вы также можете переоценить запись. Вернитесь на вкладку Mapping Information и нажмите Validate entry.
Создайте запись, которая сопоставляет sin
функция со single
входные и double
выход в пользовательскую функцию реализации с именем sin_sgl
. Создайте запись путем копирования и вставки sin_dbl
запись.
На средней панели выберите sin_dbl
запись.
Выберите Edit > Copy
Выберите Edit > Paste
На вкладке Mapping Information, в разделе Conceptual function, установите тип данных входных параметров u1
на single
.
В Replacement function разделе назовите функцию sin_sgl
. Установите тип данных входных параметров u1
на single
.
Нажмите Apply. Обратите внимание на изменения, которые появляются для Function signature preview.
На вкладке Build Information для параметра Implementation header file введите sin_sgl.h
. Оставьте оставшиеся параметры равными значениям по умолчанию и нажмите Apply.
Выберите Actions > Validate table.
Если инструмент сообщает об ошибках, исправьте их и повторите валидацию. Повторите исправление и проверку ошибок, пока инструмент не сообщит об ошибках. Следующий рисунок показывает отчет о валидации.
Сохраните таблицу замещения кода в файл MATLAB в рабочей папке. Выберите File > Save table. По умолчанию инструмент использует имя таблицы для присвоения имени файлу. В данном примере инструмент сохраняет таблицу в файле crl_table_sinfcn.m
.
Рассмотрите просмотр кода MATLAB для определения таблицы замещения кода. После использования инструмента для создания начальной версии файла определения таблицы можно обновить, улучшить или скопировать файл в текстовом редакторе.
Чтобы просмотреть его, в MATLAB или другом текстовом редакторе откройте файл crl_table_sinfcn.m
.
Прежде чем вы сможете использовать таблицу замены кода, необходимо зарегистрировать ее как часть библиотеки замены кода. Используйте Инструмент замены кода, чтобы сгенерировать файл регистрации.
В инструменте замены кода выберите File > Generate registration file.
В диалоговом окне Generate registration file отредактируйте поля диалогового окна так, чтобы они совпадали со следующим рисунком, и нажмите OK.
В диалоговом окне Select location to save the registration file укажите местоположение файла регистрации. Расположение должно быть в пути MATLAB или в текущей рабочей папке. Сохраните файл. Инструмент сохраняет файл следующим rtwTargetInfo.m
.
В командной строке введите:
RTW.TargetRegistry.getInstance('reset');
Применить библиотеку замещения кода. Проверьте, что генератор кода производит замену кода, которую вы ожидаете.
Проверьте наличие ошибок. В командной строке активируйте файл определения таблицы. Для примера:
Если ошибка существует в файле определения, вызов инициирует появление сообщения. Исправьте ошибку и повторите попытку.
tbl = crl_table_sinfcn tbl = TflTable with properties: Version: '1.0' ReservedSymbols: [] StringResolutionMap: [] AllEntries: [2x1 RTW.TflCFunctionEntry] EnableTrace: 1|
Используйте средство просмотра замещения кода для проверки записей замещения кода. Для примера:
crviewer('Sin Function Example')
В средстве просмотра выберите записи в таблице и проверьте, что содержимое - это то, что вы ожидаете. Средство просмотра может помочь вам обнаружить такие проблемы, как:
Неправильный порядок аргументов.
Концептуальные имена аргумента, которые не совпадают с тем, что ожидается генератором кода.
Неправильные параметры приоритета.
Идентифицируйте существующий или создайте новый код MATLAB, который вызывает sin
функция. Для примера:
function y = my_sin_fnc(x) y = sin(x); end
Откройте приложение MATLAB Coder.
Добавьте функцию, которая включает вызов к sin
функция как файл точки входа. Для примера добавьте my_sin_func.m
. Приложение создает проект с именем my_sin_func.prj
.
Щелкните Next, чтобы перейти к Define Input Type шагу. Определите типы для входных параметров функции точки входа.
Щелкните Next, чтобы перейти к Check for Run-Time Issues шагу. Этот шаг является необязательным. Однако лучшая практика выполнить этот шаг. Предоставьте тестовый файл, который вызывает вашу функцию точки входа. Приложение генерирует MEX-функцию из функции точки входа. Затем приложение запускает тестовый файл, заменяя вызовы функции MATLAB вызовами сгенерированной MEX-функции.
Щелкните Next, чтобы перейти к Generate Code шагу. Чтобы открыть диалоговое окно Generate, щелкните стрелу Generate.
Установите Build type, чтобы сгенерировать библиотеку или исполняемый файл.
Нажмите More Settings.
Сконфигурируйте генератор кода, чтобы использовать библиотеку замены кода. На вкладке Custom Code установите для параметра Code replacement library имя библиотеки. Для примера, Sin Function Example
.
Сконфигурируйте отчет генерации кода. На вкладке Debug установите параметры Always create a report, Code replacements и Automatically launch a report if one is generated.
Сконфигурируйте генератор кода, чтобы сгенерировать код только. Для Build type выберите Source code. Перед созданием исполняемого файла необходимо просмотреть изменения кода в сгенерированном коде.
Щелкните Generate, чтобы сгенерировать код С и отчет.
Просмотрите результаты замены кода в разделе «Отчет о замене кода» отчета генерации кода.
Отчет указывает, что генератор кода нашел совпадение и применил код замены для функции sin_dbl
.
Проверьте замены кода. В отчете щелкните функцию MATLAB, которая инициировала замену, my_sin_func.m
. Откроется Редактор MATLAB, который подсвечивает вызов функции, который запускает замену кода.