Управление зависимостями файла процесса сборки

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

Зависимости между сгенерированными исходным и заголовочным файлами появляются на рисунке. Стрелы, поступающие от файловой точки к файлам, которые она включает. Другие зависимости существуют, например, на Simulink® файлы заголовков tmwtypes.h и simstruc_types.h, плюс файлы библиотеки C или C++. Рисунок отображает связи включения только между теми файлами, которые генерируются в папке сборки. Эти файлы могут ссылаться на утилиту и модель-ссылку код, расположенный в папке генерации кода. Дополнительные сведения о папках и файлах, которые создает процесс сборки, см. в разделах Управление папками процесса сборки и Управление файлами процесса сборки.

Эти две таблицы определяют условия, которые управляют созданием файлов зависимостей для целей GRT и ERT. Чтобы управлять зависимостями, связанными со сборкой, рассмотрите, как эти условия применяются к процессу генерации модели и кода. Затем сконфигурируйте параметры модели и опции генерации кода, чтобы управлять зависимостями файла процесса сборки.

Из-за различий в опциях упаковки файлов для кода, сгенерированного с помощью системных целевых файлов на основе ERT, зависимости файлов немного отличаются от упаковки файлов для кода, сгенерированного с помощью системных целевых файлов на основе GRT. Смотрите раздел Управление упаковкой файлов модулей Сгенерированный код (Embedded Coder).

Файлы заголовков родительской системы (model.h) включать файлы заголовков дочерних подсистем (subsystem.h). В более слоистых моделях подсистемы аналогично включают файлы заголовков своих детей в иерархию модели. Как следствие, подсистемы способны рекурсивно просматривать в свои дочерние подсистемы и просматривать в корневую систему, потому что каждый subsystem.c или subsystem.cpp включает model.h и model_private.h.

На рисунке файлы model.h, model_private.h, и subsystem.h зависят от файла заголовка rtwtypes.h. Если вы используете системные целевые файлы, которые не основаны на системном целевом файле ERT, исходные файлы, которые вы генерируете, могут иметь дополнительные зависимости от tmwtypes.h и simstruc_types.h.

Файлы заголовков системы

Системные файлы заголовков делают объявления функций, определения типов и определения макросов доступными для устаревшего или внешнего кода. Некоторые сценарии генерации кода требуют включения заголовочных файлов, которые специфичны для продукта генератора кода.

Генератор кода включает некоторые системные заголовочные файлы для широко определенных случаев. Для примера сгенерированный код включает <stddef.h> когда модель содержит служебную функцию, которая требует этого файла заголовка. Этот подход помогает идентифицировать зависимости заголовочных файлов:

  1. Установите Shared code placement параметра конфигурации модели в 'Shared location' и создайте модель. Генератор кода помещает служебные функции в __sharedutils папка.

  2. Используйте утилиту поиска в файле (для примера, утилита grep), чтобы найти .c и .h файлы в __sharedutils папка для #include. В результатах поиска перечислены утилиты с зависимостями заголовочных файлов.

  3. Используйте эту информацию для идентификации утилит, чтобы удалить из модели и уменьшить зависимости заголовочного файла в сгенерированном коде.

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

Файл системного заголовкаОписание и условия включения для целевых файлов GRT или ERT

<math.h>

Задает математические константы

GRT - сгенерированный код не включает этот файл.

ERT - Сгенерированный код включает этот файл, когда код чтит ваше строение модели для решателя Stop time и то и другое:

  • Ваше строение модели включает MAT-file logging параметра. См. журнал MAT-файлов.

  • Ваше строение модели включает External mode параметра.

<float.h>

Обеспечивает математические функции с плавающей точкой

GRT - Сгенерированный код включает этот файл, когда ваша модель содержит математическую функцию с плавающей точкой.

ERT - Сгенерированный код включает этот файл, когда ваша модель содержит математическую функцию с плавающей точкой, если запись библиотеки замещения кода не переопределяет функцию. Дополнительные сведения см. в разделе Выбор библиотеки замещения кода.

<stddef.h>

Задает NULL

GRT и ERT - Сгенерированный код включает этот файл, когда ваша модель содержит служебную функцию, который требует этого файла.

<stdio.h>

Предоставляет функции ввода-вывода файлов

GRT - Сгенерированный код включает этот файл, когда ваша модель включает блок To File.

ERT - Сгенерированный код включает этот файл, когда либо:

  • Ваша модель включает блок To File.

  • Ваше строение модели включает MAT-file logging параметра. См. журнал MAT-файлов.

<stdlib.h>

Предоставляет служебные функции, такие как целочисленные версии div() и abs()

GRT - сгенерированный код включает этот файл, если либо:

  • Ваша модель включает Stateflow® график.

  • Ваша модель включает блок математической функции, сконфигурированный для mod() или rem(), которые генерируют вызовы к div().

ERT - Сгенерированный код включает этот файл, когда либо:

  • Ваша модель включает диаграмму Stateflow, и вы выбираете Support: floating-point numbers параметра конфигурации модели.

  • Ваша модель включает блок математической функции, сконфигурированный для mod() или rem(), которые генерируют вызовы к div().

<string.h>

Обеспечивает функции памяти, такие как memset() и memcpy()

GRT - Сгенерированный код включает этот файл, когда ваш код инициализации модели вызываетmemset().

ERT - Сгенерированный код включает этот файл, когда вызывается код инициализации блока или моделиmemcpy() или memset().

Для списка соответствующих блоков в Командном окне введите:

showblockdatatypetable

Ищите блоки с N2 заметкой. Чтобы пропустить вызовы в memset() из кода инициализации модели выберите параметры конфигурации модели Remove root level I/O zero initialization и Remove internal data zero initialization.

Файлы заголовков генератора кода

Зависимости в таблице для сгенерированных заголовочных файлов применяются к системным целевым файлам grt.tlc и ert.tlc. Системные целевые файлы, выведенные из этих целевых файлов базовой системы, могут иметь дополнительные зависимости заголовка. Генерация кода для блоков из библиотек, целевых процессоров и пользовательских S-функций может ввести дополнительные зависимости заголовка.

Заголовочный файлОписание и условия включения для целевых файлов GRT или ERT

builtin_typeid_types.h

Задает перечисленный тип, соответствующий встроенным типам данных

GRT и ERT - Сгенерированный код включает этот файл, когда применяется одно или несколько из следующих условий:

  • Ваша модель содержит диаграмму Stateflow, которая использует сообщения.

  • Ваше строение модели включает: MAT-file logging. См. журнал MAT-файлов.

  • Ваша модель строением выбирает опции C API на Code Generation > Interface.

dt_info.h

Определяет структуры данных для режима external mode

GRT и ERT - Сгенерированный код включает этот файл, когда строение вашей модели включает режим external mode.

ext_work.h

Определяет функции режима external mode

GRT и ERT - Сгенерированный код включает этот файл, когда строение вашей модели включает режим external mode.

fixedpoint.h

Обеспечивает поддержку неинлинфицированных S-функций с фиксированной точкой

GRT - сгенерированный код включает этот файл.

ERT - Сгенерированный код включает этот файл, когда либо:

  • Ваша модель использует нелинейные S-функции.

  • Ваше строение модели выбирает Classic call interface параметра.

model_reference_types.h

Содержит определения типов для мостов синхронизации

GRT и ERT - Сгенерированный код включает этот файл при построении образца модели или построении модели, которая содержит блоки модели.

model_types.h

Определяет специфичные для модели типы данных

GRT и ERT - сгенерированный код включает этот файл.

multiword_types.h

Содержит определения типов для многословных типов данных и их фрагментов размера слова

GRT и ERT - Сгенерированный код включает этот файл, когда применяется одно или несколько из следующих условий:

  • Ваша модель использует типы данных с несколькими словами.

  • Ваше строение модели выбирает MAT-file logging параметра. См. журнал MAT-файлов.

  • Ваша модель строением выбирает External mode.

Для модели, которая использует типы данных с несколькими словами, генератор кода перезаписывает файл, если типы данных больше по длине, чем типы данных модели, для которой в последний раз был сгенерирован код. Чтобы избежать перезаписи этого файла, установите:

  • MultiwordTypeDef на 'User defined'

  • MultiwordLength до самой большой длины, которая требуется вашим моделям.

rtGetInf.h

rtGetNaN.h

rt_nonfinite.h

Поддержка нефинитных чисел

GRT - Сгенерированный код включает этот файл, когда применяются одно или несколько из следующих условий:

  • Ваша модель содержит S-функции.

  • Сгенерированный код требует нефинитных чисел.

  • Ваше строение модели выбирает MAT-file logging параметра. См. журнал MAT-файлов.

  • Ваше строение модели выбирает Classic call interface параметра.

ERT - Сгенерированный код включает этот файл, когда применяются одно или несколько из следующих условий:

  • Ваша модель содержит S-функции.

  • Сгенерированный код требует нефинитных чисел.

  • Ваше строение модели выбирает MAT-file logging параметра. См. журнал MAT-файлов.

rt_defines.h

Содержит определения типов для специальных математических констант (таких как и e) и задает UNUSED_PARAMETER макрос

GRT и ERT - сгенерированный код включает этот файл, когда либо:

  • Сгенерированный код требует математического определения константы.

  • Тело функции не обращается к необходимому аргументу функции модели.

rt_logging.h

Поддерживает логгирование MAT-файлов и включает:

rtwtypes.h
builtin_typeid_types.h
multiword_types.h
rt_mxclassid.h
rtw_matlogging.h

GRT - сгенерированный код включает этот файл.

ERT - Сгенерированный код включает этот файл, когда вы моделируете строение выбирает MAT-file logging параметра. См. журнал MAT-файлов.

rt_mxclassid.h

Определяет mxArray перечисления идентификаторов классов

GRT и ERT - сгенерированный код включает этот файл, когда код включает rt_logging.c.

rtw_continuous.h

Поддерживает непрерывное время

GRT - Сгенерированный код включает этот файл, когда код включает simstruc_types.h.

ERT - Сгенерированный код включает этот файл, когда ваше строение модели выбирает параметр Support: continuous time и когда код еще не включает simstruc.h.

rtw_extmode.h

Поддерживает режим external mode

GRT - Сгенерированный код включает этот файл, когда код включает simstruc_types.h.

ERT - Сгенерированный код включает этот файл, когда ваше строение модели выбирает режим external mode и когда код еще не включает simstruc.h.

rtw_matlogging.h

Поддерживает логгирование MAT-файлов

GRT - Сгенерированный код включает этот файл, когда код включает simstruc_types.h и rt_logging.h.

ERT - Сгенерированный код включает этот файл, когда код включает rt_logging.h.

rtw_solver.h

Поддерживает непрерывные состояния

GRT - Сгенерированный код включает этот файл, когда код включает simstruc_types.h.

ERT - Сгенерированный код включает этот файл, когда ваше строение модели выбирает параметр Support: continuous time и когда код еще не включает simstruc.h.

rtwtypes.h

Определяет типы данных генератора кода

GRT - сгенерированный код включает этот файл. Использует подробную версию файла, которая включает tmwtypes.h.

ERT - сгенерированный код включает этот файл. См. rtwtypes.h.

Генератор кода перезаписывает ранее сгенерированный rtwtypes.h, когда вы включите (ранее отключенный) поддержку для:

  • Комплексные числа (SupportComplex установлено на 'on').

  • Нелинейные S-функции (SupportNonInlinedSFcns установлено на 'on')

Чтобы избежать перезаписи rtwtypes.h, можно:

  • Задайте поддержку сложных типов данных для ваших моделей, даже если модели в настоящее время не используют типы комплексных данных.

  • Отключите поддержку нелинейных S-функций. В этом случае использование неинлинфицированной S-функции приводит к ошибке. Чтобы избежать ошибки, преобразуйте S-функцию в встроенную S-функцию. Для получения дополнительной информации смотрите Inlining S-Functions (Embedded Coder).

simstruc.h

Поддерживает вызов нелинейных S-функций, которые используют Simstruct определение; также включает в себя:

limits.h
string.h
tmwtypes.h
simstruc_types.h

GRT - сгенерированный код включает этот файл.

ERT - Сгенерированный код включает этот файл, когда либо:

  • Ваша модель использует нелинейные S-функции.

  • Ваше строение модели выбирает Classic call interface параметра.

simstruc_types.h

Предоставляет определения, которые использует сгенерированный код, и включает файлы заголовков:

rtw_matlogging.h
rtw_extmode.h
rtw_continuous.h
rtw_solver.h
sysran_types.h

GRT - Сгенерированный код включает этот файл, когда код включает rtwtypes.h.

ERT - сгенерированный код не включает этот файл. Для ERT, rtwtypes.h содержит определения и model.h содержит заголовочные файлы.

sysran_types.h

Поддерживает режим external mode

GRT - Сгенерированный код включает этот файл, когда код включает simstruc_types.h.

ERT - Сгенерированный код включает этот файл, когда ваше строение модели выбирает режим external mode и когда код еще не включает simstruc.h.

zero_crossing_types.h

Содержит определения пересечения нулем для моделей с триггируемыми подсистемами, где триггер поднимается, падает или либо. Файл генерируется только, если это требуется моделью, как определяется типом данных триггерного сигнала. Например, если тип данных триггерного сигнала является логическим, обнаружение пересечения нуля не требуется.

GRT - Сгенерированный код не включает этот файл для целей генерации кода GRT.

ERT - Сгенерированный код включает этот файл, когда модель имеет условно выполненную подсистему, где триггер использует обнаружение пересечения нуля.

Если сгенерирован, то содержимое zero_crossing_types.h всегда одно и то же.

Похожие темы