Управление стилем кода С

Об этом руководстве

Цели обучения

В этом руководстве показано, как:

  • Сгенерируйте код для if-elseif-else логика принятия решений как switch-case операторы.

  • Сгенерируйте код С из MATLAB® код с использованием приложения MATLAB Coder™.

  • Сконфигурируйте параметры конфигурации генерации кода в проекте MATLAB Coder.

  • Сгенерируйте отчет генерации кода, который можно использовать, чтобы проследить между оригинальным кодом MATLAB и сгенерированным кодом C.

Требуемые продукты

Это руководство требует следующих продуктов:

Необходимые файлы

НапечататьИмяОписание
Код функцииtest_code_style.mПример MATLAB, который использует if-elseif-else.

Копировать файл в локальную рабочую папку

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

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

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

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

Откройте приложение MATLAB Coder

На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения MATLAB Coder.

Приложение открывает страницу Select Source Files.

Задайте исходные файлы

  1. На странице Select Source Files введите или выберите имя функции точки входа test_code_style.m.

  2. В Project location поле смените имя проекта на code_style.prj.

  3. Щелкните Next, чтобы перейти к Define Input Types шагу. Приложение анализирует функцию на проблемы с кодированием и готовность генерации кода. Если приложение определяет проблемы, оно открывает страницу Review Code Generation Readiness, на которой можно просмотреть и исправить проблемы. В этом примере, поскольку приложение не обнаруживает проблемы, он открывает страницу Define Input Types.

Определите входные типы

Поскольку C использует статическую типизацию, во время компиляции генератор кода должен определить свойства всех переменных в файлах MATLAB. Поэтому необходимо задать свойства всех входных параметров функции. Чтобы определить свойства входного x:

  1. Нажмите Let me enter input or global types directly.

  2. Щелкните поле справа от x.

  3. Из списка опций выберите int16. Затем выберите scalar.

  4. Щелкните 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. Для получения дополнительной информации см. раздел Проверки во время выполнения системы управления.

  1. Чтобы открыть диалоговое окно Check for Run-Time Issues, щелкните стрелу Check for Issues.

  2. В диалоговом окне Check for Run-Time Issues введите код, который вызывает test_code_style с помощью примера входа. В данном примере введите test_code_style(int16(4)).

  3. Нажмите Check for Issues.

    Приложение генерирует MEX-функцию. Он запускает MEX-функцию с примером входа. Если приложение обнаруживает проблемы во время генерации или выполнения MEX-функции, оно выдает предупреждения и сообщения об ошибке. Щелкните эти сообщения, чтобы перейти к проблемному коду и устранить проблему. В этом примере приложение не обнаруживает проблем.

  4. Щелкните Next, чтобы перейти к Generate Code шагу.

Сконфигурируйте параметры генерации кода

  1. Чтобы открыть диалоговое окно Generate, щелкните стрелу Generate.

  2. Установите Build type равным Static Library (.lib).

  3. Нажмите 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 подпапка. Генератор кода предоставляет ссылку на отчет.

Просмотр сгенерированного кода

  1. Чтобы открыть отчет генерации кода, щелкните ссылку View Report.

    The test_code_style функция отображается на панели кода.

  2. Чтобы просмотреть код MATLAB и код С рядом друг с другом, нажмите Trace Code.

  3. В коде MATLAB наведите курсор на оператор if (x == 1).

    Отчет отслеживает if (x == 1) в switch оператор.

Завершите рабочий процесс

Щелкните Next, чтобы открыть страницу Finish Workflow.

Страница Finish Workflow указывает, что генерация кода выполнена успешно. В нем содержатся сводные данные проекта и ссылки на сгенерированные выходы.

Ключевые моменты, которые нужно запомнить

  • Чтобы проверить наличие проблем во время выполнения перед генерацией кода, выполните шаг Check for Run-Time Issues.

  • Чтобы получить доступ к настройкам строения сборки, на странице Generate Code откройте диалоговое окно Generate и нажмите More Settings.

Похожие темы