Код, прослеживающий (трассируемость), использует гиперссылки, чтобы перейти между линией сгенерированного кода и его соответствующими элементами в модели. Чтобы найти строки кода и их соответствующие элементы, можно также щелкнуть правой кнопкой по элементу или элементам в модели. Эта двухсторонняя навигация является двусторонней отслеживаемостью.
Используя трассировку кода, вы можете:
Проверьте, что сгенерированный код - как вы ожидаете. Можно идентифицировать, какие элементы модели соответствуют строке кода. Можно отследить код от различных элементов, которые вы имеете или не рассмотрели.
Проверьте, что сгенерированный код соответствует конструктивным требованиям. Можно соединить требования с элементом модели и использовать трассировку кода, чтобы проверить, что сгенерированный код для элемента модели удовлетворяет присвоенные требования.
Когда вы генерируете код из модели Simulink®, информация о трассируемости встраивается в сгенерированный код, если явным образом не незаданный. Информация о трассируемости включает ссылки для трассировки между сгенерированным исходным кодом и моделью. Можно просмотреть сгенерированный код любым:
Представление кода: Просмотрите сгенерированный код в Представлении кода перспективы Кода.
Отчет Генерации кода: Просмотрите сгенерированный код как отчет HTML в веб-браузере MATLAB®.
Сгенерированный код включает ресурсы, которые поддерживают трассировку кода:
Гиперссылки элемента кода (обозначенный путем подчеркивания, когда вы устанавливаете свой курсор на код) прослеживать переменные или типы в сгенерированном коде к их объявлениям или определениям в заголовочных файлах.
Теги в комментариях к коду, которые идентифицируют элементы в модели, из которой сгенерированы строки кода.
Гиперссылки номера строки, которые соединяются с компонентом модели, от которого была сгенерирована строка кода.
Двусторонняя отслеживаемость поддерживается для блоков Simulink и этих элементов Stateflow®:
Состояния
Переходы
Таблицы переходов состояний
Функции MATLAB. Трассируемость не поддерживается для внешнего кода, который вы вызываете от функции MATLAB.
Блоки таблицы истинности
Графические функции
Функции Simulink
Трассируемость в одном направлении поддерживается для этих элементов Stateflow:
События (код к модели)
Трассируемость кода к модели работает на явные события, но не неявные события. Нажатие на гиперссылку для явного события в сгенерированном коде подсвечивает что элемент в панели Contents Model Explorer.
Соединения (модель к коду)
Трассируемость модели к коду работает на перекрестки по крайней мере с одним исходящим переходом. Щелчок правой кнопкой по такому соединению в редакторе Stateflow подсвечивает строку кода, которая соответствует первому исходящему переходу для того соединения.
Для получения дополнительной информации смотрите Трассировку Элементы Stateflow в Сгенерированном коде.
Блоки MATLAB Function, которые вы вставляете непосредственно в модель Simulink, также прослеживаемы. Для получения дополнительной информации смотрите Трассируемость Использования в блоках MATLAB function.
Откройте модель rtwdemo_comments
.
Откройте приложение Embedded Coder®. Создайте модель. На вкладке C Code нажмите Build.
Отчет генерации кода HTML открывается по умолчанию. Чтобы использовать отчет, см. Отчет Генерации кода.
Просмотрите сгенерированный код в Представлении кода в перспективе Кода.
Переключитесь между сгенерированными исходными файлами при помощи выпадающего списка наверху Представления кода.
Исходный код содержит информацию о трассируемости, такую как связанные гиперссылками комментарии, номера строки, переменные и операторы. Установите свой курсор или кликните по комментарию или гиперссылке номера строки. Редактор Simulink подсвечивает соответствующий блок или блоки в модели.
Чтобы подсветить сгенерированный код для блока в модели, выберите блок. Сгенерированный код для блока подсвечен в Представлении кода.
Чтобы открыть сгенерированный код для модели, на которую ссылаются, откройте модель, на которую ссылаются, и просмотрите сгенерированный код в Представлении кода.
Откройте модель rtwdemo_comments
.
Откройте приложение Embedded Coder. На вкладке C Code нажмите Settings, чтобы открыть диалоговое окно Configuration Parameters. Выберите 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] |
Адрес и указатель разыменовывают: &a A | |
Член: a.b , a->b | |
Другие операторы | Круглая скобка в вызове функции: foo(a,b) |
Запятая: a B | |
Разрешение осциллографа: a::b | |
Бросок: type(a) | |
new , new[] | |
delete удаление |
Эти ограничения применяются к отчетам, сгенерированным программным обеспечением Embedded Coder:
При следующих условиях трассируемость модели к коду отключена для блока, если имя блока содержит:
Одинарная кавычка ('
).
Звездочка (*
) это вызывает искажающую имя неоднозначность относительно других имен в модели. Эта искажающая имя неоднозначность происходит, если в имени блока или в конце имени блока, звездочка предшествует или следует за наклонной чертой (/
).
Символьный ÿ
(char(255)
).
Если имя блока содержит символ новой строки (\n
), комментарий сгенерированного кода для гиперссылки блока path заменяет символ новой строки на пробел для удобочитаемости.
Вы не можете проследить блоки, представляющие эти типы подсистем к сгенерированному коду:
Виртуальные подсистемы
Подсистемы маскированные
Невиртуальные подсистемы, для которых код был удален из-за оптимизации
Если вы не можете проследить подсистему на уровне подсистемы, можно проследить отдельные блоки в подсистеме.
Если вы открываете модель на платформе, которая отличается от платформы, используемой, чтобы сгенерировать код, вы не можете использовать трассируемость модели к коду и кода к модели.
Встроенная трассируемость не доступна для файлов, которые сгенерированы в shared_utils
папка.