Если вы хотите использовать пользовательский системный целевой файл для создания модели с ссылочными моделями, необходимо сконфигурировать пользовательский системный целевой файл, чтобы поддержать ссылки на модель.
Чтобы создать модель, которая ссылается на другие модели:
Используйте пользовательский системный целевой файл, полученный из системного целевого файла GRT или ERT.
Пользовательский системный целевой файл должен объявить соответствие модели-ссылки - см. Объявление модели-ссылки на соответствие.
Шаблон make-файла должен определять некоторые сущности, поддерживающие ссылки на модели - см. «Предоставление поддержки моделей-ссылок» в TMF.
Чтобы объявить модель-ссылку податливости для вашего целевого устройства, необходимо реализовать функцию обратного вызова, которая устанавливает ModelReferenceCompliant
флаг, а затем установите функцию обратного вызова в SelectCallback
поле rtwgensettings
структура в целевом файле системы. Функция обратного вызова запускается каждый раз, когда пользователь выбирает цель в System Target File Browser. Например, следующий системный код целевого файла устанавливает SelectCallback
функция с именем custom_select_callback_handler
:
rtwgensettings.SelectCallback = 'custom_select_callback_handler(hDlg,hSrc)';
Аргументы в адрес SelectCallback
функция (hDlg
, hSrc
) являются указателями на частные данные, используемые функциями API коллбэка. Эти указатели ограничены для использования в функциях обратного вызова системного целевого файла. Они должны быть переданы без переделок.
Ваша функция обратного вызова должна задать ModelReferenceCompliant
отметьте следующим образом:
slConfigUISetVal(hDlg,hSrc,'ModelReferenceCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ModelReferenceCompliant',false); hSrc.refreshDialog;
Если можно использовать целевой объект для построения моделей, содержащих большую модель иерархий ссылки, рассмотрите настройку целевого объекта для поддержки параллельных сборок, как обсуждается в разделе Сокращение времени сборки для ссылочных моделей при помощи параллельных сборок.
Чтобы сконфигурировать цель для параллельных сборок, ваша функция обратного вызова должна также задать ParMdlRefBuildCompliant
отметьте следующим образом:
slConfigUISetVal(hDlg,hSrc,'ParMdlRefBuildCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ParMdlRefBuildCompliant',false); hSrc.refreshDialog;
Для получения дополнительной информации о системном API коллбэка целевого файла, смотрите slConfigUIGetVal
, slConfigUISetEnabled
, и slConfigUISetVal
function страниц с описанием.
Чтобы сконфигурировать шаблон make-файла (TMF) для ссылки на модель:
Добавьте следующие переменные make и лексемы, которые будут расширены при генерации make-файла:
MODELREFS = |>MODELREFS<| MODELLIB = |>MODELLIB<| MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<| MODELREF_LINK_RSPFILE = |>MODELREF_LINK_RSPFILE_NAME<| RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<| MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
Следующий фрагмент кода показов, как лексемы make-файла расширяются для ссылочной модели.
MODELREFS = MODELLIB = engine3200cc_rtwlib.a MODELREF_LINK_LIBS = MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = ../../.. MODELREF_TARGET_TYPE = RTW
Следующий фрагмент кода показывает, как лексемы make-файла расширяются для верхней модели, которая ссылается на модель-ссылку.
MODELREFS = engine3200cc transmission MODELLIB = MODELREF_LINK_LIBS = engine3200cc_rtwlib.a transmission_rtwlib.a MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = .. MODELREF_TARGET_TYPE = NONE
Лексема | Расширяется до |
---|---|
MODELREFS для верхней модели | Список имен моделей-ссылок. |
MODELLIB | Имя библиотеки, сгенерированной для модели. |
MODELREF_LINK_LIBS лексема для верхней модели | Список ссылочных библиотек модели, с которыми связана верхняя модель. |
MODELREF_LINK_RSPFILE лексема для верхней модели | Имя файла ответа, с которым связана верхняя модель. Эта лексема действительна только для окружений сборки, поддерживающих файлы отклика linker. Пример его использования см. в . |
RELATIVE_PATH_TO_ANCHOR | Относительный путь от местоположения сгенерированного make-файла к MATLAB® рабочая папка. |
MODELREF_TARGET_TYPE | Указывает тип создаваемого целевого объекта. Возможные значения:
|
Если вы конфигурируете цель для поддержки параллельных сборок, как обсуждается в разделе Сокращение времени сборки для ссылок на Модели при помощи Parallel Builds, необходимо также добавить следующие определения токенов к TMF:
START_DIR = |>START_DIR<| MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
Лексема | Расширяется до |
---|---|
START_DIR | Текущая рабочая папка (pwd ) на момент запуска сборки. |
MASTER_ANCHOR_DIR | Текущая рабочая папка (pwd ) на момент запуска сборки. |
Добавьте RELATIVE_PATH_TO_ANCHOR
включить путь к общей INCLUDES
переменная.
INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(ADD_INCLUDES) \ $(USER_INCLUDES) $(SHARED_INCLUDES)
Измените SRCS
переменная в TMF, так что в ней первоначально перечислены только общие модули. Затем дополнительные модули добавляются условно, как описано на следующем этапе. Для примера измените
SRCS = $(MODEL).c $(MODULES) ert_main.c $(ADD_SRCS) $(EXT_SRC)
кому
SRCS = $(MODULES)
Создайте переменные, чтобы определить конечную цель make-файла. Можно удалить переменные, которые могли существовать для определения конечного целевого объекта. Для примера удалите
PROGRAM = ../$(MODEL)
и замените его на
ifeq ($(MODELREF_TARGET_TYPE), NONE) # Top model for RTW PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/$(MODEL) BIN_SETTING = $(LD) $(LDFLAGS) -o $(PRODUCT) $(SYSLIBS) BUILD_PRODUCT_TYPE = "executable" # ERT based targets SRCS += $(MODEL).c ert_main.c $(EXT_SRC) # GRT based targets # SRCS += $(MODEL).c grt_main.c rt_sim.c $(EXT_SRC) $(SOLVER) else # sub-model for RTW PRODUCT = $(MODELLIB) BUILD_PRODUCT_TYPE = "library" endif
Примечание
Если файл make-файла шаблона связан с набором инструментов, удалите $(MODEL).c
или $(MODEL).$(TARGET_LANG_EXT)
от SRCS
список.
Создайте правила для конечного целевого файла make (замените существующие конечные правила). Для примера:
ifeq ($(MODELREF_TARGET_TYPE),NONE) # Top model for RTW $(PRODUCT) : $(OBJS) $(LIBS) $(MODELREF_LINK_LIBS) $(BIN_SETTING) $(LINK_OBJS) $(MODELREF_LINK_LIBS) $(LIBS) @echo "### Created $(BUILD_PRODUCT_TYPE): $@" else # sub-model for RTW $(PRODUCT) : $(OBJS) $(LIBS) @rm -f $(MODELLIB) $(ar) ruvs $(MODELLIB) $(LINK_OBJS) @echo "### Created $(MODELLIB)" @echo "### Created $(BUILD_PRODUCT_TYPE): $@" endif
Создайте правило, позволяющее ссылочным моделям компилировать файлы, которые находятся в рабочей папке MATLAB (pwd
).
%.o : $(RELATIVE_PATH_TO_ANCHOR)/%.c $(CC) -c $(CFLAGS) $<
Примечание
Если вы используете TMF без переменной MODELREFS
, возможно, файл был использован в предыдущем релизе Simulink® программное обеспечение. Если вы хотите, чтобы ваш TMF поддерживал ссылки на модель, добавьте любую переменную MODELREFS
в файл создания.
По умолчанию значение опции строения, заданное в системном целевом файле для пользовательского целевого объекта на основе TLC, должно быть одинаковым в модели-ссылке и ее родительской модели. Чтобы ослабить это требование, включите modelReferenceParameterCheck
поле в rtwoptions
элемент структуры, который определяет опцию строения и устанавливает значение поля равным 'off'
. Для примера:
rtwoptions(2).prompt = 'My Custom Parameter'; rtwoptions(2).type = 'Checkbox'; rtwoptions(2).default = 'on'; rtwoptions(2).modelReferenceParameterCheck = 'on'; rtwoptions(2).tlcvariable = 'mytlcvariable'; ...
Опция строения My Custom Параметра может отличаться в модели-ссылке и ее родительской модели. Смотрите Настройте Системные Целевые Файлы для получения информации о системных целевых файлах на основе TLC и rtwoptions Structure Fields Summary для списка rtwoptions
поля.
Файлы hook являются необязательными программными файлами TLC и MATLAB, которые вызываются на четко определенных этапах процесса сборки. Файлы Hook позволяют вам настраивать процесс сборки и передавать информацию между различными фазами процесса.
Если вы адаптируете свой пользовательский целевой объект для совместимости генерации кода с моделью-ссылкой функций, рассмотрите добавление проверок в файлы hook для обработки ссылочных моделей по-другому, чем верхние модели, чтобы предотвратить конфликты ресурсов.
Например, рассмотрите добавление следующей проверки к вашему
:STF
_make_rtw_hook.m файл
% Check if this is a referenced model mdlRefTargetType = get_param(codeGenModelName,`ModelReferenceTargetType'); isNotModelRefTarget = strcmp(mdlRefTargetType, `NONE'); % NONE, SIM, or RTW if isNotModelRefTarget % code that is specific to the top model else % code that is specific to the referenced model end
Возможно, вам потребуется выполнить аналогичную проверку в коде TLC.
%if !IsModelReferenceTarget() %% code that is specific to the top model %else %% code that is specific to the referenced model %endif