Можно уменьшать объем кода, который генератор кода производит для идентичных атомарных подсистем путем конфигурирования подсистем как допускающих повторное использование функций, которые передают данные в качестве аргументов (например, rtB_*
для ввода и вывода блока, rtDW_*
для непрерывных состояний и rtP_*
для параметров). По умолчанию генератор кода производит код подсистемы, который связывается с другим кодом путем совместного использования доступа к структурам глобальных данных, которые находятся в общей памяти. Передающими данными в качестве аргументов код может быть повторно используем. Каждый экземпляр кода поддерживает свои собственные уникальные данные.
Чтобы сконфигурировать подсистемы для возможности многократного использования и повторной входимости, сконфигурируйте маску и параметры блоков идентичных подсистем тот же путь. Генератор кода выполняет контрольную сумму, чтобы определить, идентичны ли подсистемы и является ли код допускающим повторное использование. Если код является допускающим повторное использование, генератор кода производит один экземпляр допускающего повторное использование, повторно используемого функционального кода.
Сконфигурировать параметры блоков подсистемы:
Если подсистема является виртуальной, выберите Treat как атомарный модуль (Simulink), чтобы включить функции упаковочные параметры.
На вкладке Code Generation, функция множества, упаковочная (Simulink) к Reusable function
. Генератор кода производит отдельную функцию с аргументами для каждой подсистемы. Выбор Reusable function
также включает дополнительные параметры, которые можно использовать, чтобы управлять именами функции и файлом, который генератор кода производит для кода подсистемы.
Опции имени Функции множества (Simulink). Чтобы сгенерировать допускающий повторное использование, повторно используемый код, задайте ту же установку для идентичных подсистем.
Чтобы позволить генератору кода определить имя функции, выберите Auto
.
Чтобы использовать имя подсистемы или, для блока библиотеки, имени блока библиотеки, выбирают Use subsystem name
.
Чтобы отобразить Имя функции (Simulink) параметр и ввести уникальное, допустимое имя функции C/C++, выберите User specified
.
Если несколько экземпляров идентичной подсистемы существуют в иерархии модели - ссылки, выберите Auto
.
Если вы используете Embedded Coder®, можно использовать управления форматом идентификатора. Смотрите Управление форматом Идентификатора (Embedded Coder).
Установите опции Имени файла (Simulink). Чтобы сгенерировать допускающий повторное использование, повторно используемый код, задайте ту же установку для идентичных подсистем.
Чтобы позволить генератору кода определить именование файла выбирают Auto
.
Чтобы использовать имя подсистемы или, для блока библиотеки, имя блока библиотеки выбирает Use subsystem name
.
Чтобы использовать имя функции, как задано Function name options выбирают Use function name
.
Чтобы отобразить Имя файла (никакое расширение) (Simulink) параметр и ввести имя файла, исключая расширение (например, .c
или .cpp
) выбирают User specified
.
Другие факторы:
Если несколько экземпляров идентичной подсистемы существуют в иерархии модели - ссылки, выберите Auto
.
Если генератор кода не генерирует отдельный файл для подсистемы, функциональный код помещается в файл, сгенерированный от родительской системы подсистемы. Если родительский элемент является самой моделью, генератор кода помещает функциональный код в
или model.c
.model.cpp
Если ваш сгенерированный код находится под системой контроля версий, задайте значение кроме Auto
. Эта спецификация препятствует тому, чтобы сгенерированное имя файла изменилось, когда вы изменяете и восстанавливаете модель.
Если вы выбираете Use subsystem name
, генератор кода искажает имя файла подсистемы, если модель содержит блоки Model, или если цель модели-ссылки генерируется для модели. В этих ситуациях генератор кода использует имя файла model
subsystem
.c
.
Если подсистема A имеет параметр маски, b
и K
и подсистема B имеют параметры маски c
и K
, повторное использование кода не возможно. Генератор кода производит отдельные функции для подсистем A и B. Если вы устанавливаете параметры блоков для подсистем A и B по-другому, повторное использование кода не возможно.
Генератор кода использует контрольную сумму, чтобы определить, являются ли подсистемы идентичными и допускающими повторное использование. Код подсистемы не снова используется если:
В блоках и объектах данных, вы используете символы, чтобы задать размерности.
Порт имеет различные шаги расчета, типы данных, сложность, состояние кадра или размерности через подсистемы.
Вывод подсистемы отмечен как глобальный сигнал.
Подсистемы содержат идентичные блоки с различными именами или установками параметров.
Вывод подсистемы соединяется с блоком Merge, и вывод блока Merge сконфигурирован с пользовательским классом памяти, который реализован в коде С как неадресуемая память (например, BitField
).
Вход подсистемы является нескалярным и сконфигурирован с пользовательским классом памяти, который реализован в коде С как неадресуемая память.
Подсистема маскированная имеет параметр, который является нескалярным и сконфигурирован с пользовательским классом памяти, который реализован в коде С как неадресуемая память.
Подсистема вызова функций использует параметры маски, когда вы устанавливаете поведение параметра Значения по умолчанию параметра конфигурации модели на Tunable
. Чтобы снова использовать подсистему вызова функций маскированную, поместите его в новой атомарной подсистеме без маски. Затем переместите блок Trigger от подсистемы маскированной в атомарную подсистему.
Блок в подсистеме использует partially tunable expression. Некоторые частично настраиваемые выражения отключают повторное использование кода.
Частично настраиваемые выражения являются выражениями, которые содержат одну или несколько настраиваемых переменных и выражение, которое не является настраиваемым. Например, предположите, что вы создаете настраиваемую переменную K
со значением 15.23
и настраиваемая переменная P
со значением [5;7;9]
. K+P'
выражения является частично настраиваемым выражением, потому что выражение P'
не является настраиваемым. Для получения дополнительной информации о настраиваемых ограничениях выражения, смотрите Настраиваемые Ограничения Выражения.
Для подсистем, которые содержат Блоки s-function, которые являются допускающими повторное использование, блоки должны удовлетворить требования, перечисленные в S-функциях То Повторное использование кода Поддержки (Embedded Coder).
Если вы выбираете Reusable function
, и генератор кода решает, что вы не можете снова использовать код для подсистемы, это генерирует отдельную функцию, которая не снова используется. Отчет генерации кода может показать, что отдельная функция является допускающей повторное использование, даже если только одна подсистема использует его. Если вы предпочитаете, чтобы генератор кода встроил код подсистемы в таких случаях (а не развернутый как функции), функция множества, упаковочная (Simulink) к Auto
.
Если допускающая повторное использование подсистема использует разделяемое локальное хранилище данных, и вы конфигурируете отображение значения по умолчанию для элементов данных модели, оставляете отображение класса памяти по умолчанию для категории набор Shared local data stores к Default.
Использование этих блоков в подсистеме может препятствовать тому, чтобы код подсистемы был снова использован:
Определите объем блоков (с включенной регистрацией данных)
Блоки s-function, которым не удается соответствовать определенным критериям (см. S-функции Что Повторное использование кода Поддержки (Embedded Coder)),
К блокам Файла (с включенной регистрацией данных)
К блокам Рабочей области (с включенной регистрацией данных)
Для допускающих повторное использование подсистем библиотеки (подсистемы, совместно использованные через эталонные модели), генератор кода использует контрольную сумму, чтобы определить, идентичны ли подсистемы. Генератор кода помещает допускающий повторное использование код подсистемы библиотеки в разделяемую сервисную папку, и повторно используемый код независим от сгенерированного кода топ-модели или эталонной модели. Например, допускающий повторное использование код подсистемы библиотеки не включает
или model.h
.model_types.h
Повторно используемый код, который генератор кода помещает в разделяемую сервисную папку и зависит от типового кодекса, не компилирует. Если генератор кода решает, что допускающий повторное использование код подсистемы библиотеки зависит от типового кодекса, допускающий повторное использование код подсистемы не помещается в разделяемую сервисную папку. Генератор кода производит код, который зависит от типового кодекса когда допускающая повторное использование подсистема библиотеки:
Содержит блок, который использует связанную со временем функциональность, такую как блок Step, или непрерывное время или многоскоростные блоки.
Содержит один или несколько блоков Model.
Содержит подсистему, которая не встраивается или допускающая повторное использование подсистема библиотеки.
Содержит сигнал, который не сконфигурирован с классом памяти Auto
. Генератор кода помещает переменные, которые сконфигурированы с non-Auto
классом памяти в
.model.h
Содержит параметр, который не является, конфигурируют с классом памяти Auto
.
Содержит пользовательский класс памяти как Перечисление, Simulink. Сигнал, Simulink. Параметр, и т.д. где Data Scope не установлен в Exported
. Генератор кода может поместить определение типа в
.model_types.h
Различная подсистема, которая генерирует условные выражения препроцессора. Генератор кода помещает директивы препроцессору, которые задают различные объекты в model_types.h
Вышеупомянутые ограничения также запрашивают основанную на библиотеке генерацию кода. Для получения дополнительной информации смотрите Основанную на библиотеке Генерацию кода для Допускающих повторное использование Подсистем Библиотеки (Embedded Coder).