Проверьте сгенерированный код при помощи трассировки кода

Трассировка кода (трассируемость) использует гиперссылки для навигации между линией сгенерированного кода и ее соответствующими элементами в модели. Чтобы найти строки кода и их соответствующие элементы, можно также щелкнуть правой кнопкой мыши элемент или элементы в модели. Эта двухсторонняя навигация является двусторонней отслеживаемостью.

Используя трассировку кода, можно:

  • Проверьте, что сгенерированный код как вы ожидаете. Можно идентифицировать, какие элементы модели соответствуют строке кода. Вы можете отслеживать код из различных элементов, которые у вас есть или не просматривались.

  • Проверьте, что сгенерированный код соответствует требованиям проекта. Можно связать требования с элементом модели и использовать трассировку кода, чтобы убедиться, что сгенерированный код для элемента модели соответствует присвоенным требованиям.

Когда вы генерируете код из Simulink® модель, информация о трассируемости встраивается в сгенерированный код, если не указано явно. Информация о трассируемости включает ссылки для трассировки между сгенерированным исходным кодом и моделью. Вы можете просмотреть сгенерированный код с помощью:

Сгенерированный код включает ресурсы, поддерживающие трассировку кода:

  • Гиперссылки элемента кода (обозначенные подчеркиванием, когда вы помещаете курсор на код), чтобы проследить переменные или типы в сгенерированном коде к их объявлениям или определениям в файлах заголовка.

  • Теги в комментариях кода, которые идентифицируют элементы в модели, из которых генерируются строки кода.

  • Номер линии содержит гиперссылки, которые связываются с компонентом модели, из которого была сгенерирована строка кода.

Отслеживаемые элементы

Двусторонняя отслеживаемость поддерживается для блоков Simulink и этих Stateflow® элементы:

  • Государства

  • Переходы

  • Таблицы переходов состояний

  • Функции MATLAB. Трассируемость не поддерживается для внешнего кода, который вы вызываете из функции MATLAB.

  • Блоки таблицы истинности

  • Графические функции

  • Функции Simulink

Трассируемость в одном направлении поддерживается для этих элементов Stateflow:

  • События (код-к-модели)

    Трассируемость code-to-model работает на явные события, но не неявные события. При нажатии гиперссылки для явного события в сгенерированном коде этот элемент подсвечивается в панели Contents Model Explorer.

  • Соединения (модель-к-коду)

    Трассируемость Model-to-code работает для соединений с по крайней мере одним исходящим переходом. Щелчок правой кнопкой мыши по такому соединению в редакторе Stateflow подсвечивает строку кода, которая соответствует первому исходящему переходу для этого соединения.

Для получения дополнительной информации смотрите Трассировка элементов Stateflow в Сгенерированном коде.

MATLAB Function блоки, которые вы вставляете непосредственно в модель Simulink, также являются отслеживаемыми. Для получения дополнительной информации смотрите Использование трассируемости в Блоках MATLAB function.

Трассируемость в сгенерированном коде

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

  1. Откройте модель rtwdemo_comments.

  2. Откройте Embedded Coder® приложение. Создайте модель. На вкладке C Code нажмите Build.

    Отчет генерации кода HTML открывается по умолчанию. Для использования отчета см. раздел «Отчет о генерации кода».

  3. Просмотрите сгенерированный код в представлении кода в ракурсе Code.

  4. Переключаться между сгенерированными исходными файлами можно с помощью раскрывающегося списка в верхней части представления кода.

  5. Исходный код содержит такую информацию о трассируемости, как гиперссылочные комментарии, номера линий, переменные и операторы. Наведите курсор на или щелкните гиперссылку с комментарием или номером линии. Редактор Simulink подсвечивает соответствующий блок или блоки в модели.

    Code view is open next to the model. Cursor is placed over a comment and corresponding block is highlighted.

  6. Чтобы выделить сгенерированный код для блока в модели, выберите блок. Сгенерированный код для блока подсвечивается в представлении кода.

  7. Чтобы открыть сгенерированный код для ссылочной модели, откройте ссылку на модель и просмотрите сгенерированный код в Представление кода.

Отчет генерации кода

  1. Откройте модель rtwdemo_comments.

  2. Откройте приложение Embedded Coder на вкладке C Code, нажмите Settings, чтобы открыть диалоговое окно Параметров конфигурации. Выберите Create code generation report, если он еще не выбран. По умолчанию выбираются Open report automatically, Code-to-model и Model-to-code.

  3. Если ваша модель содержит ссылочные модели и вы хотите включить трассируемость для отчета о генерации кода модели-ссылки, повторите предыдущий шаг для каждой модели-ссылки.

  4. Создайте модель. На вкладке C Code нажмите Build. Процесс сборки открывает отчет генерации кода в веб-браузере MATLAB.

  5. На левой панели навигации выберите файл исходного кода. Исходный код и номера линий на правой панели содержат гиперссылки на блоки в модели.

  6. Щелкните гиперссылку на комментарий или номер линии. Редактор Simulink отображает и подсвечивает соответствующий блок или блоки в модели.

    Code generation report window containing model.c file is open. Mouse cursor is placed on a comment that contains a hyperlink to the corresponding block in the model.

  7. Чтобы выделить сгенерированный код для блока в модели, щелкните правой кнопкой мыши блок и выберите C/C++ Code > Navigate to C/C++ Code. Сгенерированный код для блока затем подсвечивается в отчете генерации кода HTML. Чтобы выделить сгенерированный код для нескольких блоков, которые вы выбираете, удерживайте клавишу SHIFT, выберите несколько блоков, а затем щелкните правой кнопкой мыши любой один блок, чтобы выбрать C/C++ Code > Navigate to C/C++ Code. Сгенерированный код для блоков затем подсвечивается в отчете генерации кода HTML.

  8. Если Вы имеете модель, на которую ссылаются, в своей модели, в левой панели навигации, под Reference Models, нажимаете на ссылку к модели, на которую ссылаются. Отчет о генерации кода для ссылочной модели теперь отображается в веб-браузере MATLAB.

  9. На левой панели навигации можно нажать кнопку Back, чтобы вернуться к предыдущему отчету генерации кода.

Теги трассируемости

Тег трассируемости появляется в комментарии над соответствующей линией сгенерированного кода. Формат тега < system> / block_name.

  • system является одним из следующих:

    • Текстовое Root

    • Уникальный системный номер, присвоенный двигателем Simulink

  • block_name - имя исходного блока.

Генератор кода документирует теги для модели в разделе комментариев сгенерированного файла заголовка model.h. Например, этот комментарий появляется в заголовочном файле для модели, foo, который имеет подсистему Outer и вложенную подсистему Inner:

/* Here is the system hierarchy for this model.
 *
 * <Root> : foo
 * <S1>   : foo/Outer
 * <S2>   : foo/Outer/Inner
 */

Этот код показывает тег комментарий над сгенерированной строкой кода. Блок Gain на корневом уровне исходной модели генерирует этот код:

/* Gain: '<Root>/UnDeadGain1' */
rtb_UnDeadGain1_h = dead_gain_U.In1 *  dead_gain_P.UnDeadGain1_Gain;

Этот код показывает тег комментарий над сгенерированной строкой кода. Блок Gain в подсистеме на один уровень ниже корневого уровня исходной модели генерирует этот код:

/* Gain: '<S1>/Gain' */
dead_gain_B.temp0 *= (dead_gain_P.s1_Gain_Gain);

Трассируемость оператора

Сгенерированный код обеспечивает трассируемость между операторами в сгенерированном коде и блоках Simulink, элементами Stateflow или блоками MATLAB Function.

Чтобы проверить сгенерированный код при помощи трассируемости оператора, в сгенерированном коде щелкните гиперссылку оператора, чтобы подсветить исходный блок в модели.

Эти операторы поддерживаются.

Тип оператораОператоры
Арифметика+, -, *, /, %
+=, -=, *=, /=, %=
++, -- (префикс и постфикс)
Логичный!, &&, ||
Относительный==, !=, <, >, <=, >=
Бит~, |, ^, &, >>, <<
&=, ^=, |=, <<=, >>=
Условный?:

Эти операторы не поддерживаются.

Тип оператораПримеры операторов
Оператор назначения=
Представитель и указатели на операторыИндекс массива: a[b]
Адрес и указатель dereference: &a, *a
Представитель: a.b, a->b
Другие операторыКруглые скобки в вызове функции: foo(a,b)
Запятая: a, b
Разрешение возможностей: a::b
Приведение: type(a)
new, new[]
delete, delete[]

Ограничения трассируемости

Эти ограничения применяются к отчетам, сгенерированным программным обеспечением Embedded Coder:

  • При следующих условиях трассируемость модели к коду отключена для блока, если имя блока содержит:

    • Одинарная кавычка (').

    • Звездочка (*), что вызывает неоднозначность управления именами относительно других имен в модели. Эта неоднозначность управления именами возникает, если в имени блока или в конце имени блока звездочка предшествует или следует за косой чертой (/).

    • Область символа ÿ (char(255)).

  • Если имя блока содержит символ новой строки (\n), сгенерированный комментарий кода для гиперссылки пути блока заменяет символ новой строки на пространство для читаемости.

  • Вы не можете проследить блоки, представляющие эти типы подсистем, до сгенерированного кода:

    • Виртуальные подсистемы

    • Маскированные подсистемы

    • Невиртуальные подсистемы, для которых код был удален из-за оптимизации

    Если вы не можете проследить подсистему на уровне подсистемы, можно проследить отдельные блоки в подсистеме.

  • Если вы открываете модель на платформе, которая отличается от платформы, используемой для генерации кода, вы не можете использовать трассируемость от модели к коду и от кода к модели.

  • Встроенная трассируемость недоступна для файлов, которые сгенерированы в shared_utils папка.

Похожие темы