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

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

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

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

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

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

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

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

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

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

Прослеживаемые элементы

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

  • Состояния

  • Переходы

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

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

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

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

  • Функции Simulink

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

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

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

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

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

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

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

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

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

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

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

    Отчет генерации кода HTML открывается по умолчанию. Чтобы использовать отчет, см. Отчет Генерации кода.

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

  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, чтобы открыть диалоговое окно Configuration Parameters. Выберите Create code generation report (Simulink Coder), если он уже не выбран. По умолчанию Open report automatically (Simulink Coder), 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 имя исходного блока.

Генератор кода документирует теги для модели в разделе комментариев сгенерированного заголовочного файла modelH. Например, этот комментарий появляется в заголовочном файле для модели, 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]
Адрес и указатель разыменовывают: &aA
Член: a.b, a->b
Другие операторыКруглая скобка в вызове функции: foo(a,b)
Запятая: aB
Разрешение осциллографа: a::b
Бросок: type(a)
new, new[]
deleteудаление

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

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

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

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

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

    • Символьный ÿ (char(255)).

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

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

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

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

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

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

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

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте