В этом руководстве показано, как:
Сгенерируйте код для if-elseif-else
логика принятия решений как switch-case
операторы.
Сгенерируйте код С из MATLAB® код с использованием приложения MATLAB Coder™.
Сконфигурируйте параметры конфигурации генерации кода в проекте MATLAB Coder.
Сгенерируйте отчет генерации кода, который можно использовать, чтобы проследить между оригинальным кодом MATLAB и сгенерированным кодом C.
Это руководство требует следующих продуктов:
MATLAB
MATLAB CODER
Компилятор C
MATLAB Coder находит и использует поддерживаемый установленный компилятор. Смотрите поддерживаемые и совместимые компиляторы на MathWorks® веб-сайт.
Можно использовать mex -setup
для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
Напечатать | Имя | Описание |
---|---|---|
Код функции | test_code_style.m | Пример MATLAB, который использует if-elseif-else . |
Создайте локальную рабочую папку, например c:\ecoder\work
.
Измените на matlabroot\help\toolbox\ecoder\examples
папка. В командной строке MATLAB введите:
cd(fullfile(docroot, 'toolbox', 'ecoder', 'examples'))
Скопируйте файл test_code_style.m
в локальную рабочую папку.
На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения MATLAB Coder.
Приложение открывает страницу Select Source Files.
На странице Select Source Files введите или выберите имя функции точки входа test_code_style.m
.
В Project location поле смените имя проекта на code_style.prj
.
Щелкните Next, чтобы перейти к Define Input Types шагу. Приложение анализирует функцию на проблемы с кодированием и готовность генерации кода. Если приложение определяет проблемы, оно открывает страницу Review Code Generation Readiness, на которой можно просмотреть и исправить проблемы. В этом примере, поскольку приложение не обнаруживает проблемы, он открывает страницу Define Input Types.
Поскольку C использует статическую типизацию, во время компиляции генератор кода должен определить свойства всех переменных в файлах MATLAB. Поэтому необходимо задать свойства всех входных параметров функции. Чтобы определить свойства входного x:
Нажмите Let me enter input or global types directly.
Щелкните поле справа от x
.
Из списка опций выберите int16
. Затем выберите scalar
.
Щелкните Next, чтобы перейти к Check for Run-Time Issues шагу.
Примечание
The Convert if-elseif-else patterns to switch-case statements
оптимизация работает только для целочисленных и перечисленных входов.
Шаг Check for Run-Time Issues генерирует файл MEX из функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является необязательным. Однако лучшая практика выполнить этот шаг. Используя этот шаг, можно обнаружить и исправить ошибки времени выполнения, которые труднее диагностировать в сгенерированном коде C. По умолчанию MEX-функция включает проверку целостности памяти. Эти проверки выполняют ограничения массивов и проверку размерностей. Проверки обнаруживают нарушения целостности памяти в коде, сгенерированном для функций MATLAB. Для получения дополнительной информации см. раздел Проверки во время выполнения системы управления.
Чтобы открыть диалоговое окно Check for Run-Time Issues, щелкните стрелу Check for Issues.
В диалоговом окне Check for Run-Time Issues введите код, который вызывает test_code_style
с помощью примера входа. В данном примере введите test_code_style(int16(4))
.
Нажмите Check for Issues.
Приложение генерирует MEX-функцию. Он запускает MEX-функцию с примером входа. Если приложение обнаруживает проблемы во время генерации или выполнения MEX-функции, оно выдает предупреждения и сообщения об ошибке. Щелкните эти сообщения, чтобы перейти к проблемному коду и устранить проблему. В этом примере приложение не обнаруживает проблем.
Щелкните Next, чтобы перейти к Generate Code шагу.
Чтобы открыть диалоговое окно Generate, щелкните стрелу Generate.
Установите Build type равным Static Library (.lib)
.
Нажмите More settings и установите следующие настройки:
На вкладке Code Appearance установите флажок Convert if-elseif-else patterns to switch-case statements.
На вкладке Debugging убедитесь, что выбран Always create a report.
На вкладке All Settings убедитесь, что выбран Enable code traceability.
Нажмите Generate.
Когда генерация кода завершена, генератор кода создает статическую библиотеку C, test_code_style.lib
, и кода С в /codegen/lib/test_code_style
подпапка. Генератор кода предоставляет ссылку на отчет.
Чтобы открыть отчет генерации кода, щелкните ссылку View Report.
The test_code_style
функция отображается на панели кода.
Чтобы просмотреть код MATLAB и код С рядом друг с другом, нажмите Trace Code.
В коде MATLAB наведите курсор на оператор if (x == 1)
.
Отчет отслеживает if (x == 1)
в switch
оператор.
Щелкните Next, чтобы открыть страницу Finish Workflow.
Страница Finish Workflow указывает, что генерация кода выполнена успешно. В нем содержатся сводные данные проекта и ссылки на сгенерированные выходы.
Чтобы проверить наличие проблем во время выполнения перед генерацией кода, выполните шаг Check for Run-Time Issues.
Чтобы получить доступ к настройкам строения сборки, на странице Generate Code откройте диалоговое окно Generate и нажмите More Settings.