Допускающая повторное использование подсистема библиотеки является подсистемой, включенной в библиотеку, которая сконфигурирована для повторного использования. Необходимо задать подсистему в библиотеке и сконфигурировать его для повторного использования, чтобы снова использовать подсистему через модели.
К общей функциональности повторного использования можно включать несколько экземпляров подсистемы:
В одной модели, которая является топ-моделью или частью иерархии модели - ссылки
Через несколько моделей, на которые ссылаются, в иерархии модели - ссылки
Через несколько топ-моделей, которые содержат блоки Model
Через несколько топ-моделей, которые не включают блоки Model
Генератор кода использует контрольные суммы, чтобы определить возможность многократного использования. Существуют случаи, когда генератор кода не может снова использовать код подсистемы.
Для инкрементной генерации кода, если допускающая повторное использование подсистема библиотеки изменяется, происходит восстанавливание себя и его родительских элементов. Во время сборки, если соответствующая функция не найдена, новый экземпляр допускающей повторное использование функции сгенерирован в разделяемую сервисную папку. Если различная функция соответствия найдена от предыдущих сборок, эта функция используется, и новая допускающая повторное использование функция не испускается.
Для последующих сборок неиспользованные файлы не заменены или удалены из вашей папки. Во время разработки модели, когда много устаревших разделяемых функций существуют в разделяемой сервисной папке, можно удалить папку и регенерировать код. Если все экземпляры допускающей повторное использование подсистемы библиотеки удалены из иерархии модели - ссылки, и вы регенерируете код, устаревшие разделяемые функции остаются в разделяемой сервисной папке, пока вы не удаляете их.
Если модель изменяется таким образом, что изменение может вызвать различный сгенерированный код для подсистемы, новая допускающая повторное использование функция сгенерирована. Например, параметры конфигурации модели, которые изменяют комментарии к коду, могут вызвать различный сгенерированный код для подсистемы, даже если допускающая повторное использование подсистема библиотеки не изменилась.
Пользователи Embedded Coder могут сгенерировать код от библиотеки, которая содержит подсистемы, сконфигурированы для повторного использования. Для получения дополнительной информации смотрите Основанную на библиотеке Генерацию кода для Допускающих повторное использование Подсистем Библиотеки.
Сгенерированный код допускающей повторное использование подсистемы библиотеки независим от сгенерированного кода модели. Код для допускающей повторное использование подсистемы библиотеки сгенерирован к разделяемой служебной папке, slprj/
, вместо папок иерархии модели - ссылки. Сгенерированный код для типов поддержки, которые сгенерированы к target
/ _sharedutils.h
файл, находятся также в разделяемой сервисной папке.
Для уникального именования допускающим повторное использование именам функций добавили контрольную сумму к допускающему повторное использование имени подсистемы библиотеки. Например, код и файлы для подсистемы, SS1
, который соединяется с допускающей повторное использование подсистемой библиотеки, RLS
, может быть:
FunctionName : RLS_mgdjlngd
FileName : RLS_mgdjlnd.c
и RLS_mgdjlnd.h
Установите параметры Подсистемы, как перечислено здесь:
Выберите Treat as an atomic unit.
На вкладке Code Generation:
Установите Function packaging на Reusable function
.
Установите Function name options
и параметры File name options к одной из следующих комбинаций:
Установите Function name options и File name options к Auto
.
Установите Function name options на Use subsystem name
и File name options к Use function name
.
Установите Function name options на User specified
и File name options к Auto
или Use function name
.
Установите Function name options на User specified
и File name options к User specified
. Установите то же значение для параметров File name и Function name.
В иерархии модели - ссылки, если экземпляр допускающей повторное использование подсистемы библиотеки находится в топ-модели, то на панели Model Referencing диалогового окна Configuration Parameters, необходимо выбрать параметр Pass fixed-size scalar root input by value for code generation. Если вы не выбираете параметр, отдельная разделяемая функция сгенерирована для допускающего повторное использование экземпляра подсистемы библиотеки в топ-модели, и допускающая повторное использование функция сгенерирована для экземпляров в моделях, на которые ссылаются.
Если допускающая повторное использование подсистема библиотеки соединяется с корневым Выходным портом, повторного использования не происходит с идентичными подсистемами, которые не соединяются с корневым Выходным портом. Однако можно установить Pass reusable system outputs as на Individual arguments
на панели Optimizations, чтобы убедиться, что повторное использование находится между этими подсистемами. Этот параметр требует лицензии Embedded Coder®.
Для получения дополнительной информации о создании библиотеки смотрите Пользовательские Библиотеки. Для примера создания допускающей повторное использование подсистемы библиотеки смотрите, Генерируют Повторно используемый код для Подсистем, Разделяемых Через Модели.
Для модели, чтобы использовать допускающую повторное использование подсистему библиотеки, необходимо сконфигурировать модель по-другому в зависимости от того, является ли модель образцом модели или топ-моделью. Если подсистема находится в иерархии модели, на которую ссылаются, установите параметр конфигурации, Разделяемое размещение кода к Auto
. В противном случае, для каждой модели, которая использует подсистему, устанавливает параметр конфигурации модели Shared code placement на Shared location
.
Если допускающая повторное использование подсистема библиотеки использует разделяемое локальное хранилище данных, и вы конфигурируете отображение значения по умолчанию для элементов данных модели, оставляете отображение класса памяти по умолчанию для категории набор Shared local data stores к Default.
В этом примере показано, как сконфигурировать допускающую повторное использование подсистему библиотеки и сгенерировать допускающую повторное использование функцию для подсистемы, совместно использованной через модели, на которые ссылаются. Результатом является повторно используемый код для подсистемы, которая сгенерирована к разделяемой служебной папке (slprj/
).target
/ _sharedutils
В Редакторе Simulink, на вкладке Simulation, выбирают New > Library. Выберите Blank Library из окна Simulink Start Page. Открытый rtwdemo_ssreuse
скопировать и вставить подсистему SS1
в Редактор Библиотеки. Это действие загружает переменные для SS1
в базовое рабочее пространство. Переименуйте блок подсистемы в RLS
.
Кликните по блоку Subsystem и нажмите Ctrl+U, чтобы просмотреть содержимое подсистемы RLS
.
Чтобы сконфигурировать подсистему, в редакторе Библиотеки, щелкают правой кнопкой по RLS
. В контекстном меню выберите Block Parameters (Subsystem). В диалоговом окне Subsystem Parameters выберите следующие опции:
Выберите Treat as an atomic unit.
На вкладке Code Generation:
Установите Function packaging на Reusable function
.
Установите Function name options на User specified
и проверьте, что Function name установлен в myfun
.
Установите File name options на Auto
.
Нажмите Apply и OK.
Сохраните допускающую повторное использование подсистему библиотеки как ssreuselib
, который создает файл, ssreuselib.slx
.
Создайте модель, которая включает один экземпляр RLS
от ssreuselib
. Назовите эту подсистему SS1
. Добавьте другую подсистему и назовите ее SS2
. Назовите модель ex_model1
.
Создайте другую модель, которая включает один экземпляр RLS
от ssreuselib
. Назовите эту подсистему SS1
. Добавьте другую подсистему и назовите ее SS3
. Назовите модель ex_model2
.
Создайте топ-модель с двумя блоками модели тот ссылочный ex_model1
и ex_model2
. Сохраните топ-модель как ex_mdlref_ssreuse
.
С моделью ex_mdlref_ssreuse
открытый в Редакторе Simulink, на вкладке C Code, нажимают Settings, чтобы открыть диалоговое окно Configuration Parameters.
На панели Solver задайте Type как Fixed-step
.
На панели Model Referencing выберите Pass fixed-size scalar root inputs by value for code generation.
На панели Code Generation > Report выберите Create code generation report и Open report automatically.
На панели Code Generation > Interface, набор Разделяемое размещение кода к Shared location
.
На панели Code Generation > Identifiers, набор Maximum identifier length к 256
. Этот шаг является дополнительным.
Нажмите Apply и OK.
В Редакторе Simulink, на вкладке Modeling, нажимают Model Explorer, чтобы открыть Model Explorer. В левом столбце навигации Model Explorer расширьте ex_mdlref_ssreuse
узел.
Выберите узел Настроек ниже ex_mdlref_ssreuse
узел. В панели Contents щелкните правой кнопкой по Configuration и выберите Convert to Configuration Reference
.
В диалоговом окне Convert Active Configuration to Reference нажмите OK. Это действие преобразует набор конфигурации модели в ссылку настройки, Simulink.ConfigSetRef
, и создает объект ссылки настройки, configSetObj
, в базовом рабочем пространстве.
В левом столбце навигации щелкните правой кнопкой по Reference (Active) и выберите Propagate to Referenced Models
.
В диалоговом окне Configuration Reference Propagation to Referenced Models выберите модели, на которые ссылаются, в списке. Нажмите Propagate.
Теперь топ-модель и модели, на которые ссылаются, используют ту же ссылку настройки, Reference (Active)
, который указывает на объект ссылки настройки модели, configSetObj
, в базовом рабочем пространстве. Когда вы сохраняете свою модель, также необходимо экспортировать configSetObj
к MAT-файлу.
Чтобы сгенерировать код, в Редакторе Simulink, нажимают Ctrl+B. После того, как код сгенерирован, отчет генерации кода открывается.
Чтобы просмотреть отчет генерации кода для модели, на которую ссылаются, в левой панели навигации, в разделе Referenced Models, выбирают ex_model1
. Отчет генерации кода отображает сгенерированные файлы для ex_model1
.
В левой панели навигации расширьте Shared files. Генератор кода использует допускающее повторное использование имя подсистемы библиотеки. Код для подсистемы SS1
находится в myfun.c
и myfun.h
.
Нажмите Back и перейдите к ex_model2
отчет генерации кода. ex_model2
использует тот же исходный код, myfun.c
и myfun.h
, как код для ex_model1
. Ваша функция подсистемы и имена файлов будут отличаться.