Трассировка кода (трассируемость) использует гиперссылки для навигации между линией сгенерированного кода и ее соответствующими элементами в модели. Чтобы найти строки кода и их соответствующие элементы, можно также щелкнуть правой кнопкой мыши элемент или элементы в модели. Эта двухсторонняя навигация является двусторонней отслеживаемостью.
Используя трассировку кода, можно:
Проверьте, что сгенерированный код как вы ожидаете. Можно идентифицировать, какие элементы модели соответствуют строке кода. Вы можете отслеживать код из различных элементов, которые у вас есть или не просматривались.
Проверьте, что сгенерированный код соответствует требованиям проекта. Можно связать требования с элементом модели и использовать трассировку кода, чтобы убедиться, что сгенерированный код для элемента модели соответствует присвоенным требованиям.
Когда вы генерируете код из Simulink® модель, информация о трассируемости встраивается в сгенерированный код, если не указано явно. Информация о трассируемости включает ссылки для трассировки между сгенерированным исходным кодом и моделью. Вы можете просмотреть сгенерированный код с помощью:
Представление кода: Просмотрите сгенерированный код в представлении кода перспективы кода.
Отчет генерации кода: Просмотрите сгенерированный код как HTML в MATLAB® веб-браузер.
Сгенерированный код включает ресурсы, поддерживающие трассировку кода:
Гиперссылки элемента кода (обозначенные подчеркиванием, когда вы помещаете курсор на код), чтобы проследить переменные или типы в сгенерированном коде к их объявлениям или определениям в файлах заголовка.
Теги в комментариях кода, которые идентифицируют элементы в модели, из которых генерируются строки кода.
Номер линии содержит гиперссылки, которые связываются с компонентом модели, из которого была сгенерирована строка кода.
Двусторонняя отслеживаемость поддерживается для блоков Simulink и этих Stateflow® элементы:
Государства
Переходы
Таблицы переходов состояний
Функции MATLAB. Трассируемость не поддерживается для внешнего кода, который вы вызываете из функции MATLAB.
Блоки таблицы истинности
Графические функции
Функции Simulink
Трассируемость в одном направлении поддерживается для этих элементов Stateflow:
События (код-к-модели)
Трассируемость code-to-model работает на явные события, но не неявные события. При нажатии гиперссылки для явного события в сгенерированном коде этот элемент подсвечивается в панели Contents Model Explorer.
Соединения (модель-к-коду)
Трассируемость Model-to-code работает для соединений с по крайней мере одним исходящим переходом. Щелчок правой кнопкой мыши по такому соединению в редакторе Stateflow подсвечивает строку кода, которая соответствует первому исходящему переходу для этого соединения.
Для получения дополнительной информации смотрите Трассировка элементов Stateflow в Сгенерированном коде.
MATLAB Function блоки, которые вы вставляете непосредственно в модель Simulink, также являются отслеживаемыми. Для получения дополнительной информации смотрите Использование трассируемости в Блоках MATLAB function.
Откройте модель rtwdemo_comments
.
Откройте Embedded Coder® приложение. Создайте модель. На вкладке C Code нажмите Build.
Отчет генерации кода HTML открывается по умолчанию. Для использования отчета см. раздел «Отчет о генерации кода».
Просмотрите сгенерированный код в представлении кода в ракурсе Code.
Переключаться между сгенерированными исходными файлами можно с помощью раскрывающегося списка в верхней части представления кода.
Исходный код содержит такую информацию о трассируемости, как гиперссылочные комментарии, номера линий, переменные и операторы. Наведите курсор на или щелкните гиперссылку с комментарием или номером линии. Редактор Simulink подсвечивает соответствующий блок или блоки в модели.
Чтобы выделить сгенерированный код для блока в модели, выберите блок. Сгенерированный код для блока подсвечивается в представлении кода.
Чтобы открыть сгенерированный код для ссылочной модели, откройте ссылку на модель и просмотрите сгенерированный код в Представление кода.
Откройте модель rtwdemo_comments
.
Откройте приложение Embedded Coder на вкладке C Code, нажмите Settings, чтобы открыть диалоговое окно Параметров конфигурации. Выберите Create code generation report, если он еще не выбран. По умолчанию выбираются Open report automatically, Code-to-model и Model-to-code.
Если ваша модель содержит ссылочные модели и вы хотите включить трассируемость для отчета о генерации кода модели-ссылки, повторите предыдущий шаг для каждой модели-ссылки.
Создайте модель. На вкладке C Code нажмите Build. Процесс сборки открывает отчет генерации кода в веб-браузере MATLAB.
На левой панели навигации выберите файл исходного кода. Исходный код и номера линий на правой панели содержат гиперссылки на блоки в модели.
Щелкните гиперссылку на комментарий или номер линии. Редактор Simulink отображает и подсвечивает соответствующий блок или блоки в модели.
Чтобы выделить сгенерированный код для блока в модели, щелкните правой кнопкой мыши блок и выберите C/C++ Code > Navigate to C/C++ Code. Сгенерированный код для блока затем подсвечивается в отчете генерации кода HTML. Чтобы выделить сгенерированный код для нескольких блоков, которые вы выбираете, удерживайте клавишу SHIFT, выберите несколько блоков, а затем щелкните правой кнопкой мыши любой один блок, чтобы выбрать C/C++ Code > Navigate to C/C++ Code. Сгенерированный код для блоков затем подсвечивается в отчете генерации кода HTML.
Если Вы имеете модель, на которую ссылаются, в своей модели, в левой панели навигации, под Reference Models, нажимаете на ссылку к модели, на которую ссылаются. Отчет о генерации кода для ссылочной модели теперь отображается в веб-браузере MATLAB.
На левой панели навигации можно нажать кнопку Back, чтобы вернуться к предыдущему отчету генерации кода.
Тег трассируемости появляется в комментарии над соответствующей линией сгенерированного кода. Формат тега <
.system
> / block_name
является одним из следующих:system
Текстовое Root
Уникальный системный номер, присвоенный двигателем Simulink
- имя исходного блока.block_name
Генератор кода документирует теги для модели в разделе комментариев сгенерированного файла заголовка
. Например, этот комментарий появляется в заголовочном файле для модели, model
.hfoo
, который имеет подсистему 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
папка.