Код, прослеживающий (трассируемость), использует гиперссылки, чтобы перейти между строкой сгенерированного кода и его соответствующими элементами в модели. Чтобы найти строки кода и их соответствующие элементы, можно также щелкнуть правой кнопкой по элементу или элементам в модели. Эта двухсторонняя навигация является двусторонней отслеживаемостью.
Используя трассировку кода, вы можете:
Проверьте, что сгенерированный код - как вы ожидаете. Можно идентифицировать, какие элементы модели соответствуют строке кода. Можно отследить код от различных элементов, которые вы имеете или не рассмотрели.
Проверьте, что сгенерированный код соответствует конструктивным требованиям. Можно соединить требования с элементом модели и использовать трассировку кода, чтобы проверить, что сгенерированный код для элемента модели удовлетворяет присвоенные требования.
Отчет генерации кода HTML включает в себя ресурсы, которые поддерживают трассировку кода:
Гиперссылки элемента кода (обозначенный путем подчеркивания, когда вы наводите на код) прослеживать переменные или типы в сгенерированном коде к их объявлениям или определениям в заголовочных файлах.
Теги в комментариях к коду, которые идентифицируют элементы в модели, из которой сгенерированы строки кода.
Гиперссылки номера строки, которые соединяются с компонентом модели, от которого была сгенерирована строка кода.
Двусторонняя отслеживаемость поддерживается для блоков Simulink® и этих элементов Stateflow®:
Состояния
Переходы
Таблицы переходов состояний
Функции MATLAB®. Трассируемость не поддержана для внешнего кода, который вы вызываете от функции MATLAB.
Блоки таблицы истинности
Графические функции
Функции Simulink
Трассируемость в одном направлении поддерживается для этих элементов Stateflow:
События (код к модели)
Трассируемость кода к модели работает на явные события, но не неявные события. Нажатие на гиперссылку для явного события в сгенерированном коде подсвечивает что элемент в панели Contents Model Explorer.
Соединения (модель к коду)
Трассируемость модели к коду работает на перекрестки по крайней мере с одним исходящим переходом. Щелчок правой кнопкой по такому соединению в редакторе Stateflow подсвечивает строку кода, которая соответствует первому исходящему переходу для того соединения.
Для получения дополнительной информации смотрите Трассировку Элементы Stateflow в Сгенерированном коде.
Блоки MATLAB function, которые вы вставляете непосредственно в модель Simulink, также прослеживаемы. Для получения дополнительной информации смотрите Трассируемость Использования в блоках MATLAB function.
Этот пример показывает, как создать отчет генерации кода HTML, который включает ссылки для трассировки между исходным кодом и моделью Simulink.
Откройте модель и убедитесь, что она сконфигурирована для цели ERT.
Выберите Create code generation report, если он уже не выбран. По умолчанию Open report automatically, Code-to-model и Model-to-code выбраны.
Если ваша модель содержит модели, на которые ссылаются, и вы хотите включить трассируемость для отчета генерации кода ссылаемой модели, повторить шаг 2 для каждой модели, на которую ссылаются.
Нажмите Ctrl+B, чтобы сгенерировать код для вашей модели. Процесс сборки открывает отчет генерации кода в веб-браузере MATLAB.
В левой панели навигации выберите файл исходного кода. Исходный код и номера строки на правой панели содержат гиперссылки на блоки в модели.
Кликните по комментарию или гиперссылке номера строки. Редактор Simulink отображает и подсвечивает соответствующий блок или блоки в модели.
Чтобы подсветить сгенерированный код для блока в вашей модели Simulink, щелкните правой кнопкой по блоку и выберите C/C++ Code> Navigate to C/C++ Code. Сгенерированный код для блока затем подсвечен в отчете генерации кода HTML. Чтобы подсветить сгенерированный код для нескольких блоков, которые вы выбираете, удержите клавишу SHIFT, выберите несколько блоков, и затем щелкните правой кнопкой по любому блоку, чтобы выбрать C/C++ Code> Navigate to C/C++ Code. Сгенерированный код для блоков затем подсвечен в отчете генерации кода HTML.
Если вы имеете модель, на которую ссылаются, в своей модели, в левой панели навигации, под Reference Models, щелкаете по ссылке к модели, на которую ссылаются. Отчет генерации кода для модели, на которую ссылаются, теперь отображен в theMATLABweb браузере.
В левой панели навигации можно нажать кнопку 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);
Отчет генерации кода HTML обеспечивает трассируемость между операторами в сгенерированном коде и блоках Simulink, элементах Stateflow или блоках MATLAB function.
Чтобы проверить сгенерированный код при помощи трассируемости оператора, в окне отчета HTML, кликают по гиперссылке оператора, чтобы подсветить исходный блок в модели.
Эти операторы поддерживаются.
Тип оператора | Операторы |
---|---|
Арифметика | + , - , * , / , % |
+= , -= , *= , /= , %= | |
++ , -- (префикс и постфикс) | |
Логический | ! , && , || |
Реляционный | == , != , < , > , <= , >= |
Бит | ~ , | , ^ , & , >> , << |
&= , ^= , |= , <<= , >>= | |
Условное выражение | ?: |
Эти операторы не поддержаны.
Тип оператора | Примеры оператора |
---|---|
Оператор присваивания | = |
Член и операторы указателя | Индекс массивов: a[b] |
Адрес и указатель разыменовывают: &a , *a | |
Член: a.b , a->b | |
Другие операторы | Круглая скобка в вызове функции: foo(a,b) |
Запятая: a, B
| |
Разрешение осциллографа: a::b | |
Бросок: type(a) | |
new , new[] | |
delete , delete[] |
Эти ограничения применяются к отчетам, сгенерированным программным обеспечением Embedded Coder®:
При следующих условиях трассируемость модели к коду отключена для блока, если имя блока содержит:
Одинарная кавычка ('
).
Звездочка (*
), который вызывает искажающую имя неоднозначность относительно других имен в модели. Эта искажающая имя неоднозначность происходит, если в имени блока или в конце имени блока, звездочка предшествует или следует за наклонной чертой (/
).
Символьный ÿ
(char(255)
).
Если имя блока содержит символ новой строки (\n
), комментарий сгенерированного кода для гиперссылки блока path заменяет символ новой строки на пробел для удобочитаемости.
Вы не можете проследить блоки, представляющие эти типы подсистем к сгенерированному коду:
Виртуальные подсистемы
Подсистемы маскированные
Невиртуальные подсистемы, для которых код был удален из-за оптимизации
Если вы не можете проследить подсистему на уровне подсистемы, можно проследить отдельные блоки в подсистеме.
Если вы открываете модель на платформе, которая отличается от платформы, используемой, чтобы сгенерировать код, вы не можете использовать трассируемость модели к коду и кода к модели.